You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用undetected chromedriver配置代理时遇ERR_TUNNEL_CONNECTION_FAILED的解决方法

解决方案:在undetected-chromedriver中配置通用代理

方案1:修正--proxy-server参数配置(针对无需认证的代理)

直接使用--proxy-server出现隧道错误,大概率是参数格式或代理协议匹配问题,明确指定代理协议即可解决大部分场景的适配问题。

修改后的代码示例:

import random
import time
from undetected_chromedriver import Chrome, ChromeOptions

# 读取随机用户代理
with open("user-agents.txt", "r") as file:
    user_agents = file.readlines()
random_user_agent = random.choice(user_agents).strip()

# 生成代理配置
random_number = random.randint(0, 9)
proxy_host = "gate.smartproxy.com"
proxy_port = 10000 + random_number
# 明确指定代理协议,避免Chrome自动判断出错
proxy = f"http://{proxy_host}:{proxy_port}"

options = ChromeOptions()
options.add_argument(f"user-agent={random_user_agent}")
options.add_argument(f'--proxy-server={proxy}')
options.add_argument("--disable-blink-features=AutomationControlled")

driver = Chrome(options=options)
driver.get("https://www.whatismyip.com/")
time.sleep(10)
time.sleep(3000000)

方案2:使用Chrome扩展配置带认证的代理(通用适配所有网站)

如果代理需要用户名密码认证,直接用--proxy-server会触发认证弹窗导致隧道连接失败,此时用Chrome代理扩展是最稳定的适配方案。

步骤1:动态生成代理扩展文件

无需手动创建静态文件,在Python中动态生成临时扩展目录:

import random
import time
import os
from undetected_chromedriver import Chrome, ChromeOptions

# 读取随机用户代理
with open("user-agents.txt", "r") as file:
    user_agents = file.readlines()
random_user_agent = random.choice(user_agents).strip()

# 生成代理参数
random_number = random.randint(0, 9)
proxy_host = "gate.smartproxy.com"
proxy_port = 10000 + random_number
proxy_username = "你的代理用户名"
proxy_password = "你的代理密码"

# 创建临时扩展目录
temp_ext_dir = "./temp_proxy_ext"
os.makedirs(temp_ext_dir, exist_ok=True)

# 写入manifest.json
with open(os.path.join(temp_ext_dir, "manifest.json"), "w") as f:
    f.write('''{
  "version": "1.0.0",
  "manifest_version": 3,
  "name": "Dynamic Proxy",
  "permissions": ["proxy", "storage", "activeTab", "scripting", "webRequest", "webRequestBlocking"],
  "background": {
    "service_worker": "background.js"
  },
  "minimum_chrome_version": "100.0.0.0"
}''')

# 写入background.js(动态填充代理信息)
background_js = f"""
const proxyHost = "{proxy_host}";
const proxyPort = {proxy_port};
const username = "{proxy_username}";
const password = "{proxy_password}";

// 设置代理规则
chrome.proxy.settings.set({{
    value: {{
        mode: "fixed_servers",
        rules: {{
            singleProxy: {{
                scheme: "http",
                host: proxyHost,
                port: proxyPort
            }},
            bypassList: ["<local>"]
        }}
    }},
    scope: "regular"
}}, () => {{}});

// 自动处理代理认证
chrome.webRequest.onAuthRequired.addListener(
    (details, callback) => {{
        callback({{
            authCredentials: {{
                username: username,
                password: password
            }}
        }});
    }},
    {{ urls: ["<all_urls>"] }},
    ["blocking"]
);
"""
with open(os.path.join(temp_ext_dir, "background.js"), "w") as f:
    f.write(background_js)

# 配置Chrome选项
options = ChromeOptions()
options.add_argument(f"user-agent={random_user_agent}")
options.add_argument("--disable-blink-features=AutomationControlled")
# 加载临时代理扩展
options.add_argument(f"--load-extension={os.path.abspath(temp_ext_dir)}")

# 启动浏览器
driver = Chrome(options=options)
driver.get("https://www.whatismyip.com/")
time.sleep(10)
time.sleep(3000000)

方案3:排查代理本身的问题

  • 验证代理是否支持HTTPS隧道:用curl -x http://gate.smartproxy.com:10000 https://www.whatismyip.com测试,如果curl也报错,说明代理不支持HTTPS CONNECT方法,需更换代理。
  • 检查代理的地区/网站限制:部分代理服务商对特定网站有访问限制,导致连接失败,可联系服务商确认权限。
  • 确认代理端口有效性:你随机生成的10000-10009端口,需确保服务商开放了这些端口的代理服务。

内容的提问来源于stack exchange,提问作者user3362334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:43:15