我正在尝试通过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完全陌生,对编程本身也很陌生,所以帮助会非常非常好。
谢谢你,谢谢你
1条答案
按热度按时间z31licg01#
TLDR:请尝试以下操作:
它在vs-code中local工作的原因是localhost指向你的local机器。你的Docker容器对localhost的含义有自己的想法。当代码在容器内运行时,localhost引用那个容器。那个容器监听那个端口吗?可能没有--这就是它不工作的原因。Docker有自己的网络堆栈!
你想联系的是另一个容器“selenium-hub”。在docker中,服务名称(或容器名称)变成了主机--但这只在docker网络中起作用。(Docker-compose为你创建了一个默认网络,你不必指定一个)