使用Selenium+代理服务器出现net::ERR_TUNNEL_CONNECTION_FAILED错误求解决
解决Selenium代理报错net::ERR_TUNNEL_CONNECTION_FAILED
针对你用Selenium4 + Python3.10 + ChromeDriver104配置代理时出现的这个错误,以下是具体排查和解决方法:
1. 检查代理URL格式与认证信息
你当前的代理URL里密码末尾带了个.,大概率是输入错误——如果实际密码没有这个点,会直接导致代理认证失败,触发隧道连接错误。另外,如果用户名或密码包含特殊字符(比如@、&、=),必须先做URL编码,否则代理无法解析认证信息。
修正代码示例:
from urllib.parse import quote # 替换成你的真实用户名和密码 username = "your_username" password = "your_password" # 对特殊字符进行URL编码 encoded_user = quote(username) encoded_pwd = quote(password) proxy_url = f"http://{encoded_user}:{encoded_pwd}@gw.ntnt.ip:5959" options2 = { 'proxy': { 'https': proxy_url, 'http': proxy_url, # 建议同时配置http协议的代理 'no_proxy': 'localhost,127.0.0.1' } }
2. 修正Selenium参数与依赖版本
- Selenium4已经弃用了
chrome_options参数,改用options,别写错参数名; - Selenium Wire版本和Selenium4、Chrome版本不兼容也会导致这类问题,建议安装适配的版本:
pip uninstall selenium-wire -y pip install selenium-wire==5.1.0
修正后的驱动初始化代码:
driver = webdriver.Chrome(executable_path="C:\\chromedriver.exe", options=options, seleniumwire_options=options2)
3. 验证代理本身是否可用
先抛开代码,手动在Chrome浏览器里配置这个代理,访问https://www.whatsmyip.org/:
- 如果手动也连不上,说明代理服务器本身有问题(比如过期、IP被封、不支持HTTPS隧道),联系代理服务商解决;
- 如果手动能连上,检查本地防火墙、杀毒软件是否拦截了Python程序的代理请求。
4. 添加Chrome兼容性参数
给ChromeOptions加几个参数,优化代理连接的兼容性:
options.add_argument('--proxy-server-direct=keep-alive') options.add_argument('--disable-web-security') # 仅测试环境使用,生产环境谨慎开启 options.add_argument('--allow-running-insecure-content')
完整可测试代码
from selenium import webdriver from urllib.parse import quote import time # 替换为真实代理账号密码 username = "your_real_username" password = "your_real_password" encoded_user = quote(username) encoded_pwd = quote(password) proxy_url = f"http://{encoded_user}:{encoded_pwd}@gw.ntnt.ip:5959" seleniumwire_options = { 'proxy': { 'https': proxy_url, 'http': proxy_url, 'no_proxy': 'localhost,127.0.0.1' } } chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--ignore-certificate-errors') chrome_options.add_argument('--incognito') chrome_options.add_argument('--proxy-server-direct=keep-alive') driver = webdriver.Chrome(executable_path="C:\\chromedriver.exe", options=chrome_options, seleniumwire_options=seleniumwire_options) driver.get("https://www.whatsmyip.org/") time.sleep(40) driver.quit()
内容的提问来源于stack exchange,提问作者eymentakak
相关产品推荐
相关产品推荐

