如何通过Selenium为命令行启动的Chrome实例配置带认证的代理
解决连接已启动Chrome实例后的代理认证问题
方案一:预加载代理扩展到Chrome用户数据目录
连接已启动的Chrome实例时,Selenium的add_extension无法生效,需提前将代理认证扩展安装到指定的用户数据目录C:\selenum\ChromeProfile中:
创建代理扩展所需文件:
manifest.json:{ "version": "1.0.0", "manifest_version": 3, "name": "Proxy Auth Extension", "permissions": ["proxy", "storage", "tabs", "activeTab"], "background": { "service_worker": "background.js" }, "minimum_chrome_version": "100.0.0.0" }background.js(替换为你的代理信息):const proxyConfig = { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "proxyhost", port: parseInt("port") }, bypassList: ["localhost"] } }; chrome.proxy.settings.set({value: proxyConfig, scope: "regular"}, function() {}); chrome.webRequest.onAuthRequired.addListener( function(details) { return { authCredentials: { username: "username", password: "password" } }; }, {urls: ["<all_urls>"]}, ["blocking"] );
打包并安装扩展:
- 将上述两个文件放入同一文件夹,打包为ZIP(如
proxy_auth.zip)。 - 用指定用户目录启动Chrome:
google-chrome --user-data-dir="C:\selenum\ChromeProfile"。 - 打开
chrome://extensions/,开启开发者模式,点击「加载已解压的扩展程序」,选择存放文件的文件夹完成安装。
- 将上述两个文件放入同一文件夹,打包为ZIP(如
启动带远程调试的Chrome:
google-chrome --remote-debugging-port=9222 --user-data-dir="C:\selenum\ChromeProfile"此时Chrome已自带代理配置,Selenium连接后代理自动生效。
方案二:通过DevTools协议动态设置代理
连接已启动的Chrome实例后,使用Selenium调用Chrome DevTools Protocol(CDP)动态配置代理及认证:
import base64 from selenium import webdriver options = webdriver.ChromeOptions() options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") driver = webdriver.Chrome(options=options) # 配置代理服务器 proxy_settings = { "proxy": { "server": "http://proxyhost:port", "bypassList": ["localhost"] } } driver.execute_cdp_cmd("Network.setProxy", proxy_settings) # 开启Network模块并设置代理认证头 driver.execute_cdp_cmd("Network.enable", {}) auth_str = base64.b64encode(b"username:password").decode("utf-8") driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", { "headers": {"Proxy-Authorization": f"Basic {auth_str}"} })
注意:需确保在发送任何网络请求前完成上述配置,部分网站可能需要额外适配。
内容的提问来源于stack exchange,提问作者Nancy Collins
相关产品推荐
相关产品推荐

