Python Selenium+WebDriverManager:VPN可用LAN不可用问题排查
Selenium+WebDriverManager内网环境问题排查与解决
环境配置
- 操作系统:Windows 10
- Chrome版本:103.0
- WebDriver版本:3.8.2
- Selenium版本:4.3.0
- Python版本:3.10.5
需求与测试代码
目标是用Python Selenium自动化内网Web应用的重复操作,该应用支持Windows域账号自动登录。测试代码如下:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(TARGET_URL)
不同网络环境的差异结果
- 远程办公(VPN连接内网):Chrome正常启动并打开目标页面,可通过
page_source和find_element正常访问页面内容。 - 办公室办公(LAN直连内网):执行代码报错,关键错误信息如下:
Max retries exceeded with url: /103.0.5060/chromedriver_win32.zip (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000002719EE6F3A0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))
已尝试禁用WebDriverManager SSL验证的方案,但无效果。
原因分析
办公室内网环境大概率存在网络代理/防火墙限制,导致WebDriverManager无法访问外部下载源获取对应版本的ChromeDriver。VPN环境下可能走的是外部网络通道,不受内网代理限制,所以能正常下载。
可行解决方案
方案1:手动下载ChromeDriver并指定路径
- 下载与Chrome 103.0版本匹配的ChromeDriver(版本号需对应,比如Chrome 103.0.5060.x对应ChromeDriver 103.0.5060.53)
- 将
chromedriver.exe放到本地指定路径(比如./drivers/chromedriver.exe) - 修改代码,直接指定Service路径,不再依赖WebDriverManager自动下载:
from selenium import webdriver from selenium.webdriver.chrome.service import Service # 替换为你的chromedriver实际路径 driver = webdriver.Chrome(service=Service("./drivers/chromedriver.exe")) driver.get(TARGET_URL)
方案2:配置WebDriverManager使用内网代理
如果内网允许通过指定代理访问外部网络,可在代码中添加代理配置:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.core.utils import ProxyType from webdriver_manager.core.proxy import Proxy # 替换为内网实际的代理地址和端口 proxy = Proxy(proxy_type=ProxyType.HTTP, http_proxy="http://your-proxy:port", https_proxy="http://your-proxy:port") driver = webdriver.Chrome(service=Service(ChromeDriverManager(proxy=proxy).install())) driver.get(TARGET_URL)
方案3:配置WebDriverManager使用本地镜像源(如果内网有)
如果内网搭建了ChromeDriver的镜像源,可指定镜像地址:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.core.driver_cache import DriverCacheManager # 替换为内网镜像地址 cache_manager = DriverCacheManager(root_dir="./drivers", url="http://your-internal-mirror/chromedriver/") driver = webdriver.Chrome(service=Service(ChromeDriverManager(cache_manager=cache_manager).install())) driver.get(TARGET_URL)
内容的提问来源于stack exchange,提问作者Umbomas
相关产品推荐
相关产品推荐

