python - 在 webdiver 会话之后,Selenium 节点不会杀死进程
问题描述
我运行`Flask + Celery + Selenium Hub + Selenium Node。
我运行了很多使用远程 webdriver 的任务:
class Task:
def setup_driver(self):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--disable-notifications")
chrome_options.add_experimental_option('useAutomationExtension', False)
self.driver = webdriver.Remote(
command_executor='url',
options=chrome_options
)
self.driver.implicitly_wait(5)
def teardown_driver(self):
self.driver.quit()
def run(self):
self.setup_driver()
try:
pass
# do some logic
finally:
self.teardown_driver()
我总是driver.quit()
在任务结束时调用我的 docker-compose.yaml:
version: "3.3"
services:
webserver:
build: .
ports:
- 5000:5000
volumes:
- ./src:/app
- ./conf.yaml:/conf.yaml
- ./db:/db
restart: unless-stopped
command: 'uwsgi app.ini'
redis:
image: redis:latest
ports:
- 6379:6379
celery:
build: .
volumes:
- ./db:/db
command: celery -A app.celery_app worker --loglevel=INFO
celerybeat:
build: .
command: celery -A app.celery_app beat --loglevel=INFO --scheduler common.scheduler.TaskLockScheduler
chrome-node-1:
image: selenium/node-chrome:91.0
volumes:
- /dev/shm:/dev/shm
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_NODE_SESSION_TIMEOUT=300
- SE_NODE_MAX_SESSIONS=10
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
ports:
- "6900:5900"
chrome-node-2:
image: selenium/node-chrome:91.0
volumes:
- /dev/shm:/dev/shm
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_NODE_SESSION_TIMEOUT=300
- SE_NODE_MAX_SESSIONS=10
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
ports:
- "6901:5900"
selenium-hub:
image: selenium/hub:4.0.0
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
几个小时后,htop 向我展示了这些信息: 很多节点和集线器进程。
所以我的问题是:为什么集线器和节点不会杀死这个进程?driver.quit()
每次会话后使用。
解决方案
推荐阅读
- javascript - Chrome 拒绝加载脚本
- html - CSS 嵌套选择器,只选择第 2 级,忽略第 1 和第 3 级及以上
- elasticsearch - 仅当元素不存在时,如何将元素添加到 ElasticSearch 中的数组?
- html - XSLT 匹配属性并应用 css
- python - Python matplotlib/Seaborn 使用循环并排绘制直方图
- twilio - 如何从 Twilio Sandbox 在我的应用程序中捕获 WhatsAapp 消息
- azure - 使用 Azure 存储资源管理器查询将实体数据更新到 Azure 存储表
- c# - 如何在 C# 中使用文本框搜索列表视图的项目
- android - 片段中的 OnClickListener 不起作用。从片段到活动的意图
- angularjs - Laravel 5 + AngularJS 上的 CSRF 令牌