【问题标题】:Selenium not closing browser processes inside dockerSelenium 没有关闭 docker 内的浏览器进程
【发布时间】: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


【解决方案1】:

尝试使用driver.close() 而不是driver.quit()。另外,请尝试在您的呼叫中添加超时...这可能只是链接下载时间过长。

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2023-03-13
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多