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

Selenium使用带账号密码的Socks5代理验证失败求助

Selenium使用带账号密码的Socks5代理验证失败求助

嗨,我太懂你这种碰壁的感觉了——用Selenium配置带账号密码的Socks5代理时,直接靠Proxy类设置用户名密码往往不生效,这其实是因为ChromeDriver对这种方式的支持一直不太完善。我给你两个可行的解决方案,你可以试试看:

方案一:通过Chrome偏好设置配置代理(简单快捷)

你可以直接在ChromeOptions里设置Chrome的偏好参数,把代理的地址、账号密码都一次性传入。代码示例如下:

System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
String proxyAddress = "207.244.217.165:6712";
String proxyUser = "xcvbdfbedf";
String proxyPass = "xcvbdfbedf";

ChromeOptions options = new ChromeOptions();

// 指定Socks5代理服务器地址
options.addArguments("--proxy-server=socks5://" + proxyAddress);

// 设置代理认证的偏好参数
Map<String, Object> prefs = new HashMap<>();
prefs.put("proxy.socks_username", proxyUser);
prefs.put("proxy.socks_password", proxyPass);
options.setExperimentalOption("prefs", prefs);

WebDriver driver = new ChromeDriver(options);
driver.get("https://2ip.ru/");

⚠️ 注意:这种方法在部分新版本的Chrome中可能会失效,因为Chrome的偏好设置规则偶尔会更新。如果这个方法不管用,就试试下面更稳定的方案。

方案二:用Chrome扩展处理代理认证(兼容性拉满)

如果偏好设置的方法不好使,咱们可以搞个简单的Chrome扩展来自动处理代理认证,这种方法几乎适配所有Chrome版本。步骤如下:

  1. 先创建两个文件:
    • manifest.json(扩展配置文件):
      {
        "version": "1.0.0",
        "manifest_version": 3,
        "name": "Proxy Auth Helper",
        "permissions": ["proxy", "tabs", "webRequest", "webRequestAuthProvider"],
        "host_permissions": ["<all_urls>"],
        "background": {
          "service_worker": "background.js"
        }
      }
      
    • background.js(代理逻辑处理文件):
      // 配置Socks5代理信息
      const proxyConfig = {
        mode: "fixed_servers",
        rules: {
          singleProxy: {
            scheme: "socks5",
            host: "207.244.217.165",
            port: 6712
          }
        }
      };
      
      // 设置代理
      chrome.proxy.settings.set({value: proxyConfig, scope: "regular"}, () => {});
      
      // 自动处理代理认证
      chrome.webRequest.onAuthRequired.addListener(
        (details, callback) => {
          callback({
            authCredentials: {
              username: "xcvbdfbedf",
              password: "xcvbdfbedf"
            }
          });
        },
        {urls: ["<all_urls>"]},
        ["blocking"]
      );
      
  2. 把这两个文件打包成ZIP压缩包(注意直接把文件放进根目录,不要套文件夹)。
  3. 在Selenium代码里加载这个扩展:
    System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
    ChromeOptions options = new ChromeOptions();
    // 替换成你刚才打包的ZIP文件路径
    options.addExtensions(new File("proxy-auth-extension.zip"));
    
    WebDriver driver = new ChromeDriver(options);
    driver.get("https://2ip.ru/");
    

为啥你的原代码不行?

你原来用的Proxy.setSocksUsername和setSocksPassword方法,ChromeDriver其实并没有把这些参数正确传递给Chrome浏览器,导致代理的认证信息根本没生效,自然就连接失败啦。

备注:内容来源于stack exchange,提问作者Mine Cheater

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:14:31