防火墙后使用Webdriver Manager:内网访问失败问题求助
解决方案
问题根源是你给Chrome设置了全局代理,导致内网请求也被强制发往防火墙代理服务器,进而触发ERR_TUNNEL_CONNECTION_FAILED错误。改用PAC文件就能让浏览器自动判断:公网请求走代理,内网请求直接访问,同时保留Webdriver Manager的代理配置用于下载ChromeDriver。
修改步骤
- 移除Chrome的全局代理参数,替换为PAC文件路径参数
- 保留Webdriver Manager的自定义HttpClient配置(确保能下载公网的ChromeDriver)
修改后的完整代码
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.core.download_manager import WDMDownloadManager from webdriver_manager.core.http import HttpClient from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from requests import Response import urllib3 import requests import os import time # 禁用WDM的SSL验证 os.environ['WDM_SSL_VERIFY'] = '0' urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Chrome配置:使用PAC文件替代全局代理 # 本地PAC文件格式:file:///C:/Users/xxx/Documents/organization.pac # 内网服务器PAC格式:http://intranet.example.com/proxy.pac PAC_FILE_URL = "file:///C:/path/to/your/organization.pac" opt = webdriver.ChromeOptions() # 移除全局代理,添加PAC文件配置 opt.add_argument(f'--proxy-pac-url={PAC_FILE_URL}') opt.add_argument("ignore-certificate-errors") opt.add_argument(f'user-data-dir=C:\\Users\\YourProfilePath') # 保留Webdriver Manager的代理配置,用于下载ChromeDriver class CustomHttpClient(HttpClient): def get(self, url, params=None) -> Response: proxies={ 'http': 'http://your-proxy-address', 'https': 'http://your-proxy-address', } return requests.get(url, params, proxies=proxies, verify=False) http_client = CustomHttpClient() download_manager = WDMDownloadManager(http_client) driver = webdriver.Chrome( service=Service(ChromeDriverManager(download_manager=download_manager).install()), options=opt )
关键说明
--proxy-pac-url参数让Chrome依据PAC文件内的规则自动路由请求,内网地址会直接访问,不会走代理- 自定义的
CustomHttpClient仅作用于Webdriver Manager下载ChromeDriver的过程,不干扰Chrome浏览器的请求路由 - 确保PAC文件路径正确:本地文件必须用
file:///开头(三个斜杠),Windows路径中的反斜杠需改成正斜杠或使用双反斜杠
内容的提问来源于stack exchange,提问作者didier severac
相关产品推荐
相关产品推荐

