【问题标题】:How to connect to remote Selenium drivers within the same docker-compose?如何在同一个 docker-compose 中连接到远程 Selenium 驱动程序?
【发布时间】:2021-11-05 03:54:05
【问题描述】:

我遇到了一个

urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='chromedriver', port=4444): url: /wd/hub/session 超过最大重试次数(由 NewConnectionError(' : 建立新连接失败:[Errno 111] Connection refused'))

通过 Python 和 Docker 运行 Selenium。

我的连接如下所示:

self.driver = webdriver.Remote(
           command_executor='http://chromedriver:4444/wd/hub',
           options=options
       )

docker-compose 是这样的:

...
  chromedriver:
    image: selenium/standalone-chrome
    ports:
      - "4444:4444"
    hostname: chromedriver
    shm_size: 2g
  runner:
    image: "kevoooo/twitchfarm-runner:latest"
    entrypoint: "python3 /py-scripts/main.py"
    healthcheck:
        test: python3 /py-scripts/main.py
        interval: 30s
        timeout: 10s
        retries: 5
    environment:
      - DISPLAY=127.0.0.1
      - USER=uname
      - PASS=pass
      - 2FA_KEY=key
    volumes:
      - "chrome-data:/saves/google-chrome"
    depends_on:
      - chromedriver
...

提前致谢!

【问题讨论】:

  • 进入 chrome 容器并检查您的 webdriver 是否已启动。我相信它没有。
  • 你完全正确!但为什么呢?

标签: python docker selenium


【解决方案1】:

根据https://docs.docker.com/compose/startup-order/ - depends_on 只控制服务启动的顺序。它不知道容器什么时候准备好。

基本上,容器就绪状态是客户端如何处理它,因此由使用容器化服务的应用程序如何处理服务中断(由服务尚未完全启动或服务启动后的任何故障引起)开始)

所以你的解决方案是有道理的。尽管它足够粗糙。更好的选择是拥有一个轮询端点的脚本,直到返回成功,然后继续执行您的测试代码。

【讨论】:

    【解决方案2】:

    我通过将“runner”的入口点更改为:

        entrypoint: bash -c "sleep 10 && python3 /py-scripts/main.py"
    

    我想,这是由“依赖”子句处理的

    【讨论】:

    • 仍有更多“优雅”的方法来处理这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2017-09-11
    • 2019-01-14
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多