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

Selenium如何通过带用户名和密码的代理进行连接?

解决Firefox + Selenium代理认证失效问题

你的代码为什么无效?

我来拆解下你代码里的几个关键问题:

  • 代理类型与认证配置不匹配:你明明配置的是HTTP/SSL代理,但却把用户名和密码放到了socks_username和socks_password这两个SOCKS代理专属的偏好项里,完全驴唇不对马嘴!对应HTTP代理的认证字段应该是network.proxy.http_username和network.proxy.http_password。
  • FirefoxProfile已被弃用:从Selenium 4.x版本开始,官方已经不再推荐用FirefoxProfile做浏览器配置了,转而使用FirefoxOptions。旧的Profile方式在新版本浏览器和Selenium组合下,很容易出现兼容性问题。
  • 安全限制导致明文密码被忽略:现代Firefox为了防止密码泄露,会直接忽略通过偏好设置注入的明文代理密码,就算你字段写对了,浏览器也不会生效。

当前有效实现代理认证的最优方法

方法1:用Selenium 4官方代理API(最推荐)

Selenium 4专门新增了代理配置API,原生支持带认证的代理,不需要手动改浏览器偏好,代码简洁还靠谱:

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

# 配置代理基本信息
proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = f"{PROXY_HOST}:{PROXY_PORT}"
proxy.ssl_proxy = f"{PROXY_HOST}:{PROXY_PORT}"
# 设置代理认证信息
proxy.socks_username = USERNAME
proxy.socks_password = PASSWORD

# 绑定到Firefox配置项
options = webdriver.FirefoxOptions()
options.proxy = proxy

# 启动浏览器验证
driver = webdriver.Firefox(options=options)
driver.get("http://whatismyipaddress.com/")

这个API会自动处理代理认证的注入逻辑,绕过浏览器的安全限制,是目前兼容性最好的方案。

方法2:用浏览器扩展注入认证(特殊场景备选)

如果上述方法不生效(比如用的是旧版Selenium或特殊代理服务),可以做一个极简的Firefox扩展来自动注入认证:

  1. 新建一个文件夹proxy_auth_extension,里面创建两个文件:

manifest.json

{
  "manifest_version": 2,
  "name": "Proxy Auth Helper",
  "version": "1.0",
  "permissions": ["proxy", "tabs", "storage", "<all_urls>"],
  "background": {
    "scripts": ["background.js"]
  }
}

background.js

// 配置代理地址
const proxyConfig = {
  mode: "fixed_servers",
  rules: {
    singleProxy: {
      scheme: "http",
      host: "<你的代理主机>",
      port: parseInt("<你的代理端口>")
    },
    bypassList: ["localhost"]
  }
};

browser.proxy.settings.set({value: proxyConfig, scope: "regular"}, () => {});

// 自动注入认证信息
function handleAuth(details) {
  return {
    authCredentials: {
      username: "<你的代理用户名>",
      password: "<你的代理密码>"
    }
  };
}

browser.webRequest.onAuthRequired.addListener(
  handleAuth,
  {urls: ["<all_urls>"]},
  ["blocking"]
);
  1. 把文件里的占位符替换成你的实际代理信息,然后把文件夹打包成proxy_auth.zip压缩包。
  2. 在Selenium中加载这个扩展:
from selenium import webdriver

options = webdriver.FirefoxOptions()
# 加载代理认证扩展
options.add_extension("proxy_auth.zip")

driver = webdriver.Firefox(options=options)
driver.get("http://whatismyipaddress.com/")

这种方式借助浏览器扩展的权限绕过明文密码限制,适配性也很强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:32:14