[英]Selenium not closing browser processes inside docker
我有一個碼頭集裝箱:
...
web:
build:
context: .
dockerfile: Dockerfile
command: python /code/manage.py migrate --noinput
command: python /code/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- 80:8000
environment:
- SECRET_KEY=changemeinprod
depends_on:
- db
- redis
...
Selenium scrape 在這個容器中運行(docker 中的 django 項目):
...
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(executable_path=chrome_driver_path,
options=chrome_options)
driver.get(link)
...
...
pid = driver.service.process.pid
driver.quit()
try:
os.kill(int(pid), signal.SIGTERM)
print("Killed chrome using process")
except ProcessLookupError as e:
pass
盡管我使用命令driver.quit()
關閉driver
,chrome 進程仍在運行。 由於多個 chrome 進程正在運行,此腳本的每次執行都會保持 chrome 進程並使下一次執行速度變慢。 如何在 docker 中實現關閉鍍鉻? 即使我需要重新啟動運行 django 項目的容器,您能否告訴我如何在 python 腳本中執行此操作(docker 容器使用 python 腳本重新啟動)。
我建議您使用Zalenium。 它是一個Selenium Grid包裝器,有助於自動縮放/縮放。 這將使您的生活更加輕松。
嘗試使用driver.close()
而不是driver.quit()
。 另外,嘗試在您的呼叫中添加超時...這可能只是鏈接下載時間過長。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.