有界面正常,headless 显示的是自己的 IP
检查 有界面那次的代理从哪来:系统代理、扩展还是浏览器配置?
处理 在 headless 里用 --proxy-server 明确指定代理,并像第 4 步那样打印 IP;不要依赖只存在于你桌面上的设置。
几分钟内查清 Chrome 到底有没有走你的代理,并解决最常见的账号密码问题。
原因 1:账号密码写在了代理地址里。Chrome 的文档写明它不使用嵌在代理设置里的账号密码,所以 --proxy-server=http://LOGIN:PASSWORD@HOST:PORT 并不会登录。有界面时你也许会看到登录框、手动填过一次;headless 没有窗口可填,页面就直接失败。
原因 2:有界面和 headless 用的不是同一个代理来源。Chromium 网络栈默认使用系统网络设置,桌面上的浏览器配置里还可能装着代理扩展;容器或 CI 里两样都没有,同一份脚本就会用机器自己的 IP 出去,或者直接连不上。
原因 3:协议或端口对不上。Proxy302 网关的 HTTP 和 SOCKS5 端口不同(2222 和 3333),而 Chrome 不支持带认证的 SOCKS5。用 Selenium 驱动 Chrome 跑带账号密码的 SOCKS5,无论 headless 怎么设都不会通。
第四种看起来像掉线:轮换线路每个新连接换一个 IP,长脚本中途看到出口 IP 变了,这是线路本身的规则,不是故障。
| 项目 | 能处理账号密码吗 | 说明 |
|---|---|---|
| --proxy-server=http://HOST:PORT | 否 | 用于不需要登录的代理;需要登录时请求会被拒 |
| 地址里带账号密码(http://LOGIN:PASSWORD@HOST:PORT) | 否 | Chrome 不使用嵌在代理设置里的账号密码 |
| Selenium 的 Proxy 对象(options.proxy) | 否 | 只设置地址和类型,没有 Chrome 能用的登录信息 |
| 本地转发器(如 gost)替你加上登录 | 是 | Chrome 连本机 127.0.0.1,不需要登录;由转发器去登录代理 |
| selenium-wire | 有,README 有说明 | 仓库已于 2024 年 1 月 3 日归档、不再维护,新项目不建议用 |
依据 2026 年 11 月 13 日读到的 Chromium 代理文档、Selenium 驱动选项页和 selenium-wire 仓库。「是」表示文档有说明,请用你自己的 Chrome 和 chromedriver 版本实测。
打开「我的资产」,复制 HOST、PORT、USERNAME、PASSWORD,运行下面代码块里的 curl 那一行。应当打印出口 IP 和国家。curl 都不通,问题在代理信息,和 Selenium、headless 无关。
预期结果 curl 打印出代理的出口 IP。
Chrome 不支持带登录的 SOCKS5,所以给它用 HTTP 的资产(Proxy302 上是 2222 端口)。按 IP 租用的静态 IP 即使买的是 SOCKS5,同一组账号密码也能走 2222 的 HTTP(2026 年 11 月 4 日实测);其他资产只认创建时选的协议。
运行下面的 gost 那一行。它监听 127.0.0.1:8080,替你登录代理。然后用 --proxy-server=http://127.0.0.1:8080 启动 Chrome,不带任何账号密码。用之前请核对你所用 gost 版本的参数写法。
继续前请注意 务必绑定 127.0.0.1,不要绑所有地址,否则同一网络里的其他机器能用你的代理登录。
运行下面的 Python 测试。页面能打开不能说明什么,因为 Chrome 可能是直连出去的。只有打印出的 IP 才是真实路径,应当和第 1 步 curl 的结果一致。
预期结果 打印的 IP 和 curl 的一致。
# 1) test the login outside the browser (HTTP port)
curl -x http://LOGIN:PASSWORD@HOST:2222 https://ipinfo.io/json
# 2) local forwarder: Chrome connects here without a login
gost -L http://127.0.0.1:8080 -F http://LOGIN:PASSWORD@HOST:2222仅为示例:把 LOGIN、PASSWORD、HOST 换成「我的资产」里的值;登录名或密码里的 @ 等特殊字符要用百分号编码(@ 写成 %40)。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
options = Options()
options.add_argument("--headless=new")
# the local forwarder from step 3: no login in this address
options.add_argument("--proxy-server=http://127.0.0.1:8080")
driver = webdriver.Chrome(options=options)
try:
driver.get("https://ipinfo.io/json")
print(driver.find_element(By.TAG_NAME, "body").text)
finally:
driver.quit()仅为示例。需要 Chrome 和版本匹配的 chromedriver(或 Selenium Manager)。如果打印的是你自己的 IP,说明 Chrome 没有走代理。
检查 有界面那次的代理从哪来:系统代理、扩展还是浏览器配置?
处理 在 headless 里用 --proxy-server 明确指定代理,并像第 4 步那样打印 IP;不要依赖只存在于你桌面上的设置。
检查 第 1 步的 curl 通不通,转发器是否还在运行?
处理 先改 host、端口和协议(HTTP,2222 端口)。代理连接失败那篇按顺序列了排查项。
检查 --proxy-server 地址里是不是还带着账号密码?
处理 从地址里去掉,交给转发器去发;Chrome 会忽略嵌入的登录信息。
检查 是不是轮换线路?每个新连接换一个 IP。
处理 需要一直用同一个 IP 的任务,改用静态 IP,或在动态线路里开会话。
网关的 HTTP 端口是 2222,SOCKS5 端口是 3333。Selenium 驱动 Chrome 请用 HTTP。轮换住宅线路每个新连接换一个 IP,用于很多互不相关的页面加载;需要固定出口的测试,静态 ISP IP 在租期内不轮换,1 天 US$0.50,30 天 US$7.99。
没有免费试用,最小的购买是一个 IP 一天,或 1 GB 的轮换住宅流量。
按设计不会。Chrome 现在只有统一后的 headless 模式,--proxy-server 在里面和普通窗口一样生效。不同的是代理的来源,以及谁来回答登录框,所以同一份脚本表现会不一样。
Selenium 文档把 --headless=new 列为常用的 Chrome 参数,Chrome 文档说 --headless 运行的就是统一后的模式。新版 Chrome 两种写法都行;旧模式现在只存在于 chrome-headless-shell。
在同一个 headless 会话里打开一个查 IP 的页面,把打印的 IP 和 curl 的结果比对。页面能打开不算证明。
官方文档 · 确认日期:
2026 年 11 月 13 日阅读:Chrome 不使用嵌在代理设置里的账号密码,代理认证走常规的凭据查找流程;Chrome 不支持任何 SOCKSv5 认证方式;使用 HTTP 代理时域名解析交给代理。
官方文档 · 确认日期:
2026 年 11 月 13 日阅读:Chromium 网络栈使用系统网络设置,其中包括代理设置;--proxy-server 可写单个地址或按协议的映射,--proxy-bypass-list 只在与 --proxy-server 一起使用时才有效。
官方文档 · 确认日期:
2026 年 11 月 13 日阅读:Chrome 已统一 Headless 与有界面模式,--headless 参数运行的就是统一后的模式;自 Chrome 132.0.6793.0 起,旧 Headless 模式只以独立的 chrome-headless-shell 提供。
官方文档 · 确认日期:
2026 年 11 月 13 日阅读:常用 Chrome 参数包括 --start-maximized、--headless=new 和 --user-data-dir;Chrome 与 chromedriver 的主版本号必须一致。
官方文档 · 确认日期:
2026 年 11 月 13 日阅读:Python 示例用 options.proxy = Proxy({'proxyType': ProxyType.MANUAL, 'httpProxy': 'http.proxy:1234'}) 设置代理,Proxy 和 ProxyType 来自 selenium.webdriver.common.proxy。
官方文档 · 确认日期:
2026 年 11 月 13 日阅读:仓库已于 2024 年 1 月 3 日由所有者归档,页面写明 Selenium Wire 不再维护;其 README 说明可在代理地址里写用户名和密码做 HTTP Basic 认证。
官方文档 · 确认日期:
2026 年 11 月 13 日阅读:页面给出 gost -L http://:8080 -F https://192.168.1.1:8080 形式的命令,-L 是本地服务,每个 -F 是转发链上的一跳。-F 地址里写账号密码沿用同样的 URL 写法,请按你的 gost 版本核对。
产品观察 · 确认日期:
站点产品信息表(价格按美元,1 PTC = 1 美元;协议与端口、租期;2026 年 11 月 4 日协议实测、11 月 10 日动态机房线路实测),2026 年 11 月 13 日核对。
注册账号、充值一次,就能选动态住宅、静态 ISP 或数据中心 IP,几分钟配进你的浏览器。