我正试图通过Selenium在Docker容器中运行一个用Python编写的Selenium脚本。不幸的是,我无法配置远程the驱动程序。
这是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完全陌生,对编程本身也很陌生,所以帮助是非常好的。
谢谢!
发布于 2022-10-27 13:49:54
TLDR :试试:
driver = webdriver.Remote(
desired_capabilities=DesiredCapabilities.FIREFOX,
command_executor="http://selenium-hub:4444/wd/hub"
)
它从vs代码中运行本地的原因是本地主机指向您的本地机器。您的码头容器对localhost的含义有自己的理解。当代码在容器中运行时,localhost引用该容器。那个集装箱在监听那个港口吗?可能不会-这就是为什么它不起作用。码头有自己的网络栈!
您想联系的是另一个容器“selenium-集线器”。在docker中,服务名称(或容器名称)成为主机,但这只能在坞网络中起作用。(为您创建了一个默认网络,但您没有指定网络)
https://stackoverflow.com/questions/71682729
复制相似问题