C#中Chrome Driver配置带账号密码的HTTP代理无效求助
解决ChromeDriver配置带用户名密码的HTTP代理失效问题
我帮你排查下这个问题——你现在用的直接把用户名密码嵌在代理URL里的方式,Chrome从新版本开始已经不再支持了,这就是配置没生效的核心原因。下面给你两种靠谱的解决方案,你可以根据场景选择:
方案一:用自定义Chrome扩展处理代理认证
这是最稳定的方法,适合长期使用的场景:
创建扩展文件
先在项目里新建一个文件夹(比如叫proxyExtension),里面放两个文件:manifest.json(扩展配置):{ "version": "1.0.0", "manifest_version": 3, "name": "Proxy Auth Helper", "permissions": ["proxy", "storage", "webRequest", "webRequestBlocking", "<all_urls>"], "background": { "service_worker": "background.js" }, "minimum_chrome_version": "100.0" }background.js(代理逻辑):// 配置代理服务器 chrome.proxy.settings.set({ value: { mode: "fixed_servers", rules: { singleProxy: { scheme: "http", host: "{你的代理地址}", // 替换成实际代理地址 port: {你的代理端口} // 替换成实际端口 }, bypassList: ["localhost", "127.0.0.1"] } }, scope: "regular" }, () => {}); // 拦截认证请求,自动填入用户名密码 chrome.webRequest.onAuthRequired.addListener( (details, callback) => { callback({ authCredentials: { username: "{你的代理用户名}", // 替换成实际用户名 password: "{你的代理密码}" // 替换成实际密码 } }); }, { urls: ["<all_urls>"] }, ["blocking"] );
注意把上面的占位符替换成你实际的代理信息。
打包扩展并在C#中加载
把proxyExtension文件夹打包成ZIP文件,然后在代码里配置ChromeOptions加载这个扩展:using System.IO.Compression; // 打包扩展文件夹为ZIP string extensionFolderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "proxyExtension"); string extensionZipPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "proxyAuth.zip"); if (File.Exists(extensionZipPath)) File.Delete(extensionZipPath); ZipFile.CreateFromDirectory(extensionFolderPath, extensionZipPath); // 配置ChromeOptions ChromeOptions options = new ChromeOptions(); options.AddExtension(extensionZipPath); // 启动ChromeDriver IWebDriver driver = new ChromeDriver(options);
方案二:用DevTools协议注入代理认证
如果不想打包扩展,可以用Chrome的DevTools协议动态注入认证信息,适合临时测试或快速迭代的场景:
using OpenQA.Selenium.Chrome; using OpenQA.Selenium.DevTools; using OpenQA.Selenium.DevTools.V114.Network; // 注意版本要和你的ChromeDriver匹配 // 配置基础代理(不带认证) string proxyAddress = $"{_proxy.textProxy}:{_proxy.numberProxyPort}"; ChromeOptions options = new ChromeOptions(); options.AddArgument($"--proxy-server=http://{proxyAddress}"); // 启动ChromeDriver ChromeDriver driver = new ChromeDriver(options); // 启用DevTools会话 DevToolsSession devToolsSession = driver.CreateDevToolsSession(); await devToolsSession.Network.Enable(new EnableCommandSettings()); // 注入代理认证信息 await devToolsSession.Network.SetAuthCredentials(new SetAuthCredentialsCommandSettings { Origin = "*", Username = _proxy.textUsername, Password = _proxy.textPassword }); // 测试代理是否生效 driver.Navigate().GoToUrl("https://api.ipify.org"); Console.WriteLine($"当前IP: {driver.PageSource}");
注意:这里的DevTools版本命名空间(比如
V114)要和你安装的ChromeDriver版本严格对应,否则会出现兼容性问题。
额外注意事项
- 确保ChromeDriver和Chrome浏览器的版本完全匹配,版本不兼容是很多代理问题的隐性原因。
- 测试代理是否生效时,建议访问
https://api.ipify.org,它会返回当前使用的IP,方便验证。 - 如果是企业环境,可能需要绕过内部的代理白名单,记得在扩展的
bypassList里添加对应的域名。
内容的提问来源于stack exchange,提问作者Chethana Hidogama




