C# Selenium中Chrome代理账号密码弹窗的自动输入方案
解决Selenium C#中代理认证弹窗问题
你当前使用--proxy-auth参数可能无法正确绕过代理认证弹窗,这是因为Chrome的--proxy-auth参数在部分环境下不生效,或者代理服务器要求的是HTTP基础认证弹窗。以下是两种可行的解决方法:
方法1:将认证信息嵌入代理地址(推荐)
直接把用户名和密码嵌入到代理服务器地址中,Chrome会自动携带认证信息,不会弹出认证窗口。如果密码包含特殊字符(如@、:、/),需要先进行URL编码。
var options = new ChromeOptions(); string proxyHost = "your-proxy-host"; int proxyPort = 8080; // 替换为你的代理端口 string proxyUser = "your-username"; string proxyPassword = "your-password"; // 对用户名和密码进行URL编码,处理特殊字符 string encodedUser = Uri.EscapeDataString(proxyUser); string encodedPass = Uri.EscapeDataString(proxyPassword); // 构造带认证信息的代理地址 string proxyUrl = $"http://{encodedUser}:{encodedPass}@{proxyHost}:{proxyPort}"; options.AddArgument($"--proxy-server={proxyUrl}"); var driver = new ChromeDriver(options); driver.Navigate().GoToUrl("https://whatismyipaddress.com/");
方法2:通过Selenium Alert接口处理弹窗
如果嵌入地址的方法无效,可以直接操作浏览器的原生认证弹窗(属于HTTP基础认证Alert):
using OpenQA.Selenium.Support.UI; var options = new ChromeOptions(); string proxyHost = "your-proxy-host"; int proxyPort = 8080; string proxyUser = "your-username"; string proxyPassword = "your-password"; options.AddArgument($"--proxy-server=http://{proxyHost}:{proxyPort}"); var driver = new ChromeDriver(options); try { // 等待认证弹窗出现,超时时间10秒 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); IAlert authAlert = wait.Until(driver => driver.SwitchTo().Alert()); // 输入用户名和密码,用换行符分隔 authAlert.SendKeys($"{proxyUser}\n{proxyPassword}"); // 确认弹窗 authAlert.Accept(); } catch (WebDriverTimeoutException) { // 没有弹窗则继续执行 } driver.Navigate().GoToUrl("https://whatismyipaddress.com/");
注意事项
- 优先使用方法1,避免弹窗交互带来的不稳定因素;
- 方法2需要确保弹窗是浏览器原生的HTTP基础认证窗口,而非页面自定义弹窗;
- URL编码必须处理用户名和密码中的特殊字符,否则会导致代理地址格式错误。
内容的提问来源于stack exchange,提问作者MSBB
相关产品推荐
相关产品推荐

