Chrome带账号密码的代理登录失败问题求助
解决Chrome带账号密码的代理无法正常登录的问题
兄弟,你遇到的问题其实是新版Chrome的限制导致的——现在Chrome已经不允许直接在代理地址里嵌入账号:密码@主机:端口这种格式了,所以你拆分userpass和hostport的操作根本没法让Chrome完成代理认证,这就是核心原因。下面给你两个实测有效的解决办法:
方法一:用自定义Chrome扩展处理代理认证(最稳定)
这个方案是目前最靠谱的,因为扩展可以直接拦截浏览器的代理认证请求,自动帮你填入账号密码。
第一步:创建扩展文件
你需要建三个文件,放在同一个文件夹里:
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" } }
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
相关产品推荐
相关产品推荐

