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

Chrome带账号密码的代理登录失败问题求助

解决Chrome带账号密码的代理无法正常登录的问题

兄弟,你遇到的问题其实是新版Chrome的限制导致的——现在Chrome已经不允许直接在代理地址里嵌入账号:密码@主机:端口这种格式了,所以你拆分userpass和hostport的操作根本没法让Chrome完成代理认证,这就是核心原因。下面给你两个实测有效的解决办法:

方法一:用自定义Chrome扩展处理代理认证(最稳定)

这个方案是目前最靠谱的,因为扩展可以直接拦截浏览器的代理认证请求,自动帮你填入账号密码。

第一步:创建扩展文件

你需要建三个文件,放在同一个文件夹里:

  1. manifest.json(扩展的配置文件):
{
  "version": "1.0.0",
  "manifest_version": 3,
  "name": "Proxy Auth Helper",
  "permissions": ["proxy", "storage", "tabs", "webRequest", "webRequestAuthProvider"],
  "host_permissions": ["<all_urls>"],
  "background": {
    "service_worker": "background.js"
  }
}
  1. background.js(处理代理认证的核心逻辑):
// 这里后面会用Python代码动态替换成实际的代理信息
const proxyAuth = {
  username: "PLACEHOLDER_USER",
  password: "PLACEHOLDER_PASS",
  host: "PLACEHOLDER_HOST",
  port: "PLACEHOLDER_PORT"
};

// 设置代理服务器
chrome.proxy.settings.set({
  value: {
    mode: "fixed_servers",
    rules: {
      singleProxy: {
        scheme: "http", // 如果是HTTPS代理就改成"https"
        host: proxyAuth.host,
        port: parseInt(proxyAuth.port)
      }
    }
  },
  scope: "regular"
}, () => {});

// 自动处理代理认证弹窗
chrome.webRequest.onAuthRequired.addListener(
  (details, callbackFn) => {
    callbackFn({
      authCredentials: {
        username: proxyAuth.username,
        password: proxyAuth.password
      }
    });
  },
  { urls: ["<all_urls>"] },
  ["blocking"]
);

第二步:在Python代码中动态替换扩展配置并加载

修改你的代码,把从proxies.txt拿到的代理信息替换到扩展文件里,再加载扩展:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os

def getProxy(string_only=True):
    try:
        proxy_manager = ProxyManager("proxies.txt")
        proxy = proxy_manager.random_proxy()
        if string_only:
            return proxy.proxy_string
        return proxy.get_dict()
    except (OSError, IOError, IndexError) as e:
        # 加载代理文件失败/文件为空
        return None

# 获取代理信息
proxy_str = getProxy()
if proxy_str:
    # 拆分代理的账号密码、主机端口
    userpass_part, hostport_part = proxy_str.split("@")
    proxy_username, proxy_password = userpass_part.split(":")
    proxy_host, proxy_port = hostport_part.split(":")

    # 扩展文件夹路径(改成你自己的)
    ext_folder = "./chrome-proxy-extension"
    background_js_path = os.path.join(ext_folder, "background.js")

    # 动态替换background.js里的占位符
    with open(background_js_path, "r") as f:
        js_content = f.read()
    js_content = js_content.replace("PLACEHOLDER_USER", proxy_username)\
                          .replace("PLACEHOLDER_PASS", proxy_password)\
                          .replace("PLACEHOLDER_HOST", proxy_host)\
                          .replace("PLACEHOLDER_PORT", proxy_port)
    with open(background_js_path, "w") as f:
        f.write(js_content)

    # 配置Chrome选项
    chrome_options = Options()
    # 加载自定义扩展
    chrome_options.add_argument(f"--load-extension={os.path.abspath(ext_folder)}")
    # 禁用扩展开发者模式警告(可选)
    chrome_options.add_argument("--disable-extensions-except=" + os.path.abspath(ext_folder))
    chrome_options.add_argument("--disable-dev-shm-usage")

    # 启动Chrome浏览器
    driver = webdriver.Chrome(options=chrome_options)
    driver.get("https://www.google.com")
    # 这里可以继续你的业务逻辑
else:
    print("Failed to load valid proxy from proxies.txt")

方法二:用PAC脚本(适合临时测试)

PAC脚本是一种可以指定代理规则的脚本,也可以处理认证,但这种方式在部分Chrome版本或环境中可能被限制,适合临时测试用。

实现代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import tempfile

def getProxy(string_only=True):
    try:
        proxy_manager = ProxyManager("proxies.txt")
        proxy = proxy_manager.random_proxy()
        if string_only:
            return proxy.proxy_string
        return proxy.get_dict()
    except (OSError, IOError, IndexError) as e:
        return None

proxy_str = getProxy()
if proxy_str:
    userpass_part, hostport_part = proxy_str.split("@")
    proxy_username, proxy_password = userpass_part.split(":")
    proxy_host, proxy_port = hostport_part.split(":")

    # 生成PAC脚本内容
    pac_script = f"""
    function FindProxyForURL(url, host) {{
        return "PROXY {proxy_host}:{proxy_port};";
    }}
    // 部分浏览器支持通过这个函数返回认证信息
    function ProxyAuthCredentials() {{
        return {{
            username: "{proxy_username}",
            password: "{proxy_password}"
        }};
    }}
    """

    # 创建临时PAC文件
    with tempfile.NamedTemporaryFile(mode='w', suffix='.pac', delete=False) as f:
        f.write(pac_script)
        pac_file_path = f.name

    # 配置Chrome选项
    chrome_options = Options()
    chrome_options.add_argument(f"--proxy-pac-file={pac_file_path}")

    driver = webdriver.Chrome(options=chrome_options)
    driver.get("https://www.google.com")
else:
    print("No valid proxy available")

额外注意点

  • 一定要确保你的ChromeDriver版本和本地安装的Chrome版本完全一致,版本不兼容会导致各种奇怪的问题,包括代理失效。
  • 如果用的是HTTPS代理,记得把扩展里的scheme改成"https",PAC脚本里的代理类型也相应调整。
  • 部分代理服务商可能需要白名单或者额外的验证步骤,要是上述方法都不行,可以先手动用Chrome设置代理并登录,确认代理本身是可用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:32:00