【发布时间】:2019-08-06 08:53:49
【问题描述】:
我有一个 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 内实现关闭 chrome?即使我需要重新启动运行 django 项目的容器,您能告诉我如何在 python 脚本中执行此操作吗(docker 容器使用 python 脚本自行重新启动)。
【问题讨论】:
-
@LinPy 是的,当然
标签: python selenium docker google-chrome docker-compose