Docker Compose环境下运行selenium==4.0.0b2.post1版本Remote Driver问题咨询
解决Selenium 4 Remote Driver无法连接Docker Grid的问题
首先看你的情况,核心问题大概率出在Selenium客户端版本和Grid镜像版本不匹配上——你用的是selenium==4.0.0b2.post1,但Docker里的Grid和节点镜像是4.0.0-beta-3-prerelease-20210319,Selenium 4的早期beta版本之间兼容性差异很大,尤其是会话创建的通信协议细节,很容易出现“Grid显示会话创建,但客户端拿不到驱动”的情况。
下面给你几个具体的解决步骤:
1. 对齐客户端与Grid的版本
这是最关键的一步,必须让两者版本完全匹配:
- 如果你想保留客户端的
4.0.0b2.post1,修改docker-compose.yml里的镜像版本:services: chrome: image: selenium/node-chrome:4.0.0b2-post1 # 其他配置不变 selenium-hub: image: selenium/hub:4.0.0b2-post1 # 其他配置不变 - 或者升级Python客户端到对应Grid的版本,执行:
pip install selenium==4.0.0b3
2. 切换到Selenium 4推荐的Remote连接写法
Selenium 4对Remote驱动的初始化方式做了优化,推荐用options参数替代旧的desired_capabilities,虽然旧写法在文档里说兼容,但beta版本里可能存在兼容性bug,换成新写法试试:
from selenium import webdriver from selenium.webdriver.chrome.options import Options # 初始化Chrome选项 chrome_options = Options() # 如果需要添加额外配置,比如无头模式,可以在这里加: # chrome_options.add_argument("--headless=new") driver = webdriver.Remote( command_executor='http://localhost:4444/wd/hub', options=chrome_options ) driver.get('http://www.google.com/')
3. 验证Grid节点状态
从你的日志来看,Grid的Distributor已经创建了会话,但客户端没拿到响应,除了版本问题,也可以确认下Grid的状态:
- 访问Selenium 4新增的Grid控制台:
http://localhost:4444/ui,查看Chrome节点是否成功注册,有没有可用的会话槽位 - 用
docker-compose ps命令检查selenium-hub和chrome容器是否都处于Up状态,没有异常退出
另外,你已经设置了JAVA_OPTS=-Dwebdriver.chrome.whitelistedIps=,这个配置是对的,能避免Chrome驱动的IP白名单限制,不用修改。
内容的提问来源于stack exchange,提问作者The Dan
相关产品推荐
相关产品推荐

