在 Python 和 Java 中设置 Selenium 代理
Selenium 可以通过几行代码将浏览器路由到代理——但需要身份验证的代理需要扩展或出站助手,因为 Chrome 不会在命令行中接受 USER:PASS。这里是可靠的模式。
Selenium中的身份验证问题
Setting an unauthenticated proxy in Selenium is trivial: add --proxy-server=http://host:3128 to Chrome options, or fill Selenium's Proxy object, and you are done. The moment the proxy needs a username and password, that simple path breaks — Chrome refuses credentials inline, and unlike Puppeteer or Playwright, Selenium has no built-in authenticate() hook to answer the 407 challenge.
这个强大、跨语言的解决方案是一个在运行时生成的小型 Chrome 扩展,它携带您的凭据并通过 webRequest API 回应代理的认证请求。它可以无头运行,不需要额外的服务,并且在 Python 和 Java 中表现相同。使用 s4m,您可以将扩展指向 proxy.s4m.online:3128 (HTTP) 和您的 USER:PASS。请参阅 代理页面 和 认证指南 以获取背景信息;在测试期间,对于无认证选项,免费列表 中有可以直接放入命令行标志的开放代理。
通过生成的扩展进行身份验证的代理
这个Python助手编写一个一次性Chrome扩展,携带您的凭据,然后加载它。在运行之前替换USER:PASS。
import os, zipfile, tempfile
from selenium import webdriver
HOST, PORT, USER, PASS = "proxy.s4m.online", 3128, "USER", "PASS"
manifest = '{"version":"1.0.0","manifest_version":2,"name":"s4m-proxy",'\
'"permissions":["proxy","webRequest","webRequestBlocking","<all_urls>"],'\
'"background":{"scripts":["bg.js"]}}'
bg = ('var c={mode:"fixed_servers",rules:{singleProxy:'
'{scheme:"http",host:"%s",port:%d}}};'
'chrome.proxy.settings.set({value:c,scope:"regular"},function(){});'
'chrome.webRequest.onAuthRequired.addListener('
'function(d){return {authCredentials:{username:"%s",password:"%s"}};},'
'{urls:["<all_urls>"]},["blocking"]);') % (HOST, PORT, USER, PASS)
path = os.path.join(tempfile.mkdtemp(), "s4m_proxy.zip")
with zipfile.ZipFile(path, "w") as z:
z.writestr("manifest.json", manifest)
z.writestr("bg.js", bg)
opts = webdriver.ChromeOptions()
opts.add_extension(path)
driver = webdriver.Chrome(options=opts)
driver.get("https://api.ipify.org")
print("Exit IP:", driver.find_element("tag name", "body").text)
driver.quit()
# ----- Java (unauthenticated proxy) -----
// Proxy p = new Proxy();
// p.setHttpProxy("proxy.s4m.online:3128");
// ChromeOptions o = new ChromeOptions();
// o.setProxy(p);
// WebDriver driver = new ChromeDriver(o);选择您的方法
根据代理是否需要凭据进行选择。
没有认证?使用标志
对于未认证的代理,只需将--proxy-server=http://host:3128添加到ChromeOptions,或设置Selenium的Proxy对象。无需其他操作。
认证?生成一个扩展
对于USER:PASS代理,发送一个小的运行时扩展,响应onAuthRequired。它在无头模式下工作,并在不同语言中表现相同。
浏览器的 HTTP 端点
使用proxy.s4m.online:3128 (HTTP)。在浏览器中经过身份验证的SOCKS5不可靠,因此将SOCKS5保留用于CLI和库客户端。
保持扩展的私密性
生成的扩展将你的凭据嵌入临时文件。将其写入私有临时目录,并在运行后清理。
可靠性和诚实的期望
Selenium 驱动真实浏览器,这既是它的优势也是它的成本:它比原始的 HTTP 客户端更重,因此请保持会话的目的性并及时关闭驱动程序。如果您只需要 HTML,代理后面的 HTTP 客户端要便宜得多——请参见使用请求进行抓取。当需要 JavaScript 渲染或真实用户交互时,请使用 Selenium。
和往常一样,代理会更改您的 IP,而不是您的指纹。s4m 代理是数据中心——非常适合功能测试、监控和适度抓取,但在敌对网站上可被检测为数据中心。当登录或白名单期望一个稳定的地址时,请添加一个专用个人 IP。对于较新的项目,请考虑Playwright,其原生代理身份验证完全避免了扩展程序的麻烦。使用工具验证出口,并阅读API 文档以自动化凭证轮换。
问题,已解答
为什么我不能在Selenium的代理标志中放入USER:PASS?
Chrome 忽略 --proxy-server 标志中的凭据,而是提出一个本地身份验证提示,无法由无头浏览器回答。可靠的解决方案是一个小型运行时 Chrome 扩展,它在 onAuthRequired 时用您的用户名和密码进行响应。
有没有更简单的方法来使用未认证的代理?
是的。如果没有凭据,您可以只需将 --proxy-server=http://host:3128 添加到 ChromeOptions,或者在 Java 中填写 Selenium 的 Proxy 对象。当代理需要 USER:PASS 时,才需要扩展。
我应该在Selenium中使用SOCKS5还是HTTP?
在端口 3128 上使用 HTTP 端点进行浏览器访问。浏览器中的经过身份验证的 SOCKS5 不可靠;将 SOCKS5 保留用于命令行和库客户端。
使用Playwright会更容易吗?
通常是的。Playwright 在其代理对象中原生支持代理凭证,因此您可以完全跳过扩展。当您的项目已经依赖于它时,Selenium 仍然是正确的选择。
人们通过搜索找到此页面
- 在 Python 和 java 中设置 Selenium 代理
- 什么是 用于抓取的代理
- 如何在抓取时避免IP封禁
- 用于抓取的代理
- Proxychains:如何链式使用SOCKS5代理
- 免费代理列表 比较
- 2026 年最佳 VPN 协议
- IP地址 用于抓取
- 代理认证
- 下载 代理认证
- 新鲜的代理设置
- 如何检查代理是否有效(附带现成脚本)
- 代理设置
- 工作中的免费代理列表
- openvpn 用于 Windows
- IP地址 安卓版
- IP地址
此页面回答的真实搜索短语 — 链接的短语打开详细覆盖它们的页面。