Docker容器调用webdriver.Chrome()抛WebDriverException,疑网络异常
解决Selenium 4.12.0在Docker中自动下载ChromeDriver超时的问题
针对你遇到的Selenium Manager下载ChromeDriver超时(手动可下载但容器内失败)的问题,提供以下几种解决方案:
1. 手动预下载并指定ChromeDriver路径
绕过Selenium Manager的自动下载流程,直接将驱动放入Docker镜像:
- 本地下载对应版本的
chromedriver-linux64.zip,解压得到chromedriver文件 - 在Dockerfile中添加复制命令,将驱动放到容器可执行路径:
COPY chromedriver /usr/local/bin/ RUN chmod +x /usr/local/bin/chromedriver - 代码中通过
Service类指定驱动路径:from selenium import webdriver from selenium.webdriver.chrome.service import Service service = Service(executable_path='/usr/local/bin/chromedriver') driver = webdriver.Chrome(service=service)
2. 配置Docker容器网络代理
如果容器内无法直接访问谷歌CDN,设置代理解决网络访问限制:
- 启动容器时传递代理环境变量:
docker run -e HTTP_PROXY=http://your-proxy-ip:port -e HTTPS_PROXY=http://your-proxy-ip:port your-image - 或在Dockerfile中预先设置代理:
ENV HTTP_PROXY=http://your-proxy-ip:port ENV HTTPS_PROXY=http://your-proxy-ip:port
3. 替换Selenium Manager的ChromeDriver镜像源
通过环境变量指定国内镜像源,避免访问谷歌CDN超时:
- 启动容器时设置镜像源环境变量:
docker run -e SE_MANAGER_CHROME_MIRROR=https://npm.taobao.org/mirrors/chromedriver/ your-image - 或在Dockerfile中添加:
ENV SE_MANAGER_CHROME_MIRROR=https://npm.taobao.org/mirrors/chromedriver/
4. 排查Docker容器网络连通性
验证容器内是否能正常访问目标地址:
- 进入容器执行curl测试:
docker exec -it your-container-name bash curl -v https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/117.0.5938.149/linux64/chromedriver-linux64.zip - 如果curl超时,需检查Docker网络配置(如自定义网络规则、宿主机防火墙等)
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

