Chrome Driver中Selenium无法连接住宅代理的问题求助
解决Selenium使用住宅代理的Chrome/Firefox报错问题
Chrome 报错 ERR_NO_SUPPORTED_PROXIES 的解决方法
Chrome 不支持直接在 --proxy-server 参数中嵌入账号密码,这是触发该错误的核心原因。以下两种方案可解决问题:
方案1:通过Chrome扩展自动处理代理认证
- 先创建两个扩展文件:
manifest.json:
{ "version": "1.0.0", "manifest_version": 3, "name": "Proxy Auth Helper", "permissions": ["proxy", "webRequest", "webRequestBlocking", "<all_urls>"], "background": { "service_worker": "background.js" } }background.js(替换为你的代理账号密码):
const USERNAME = "你的代理用户名"; const PASSWORD = "你的代理密码"; chrome.webRequest.onAuthRequired.addListener( (details) => ({ authCredentials: { username: USERNAME, password: PASSWORD } }), { urls: ["<all_urls>"] }, ["blocking"] ); - 在Selenium中加载该扩展并配置代理:
from selenium import webdriver from selenium.webdriver.chrome.options import Options proxy_address = "你的代理地址" proxy_port = "你的代理端口" options = Options() # 仅设置代理地址端口,不带账号密码 options.add_argument(f'--proxy-server=http://{proxy_address}:{proxy_port}') # 加载扩展(传入扩展文件夹路径,需将上述两个文件放在同一文件夹) options.add_extension('./proxy_auth_extension') driver = webdriver.Chrome(options=options) driver.get('https://idk.me') print(driver.page_source) driver.quit()
方案2:利用Chrome DevTools协议配置代理
通过CDP直接注入代理认证信息:
import base64 from selenium import webdriver proxy_address = "你的代理地址" proxy_port = "你的代理端口" proxy_username = "你的代理用户名" proxy_password = "你的代理密码" driver = webdriver.Chrome() # 编码账号密码 auth_str = base64.b64encode(f"{proxy_username}:{proxy_password}".encode()).decode() # 通过CDP设置代理 driver.execute_cdp_cmd('Network.setProxy', { 'proxyType': 'manual', 'httpProxy': f'{proxy_address}:{proxy_port}', 'httpsProxy': f'{proxy_address}:{proxy_port}', 'proxyAuthorization': f'Basic {auth_str}' }) driver.execute_cdp_cmd('Network.enable', {}) driver.get('https://idk.me') print(driver.page_source) driver.quit()
Firefox 代理认证窗口持续弹出的解决方法
Firefox不支持直接在代理URL中嵌入账号密码,需通过配置Firefox Profile来自动处理认证:
from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.firefox_profile import FirefoxProfile proxy_address = "你的代理地址" proxy_port = "你的代理端口" proxy_username = "你的代理用户名" proxy_password = "你的代理密码" profile = FirefoxProfile() # 启用手动代理 profile.set_preference("network.proxy.type", 1) # 设置HTTP/HTTPS代理 profile.set_preference("network.proxy.http", proxy_address) profile.set_preference("network.proxy.http_port", int(proxy_port)) profile.set_preference("network.proxy.ssl", proxy_address) profile.set_preference("network.proxy.ssl_port", int(proxy_port)) # 配置代理账号密码 profile.set_preference("network.proxy.socks_username", proxy_username) profile.set_preference("network.proxy.socks_password", proxy_password) # 禁用认证弹窗 profile.set_preference("network.automatic-ntlm-auth.trusted-uris", proxy_address) profile.set_preference("network.negotiate-auth.trusted-uris", proxy_address) options = Options() options.profile = profile driver = webdriver.Firefox(options=options) driver.get('https://idk.me') print(driver.page_source) driver.quit()
内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

