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

如何在C#的ChromeDriver中配置带认证的代理用于网页抓取?

解决C# Selenium ChromeDriver代理认证的ERR_NO_SUPPORTED_PROXIES错误

Chrome已不再支持直接在代理URL中嵌入用户名密码(http://user:pass@host:port),这是你遇到该错误的核心原因。下面提供两种可靠的解决方案:

方法一:使用Chrome扩展处理代理认证

这种方法兼容性强,适用于大多数场景:

  1. 创建代理认证扩展
    新建两个文件,打包成zip:

    • manifest.json:
      {
        "version": "1.0.0",
        "manifest_version": 3,
        "name": "Proxy Auth",
        "permissions": ["proxy", "webRequest", "webRequestAuthProvider"],
        "background": {
          "service_worker": "background.js"
        },
        "host_permissions": ["<all_urls>"]
      }
      
    • background.js:
      chrome.webRequest.onAuthRequired.addListener(
        (details, callback) => {
          callback({
            authCredentials: {
              username: "你的代理用户名",
              password: "你的代理密码"
            }
          });
        },
        {urls: ["<all_urls>"]},
        ["blocking"]
      );
      
  2. 修改C#代码

    • 调整Proxy对象,仅设置代理地址(移除认证信息):
      Proxy proxy = new Proxy();
      proxy.Kind = ProxyKind.Manual;
      proxy.IsAutoDetect = false;
      proxy.HttpProxy = $"{proxyHost}:{proxyPort}";
      proxy.SslProxy = $"{proxyHost}:{proxyPort}";
      
    • 在ChromeOptions中添加扩展:
      // 替换为你的扩展zip文件路径
      options.AddExtension(@"C:\path\to\proxy-auth-extension.zip");
      

方法二:通过DevTools协议注入认证信息

无需扩展,直接利用Chrome DevTools传递认证:

  1. 调整Proxy设置
    和方法一相同,仅设置代理地址,不要嵌入用户名密码。

  2. 在导航前注入认证
    创建driver后,执行DevTools命令:

    using OpenQA.Selenium.DevTools;
    using OpenQA.Selenium.DevTools.V117.Network; // 版本需匹配你的Chrome版本
    
    // ... 创建driver的代码 ...
    
    var devTools = driver as IDevTools;
    var session = devTools.CreateDevToolsSession();
    await session.Network.Enable(new EnableCommandSettings());
    
    // 设置全局代理认证
    await session.Network.SetAuthCredentials(new SetAuthCredentialsCommandSettings
    {
        Origin = "*",
        Credentials = new AuthCredentials
        {
            Username = proxyUsername,
            Password = proxyPassword
        }
    });
    
    // 之后再执行导航操作
    driver.Navigate().GoToUrl("http://ident.me");
    

额外排查要点

  • 确认代理端口是HTTP/HTTPS类型,而非SOCKS端口。
  • 先使用普通ChromeDriver测试,排除UndetectedChromeDriver的配置干扰。
  • 移除不必要的参数(如ignore-certificate-errors),避免代理逻辑冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:36:16