切换语言
中文 English Русский Deutsch Español Français Italiano Українська Tiếng Việt Türkçe Bahasa Indonesia हिन्दी 日本語
菜单
价格
代理
代理类型
按地区77 个地区
解决方案
资源

如何在 Selenium 中使用代理

让 Selenium 下的 Chrome 或 Firefox 通过一个静态 ISP 地址运行。本页的每个示例在发布前都在本地代理上实际运行过,哪些做法行不通也直接写明。

简而言之: 在 Chrome 中,把 --proxy-server=http://HOST:PORT 作为参数传入;在 Firefox 中,在选项上设置一个手动 Proxy。Firefox 可以通过 Selenium 的 WebDriver BiDi 处理器 add_authentication_handler 应答代理的密码提示。在我们的测试中 Chrome 做不到:它会忽略 --proxy-server 中的凭据,两个 BiDi 处理器也都超时了。对于 Chrome,请把运行测试的 IP 加入代理的白名单,这样无论 HTTP 还是 SOCKS5,代理都不再需要凭据。

Selenium 本身不转发流量:它启动一个浏览器,并把代理作为浏览器选项的一部分交给它。这就是为什么 Chrome 和 Firefox 的做法不同,也是为什么大多数设置都失败在代理身份验证上。

在 Chrome 和 Firefox 中使用 Python Selenium 代理

Chrome 从命令行开关读取代理,Firefox 从其选项上的代理对象读取。两者都无需额外设置即可使用已加入白名单的代理;Firefox 还可以通过 WebDriver BiDi 应答代理的密码提示,而在我们的测试中 Chrome 没有做到这一点。

在 Selenium 中设置代理

  1. 找到运行测试的公网 IP

    即互联网看到的那台机器或 CI 运行器的地址,而不是它的本地地址。“我的 IP 是什么”会显示这个地址。

  2. 把这个 IP 加入代理的白名单

    一次 API 调用 PUT /orders/ORDER_ID/whitelist,或 MCP 服务器的 set_proxy_whitelist 工具;控制台目前还没有相应的设置项。白名单接受 IPv4 地址,每次调用都会替换整个列表。设置白名单期间,代理只接受列表中的地址,该订单的用户名和密码将不再起作用;发送一个空列表即可关闭白名单,密码登录随即恢复。

  3. 从订单中复制主机和端口

    来自“我的代理”或 API。白名单设置好后,就不需要用户名和密码了。

  4. 在浏览器选项中设置代理

    Chrome:--proxy-server=http://HOST:PORT,把代理切换为 SOCKS5 后则用 socks5://HOST:PORT。Firefox:一个带 httpProxy 和 sslProxy 的手动 Proxy。

  5. 打开一个页面,检查出口地址

    在被驱动的浏览器中打开一次“我的 IP 是什么”,确认显示的是您购买的地址,然后再运行测试套件。

# The proxy has your machine's IP on its whitelist, so no credentials
# are sent: Chrome ignores them in --proxy-server anyway.
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--headless=new")  # remove to watch the browser
options.add_argument("--proxy-server=http://HOST:PORT")

driver = webdriver.Chrome(options=options)
try:
    driver.get("https://example.com/")
    print(driver.title)
finally:
    driver.quit()
# Selenium 4.51+ with WebDriver BiDi; pip install selenium
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

options = webdriver.FirefoxOptions()
options.enable_bidi = True
options.add_argument("-headless")  # remove to watch the browser
options.proxy = Proxy({
    "proxyType": ProxyType.MANUAL,
    "httpProxy": "HOST:PORT",
    "sslProxy": "HOST:PORT",
})

driver = webdriver.Firefox(options=options)
try:
    # Answers the proxy's 407 with your username and password
    driver.network.add_authentication_handler(
        lambda request: request.provide_credentials("USERNAME", "PASSWORD")
    )
    driver.get("https://example.com/")
    print(driver.title)
finally:
    driver.quit()
# The proxy has your machine's IP on its whitelist, so no credentials
# are sent. For a password instead, see selenium-firefox-auth.
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

options = webdriver.FirefoxOptions()
options.add_argument("-headless")  # remove to watch the browser
options.proxy = Proxy({
    "proxyType": ProxyType.MANUAL,
    "httpProxy": "HOST:PORT",
    "sslProxy": "HOST:PORT",
})

driver = webdriver.Firefox(options=options)
try:
    driver.get("https://example.com/")
    print(driver.title)
finally:
    driver.quit()
# Switch the proxy to SOCKS5 first, then use the port the order shows.
# The whitelist applies to SOCKS5 as well, so no credentials here either.
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--headless=new")  # remove to watch the browser
options.add_argument("--proxy-server=socks5://HOST:PORT")

driver = webdriver.Chrome(options=options)
try:
    driver.get("https://example.com/")
    print(driver.title)
finally:
    driver.quit()
# Put the public IPv4 address your code runs from on the proxy's
# whitelist. Replaces the list; an empty list turns whitelisting off
# and the proxy falls back to username and password.
curl -X PUT "https://api.proxyjam.com/public/v1/orders/ORDER_ID/whitelist" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"whitelisted_ips": ["YOUR_IP"]}'

