在Docker中执行Selenium Python脚本

vsnjm48y  于 2022-11-03  发布在  Docker
关注(0)|答案(1)|浏览(162)

我正在尝试通过Selenium Grid运行Docker容器中用Python编写的Selenium脚本。不幸的是,我无法配置远程webdriver。
这是Docker合成文件:

version: "3"
services:
  chrome:
    image: selenium/node-chrome:4.1.3-20220327
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  firefox:
    image: selenium/node-firefox:4.1.3-20220327
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443

  selenium-hub:
    image: selenium/hub:4.1.3-20220327
    container_name: selenium-hub
    ports:
      - "4444:4444"

  python-script:
    build: .

以下是Python代码中的webdriver设置:

driver = webdriver.Remote(
        desired_capabilities=DesiredCapabilities.FIREFOX,
        command_executor="http://localhost:4444/wd/hub"
    )

当我用这些设置在本地运行Python脚本时,它可以正常工作。但是当我想在Docker容器中启动它时,我得到了以下错误,其中包括:

urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=4444): Max retries exceeded with url: /session (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f7b85c41780>: Failed to establish a new connection: [Errno 111] Connection refused'))

我对docker完全陌生,对编程本身也很陌生,所以帮助会非常非常好。
谢谢你,谢谢你

z31licg0

z31licg01#

TLDR:请尝试以下操作:

driver = webdriver.Remote(
    desired_capabilities=DesiredCapabilities.FIREFOX,
    command_executor="http://selenium-hub:4444/wd/hub"
)

它在vs-code中local工作的原因是localhost指向你的local机器。你的Docker容器对localhost的含义有自己的想法。当代码在容器内运行时,localhost引用那个容器。那个容器监听那个端口吗?可能没有--这就是它不工作的原因。Docker有自己的网络堆栈!
你想联系的是另一个容器“selenium-hub”。在docker中,服务名称(或容器名称)变成了主机--但这只在docker网络中起作用。(Docker-compose为你创建了一个默认网络,你不必指定一个)

相关问题