You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中为ChromeDriver配置带认证的多类型代理失败求助

Selenium ChromeDriver 带认证代理配置失败问题排查与解决

问题描述

在Selenium中配置带认证的HTTP、SOCKS4、SOCKS5代理时,Chrome能正常启动,但浏览器实际未使用指定代理,尝试了两种方法均失败:

第一种尝试代码

var options = new ChromeOptions();
var proxy = new Proxy
        {
            HttpProxy = $"http://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}",
            SslProxy = $"https://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}",
            IsAutoDetect = false,
            Kind = ProxyKind.Manual
        };

第二种尝试代码

var options = new ChromeOptions();
Proxy proxy = new Proxy();
proxy.Kind = ProxyKind.Manual;
proxy.IsAutoDetect = false;
proxy.HttpProxy = $"{proxy_host}:{proxy_port}";
proxy.SslProxy = $"{proxy_host}:{proxy_port}";
string proxyAuth = $"{proxy_username}:{proxy_password}";
options.AddArgument($"--proxy-auth={proxyAuth}");

核心启动代码

options.AddArgument("ignore-certificate-errors");
options.Proxy = proxy;
options.BinaryLocation = path_to_chrome + @"\App\Chrome-bin\chrome.exe";
var chromeDriverService = ChromeDriverService.CreateDefaultService(path_to_chrome);
chromeDriverService.HideCommandPromptWindow = true;
driver = new ChromeDriver(chromeDriverService, options);

问题原因

  1. 第一种方法无效原因:ChromeDriver的Proxy类不支持直接在HttpProxy/SslProxy字段中嵌入用户名:密码@的格式,这种写法会被驱动忽略,导致代理仅配置了地址端口但无认证信息,无法正常连接。
  2. 第二种方法无效原因:Chrome浏览器并不支持--proxy-auth这个启动参数,该参数是无效的,所以认证信息没有被正确传递给浏览器,代理连接失败。

正确配置方案

ChromeDriver处理带认证的代理需要通过自定义扩展程序注入认证信息,针对不同代理类型的有效实现如下:

1. HTTP/HTTPS 带认证代理

var options = new ChromeOptions();
// 配置代理地址端口
var proxy = new Proxy
{
    Kind = ProxyKind.Manual,
    IsAutoDetect = false,
    HttpProxy = $"{proxy_host}:{proxy_port}",
    SslProxy = $"{proxy_host}:{proxy_port}"
};
options.Proxy = proxy;

// 创建自定义扩展注入认证信息
var proxyAuthExtension = @"
{
    ""version"": ""1.0.0"",
    ""manifest_version"": 3,
    ""name"": ""Proxy Auth"",
    ""permissions"": [""proxy"", ""tabs"", ""storage"", ""activeTab"", ""scripting""],
    ""background"": {
        ""service_worker"": ""background.js""
    },
    ""minimum_chrome_version"": ""109""
}";

var backgroundJs = $@"
chrome.proxy.settings.set({{value: {{mode: ""fixed_servers"", rules: {{singleProxy: {{scheme: ""http"", host: ""{proxy_host}"", port: {proxy_port}}}}}}}}, scope: ""regular""}}, function() {{}});
chrome.webRequest.onAuthRequired.addListener(
    function(details) {{
        return {{authCredentials: {{username: ""{proxy_username}"", password: ""{proxy_password}""}}}};
    }},
    {{urls: [""<all_urls>""]}},
    [""blocking""]
);
";

// 将扩展打包成临时文件并添加到ChromeOptions
var tempDir = Path.Combine(Path.GetTempPath(), "ProxyAuthExt");
Directory.CreateDirectory(tempDir);
File.WriteAllText(Path.Combine(tempDir, "manifest.json"), proxyAuthExtension);
File.WriteAllText(Path.Combine(tempDir, "background.js"), backgroundJs);
options.AddExtension(tempDir);

// 启动ChromeDriver的核心代码保持不变
options.AddArgument("ignore-certificate-errors");
options.BinaryLocation = path_to_chrome + @"\App\Chrome-bin\chrome.exe";
var chromeDriverService = ChromeDriverService.CreateDefaultService(path_to_chrome);
chromeDriverService.HideCommandPromptWindow = true;
driver = new ChromeDriver(chromeDriverService, options);

2. SOCKS4 带认证代理

SOCKS4本身不支持标准用户名密码认证,仅部分服务商提供非标准支持。若你的SOCKS4代理需要认证,配置方式类似HTTP代理,只需修改代理类型:

var proxy = new Proxy
{
    Kind = ProxyKind.Manual,
    IsAutoDetect = false,
    SocksProxy = $"{proxy_host}:{proxy_port}",
    SocksVersion = 4
};
options.Proxy = proxy;
// 同样需要添加上述认证扩展(若代理要求认证)

3. SOCKS5 带认证代理

SOCKS5支持标准认证,配置时指定版本并配合扩展注入认证:

var proxy = new Proxy
{
    Kind = ProxyKind.Manual,
    IsAutoDetect = false,
    SocksProxy = $"{proxy_host}:{proxy_port}",
    SocksVersion = 5
};
options.Proxy = proxy;
// 添加上述认证扩展注入用户名密码

注意事项

  • 确保Chrome版本与ChromeDriver版本严格匹配,版本不兼容可能导致代理配置失效。
  • 部分代理服务商可能有特殊认证规则,若扩展注入方式无效,可联系服务商确认具体流程。
  • 临时扩展目录会在程序运行后保留,可在程序结束时手动删除临时目录清理资源。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:23:19