测试过的 Selenium 4 Python 代码

Firefox 密码示例会发送用户名和密码,因此需要一个未设置白名单的订单。其他浏览器示例假定您机器的 IP 已在代理的白名单中;SOCKS5 示例还需要先把代理切换为 SOCKS5,切换后会得到一个新端口。请把大写内容替换为您订单中的值,并替换白名单调用中的 ORDER_ID、YOUR_API_KEY 和 YOUR_IP。

完整 API 文档

Selenium 中的代理选项,逐个浏览器对比

于 2026-10-22 使用 Selenium 4.51 以及无头模式下的 Chrome 和 Firefox 测试,所用的本地代理在一个端口上要求密码,在另一个端口上接受已加入白名单的客户端。
HTTP 代理SOCKS5 代理用户名和密码
Chrome--proxy-server=http://HOST:PORT--proxy-server=socks5://HOST:PORT在 --proxy-server 中被忽略;请使用白名单
Firefox带 httpProxy 和 sslProxy 的 Proxy带 socksProxy 和 socksVersion 5 的 Proxy通过 add_authentication_handler(BiDi)可行,限 HTTP
Chrome,BiDi 处理器add_auth_handler 和 add_authentication_handler 都超时了未测试在以后的 Selenium 或 Chrome 改变这一点之前,请使用白名单

Selenium 与代理的常见问题

把凭据写进 --proxy-server

Chrome 会不报错地丢弃该参数中的用户名和密码,不带凭据去连接,然后收到代理返回的 407。页面随即加载失败,看起来像网络问题,而不像身份验证问题。

驱动下载也走了代理

当 Firefox 选项带有代理时,Selenium Manager 会通过同一个代理下载驱动。如果代理只能用密码验证,这次下载会在浏览器启动前失败;使用白名单则会成功。

白名单里的地址不对

CI 运行器的公网出口 IP 往往与您的笔记本电脑不同,有些在每次运行之间还会变化。请把运行测试的那个地址加入白名单,并在它变化时更新,因为每次调用都会替换整个列表。

切换之前就在浏览器中用 SOCKS5

设为 HTTP 的地址不会响应 SOCKS5。请先在订单上切换代理,并使用随后显示的端口;只改参数中的协议名,浏览器将无法连接。

浏览器测试能从这个地址得到什么

浏览器中无需密码
白名单放行您运行器的 IPv4 地址,因此选项和日志中都不会出现机密
两种浏览器协议
普通页面用 http://,订单切换后用 socks5://
每次运行来源相同
昨天和今天的运行都从同一个 IP 发出,该 IP 在整个计费周期内保持不变
并行驱动
多个驱动可以共用这个地址,也可以每个驱动各用一个

其他指南与产品

关于 Selenium 代理的问题

如何在 Selenium 中使用需要身份验证的代理?

在 Firefox 中,启用 WebDriver BiDi,并用 driver.network.add_authentication_handler 注册一个提供用户名和密码的处理器;这在 Selenium 4.51 中可行。在 Chrome 中,我们测试过的所有发送凭据的方法都不可行:它会忽略代理开关中的凭据,两个 BiDi 处理器也都超时了。对于 Chrome,请把运行测试的公网 IP 加入白名单,浏览器就能完全不带凭据地连接。

如何在 Python Selenium 中为 Chrome 设置代理?

创建 ChromeOptions,添加参数 --proxy-server=http://HOST:PORT,再把这些选项传给 webdriver.Chrome。如需 SOCKS5,请在订单上把代理切换为 SOCKS5,并使用 socks5://HOST:PORT,端口用订单随后显示的那个。

IP 白名单对 SOCKS5 有效吗?

有效。已加入白名单的地址无需凭据即可通过 HTTP 和 SOCKS5 连接,正因如此,SOCKS5 才能在 Chrome 中使用,因为 Chrome 无法发送 SOCKS5 用户名和密码。白名单通过 API 或 MCP 服务器设置,接受 IPv4 地址。 SOCKS5

测试套件中的每个浏览器可以使用不同的代理吗?

可以,每个驱动一个:代理是驱动启动时选项的一部分,所以两个驱动可以使用两个地址。无法更改正在运行的 Chrome 的代理;请改为启动一个新的驱动。

长时间运行的测试套件会中途换地址吗?

不会。驱动在退出前一直使用启动时的地址,而地址本身在整个计费周期内都分配给您。需要同时使用大量来源的测试套件需要一个会更换来源的代理池,而这还没有上市销售。

代理可以用来做什么?

对您自己的产品进行端到端测试、按地区检查您的网店、广告验证、价格调研和品牌保护,按照我们的可接受使用政策都无需事先审核。驱动浏览器去破解验证码、机器人防护、速率限制或账号封禁则是另一回事:这个地址做不到,政策也禁止尝试。 可接受使用政策

静态地址让浏览器测试可以复现:同一个测试套件下周再运行,仍从同一个地方到达,所以结果的变化来自网站本身。在 ISP 代理页面订购地址,查看价格,并通过 Python requests 指南在普通 HTTP 调用中设置同一个地址。

参考来源