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

如何在Selenium Chrome中使用带认证的HTTP代理?

Selenium Chrome带认证HTTP代理的正确实现

问题分析

你遇到的两个问题原因如下:

  1. 直接在proxy-server参数中嵌入用户名密码的方式已被Chrome禁用,且参数中多余的单引号导致格式错误,触发ERR_NO_SUPPORTED_PROXIES。
  2. 使用Proxy对象仅设置代理地址,但未提供认证信息,代理服务器会拒绝未授权请求,因此浏览器未实际使用代理。

解决方案

方法一:通过Chrome DevTools注入认证(推荐)

利用Chrome DevTools Protocol(CDP)在浏览器启动后注入代理认证信息,无需额外扩展,实现简单可靠:

ChromeOptions options = new ChromeOptions();

// 设置HTTP和HTTPS代理地址(不带认证信息)
Proxy proxy = new Proxy();
proxy.setHttpProxy("1.1.1.1:8989");
proxy.setSslProxy("1.1.1.1:8989"); // 若需HTTPS代理,需同步设置
options.setProxy(proxy);

// 启动ChromeDriver
ChromeDriver driver = new ChromeDriver(options);

// 初始化DevTools会话并注入认证信息
driver.getDevTools().createSession();
driver.getDevTools().send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
driver.getDevTools().send(Network.setAuthCredentials(
        "1.1.1.1",  // 代理主机地址
        8989,       // 代理端口
        "user",     // 代理用户名
        "pass"      // 代理密码
));

// 验证代理是否生效
driver.get("https://httpbin.org/ip");

方法二:通过Chrome扩展自动处理认证

适合无法使用CDP的旧版本Chrome,需创建一个简单的扩展实现自动认证:

  1. 创建扩展文件

    • 新建目录,添加manifest.json:
      {
        "version": "1.0.0",
        "manifest_version": 3,
        "name": "Proxy Auth AutoFill",
        "permissions": ["webRequest", "webRequestAuthProvider"],
        "host_permissions": ["<all_urls>"],
        "background": {
          "service_worker": "background.js"
        }
      }
      
    • 同目录添加background.js:
      chrome.webRequest.onAuthRequired.addListener(
        (details) => ({
          authCredentials: {
            username: "user",
            password: "pass"
          }
        }),
        {urls: ["<all_urls>"]},
        ["blocking"]
      );
      
  2. 在Selenium中加载扩展:

    ChromeOptions options = new ChromeOptions();
    
    // 设置代理地址
    Proxy proxy = new Proxy();
    proxy.setHttpProxy("1.1.1.1:8989");
    proxy.setSslProxy("1.1.1.1:8989");
    options.setProxy(proxy);
    
    // 加载本地扩展(替换为你的扩展目录路径)
    options.addExtensions(new File("path/to/your/proxy-extension"));
    
    ChromeDriver driver = new ChromeDriver(options);
    driver.get("https://httpbin.org/ip");
    

关键注意事项

  • Chrome不再支持在proxy-server参数中直接嵌入user:pass@host:port格式的认证信息,请勿使用该方式。
  • 若代理同时支持HTTP和HTTPS,需同时设置setHttpProxy和setSslProxy,避免部分请求走默认网络。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:22:30