错误页:无法连接到代理服务器
检查 转发器没在运行,本地端口和 --proxy-server 里的不一致,或者端口被别的程序占了。
处理 运行后一条 curl。它失败就先修转发器;它成功就核对 Selenium 选项里的端口。
停止条件 如果前一条 curl 也失败就别再试了:问题出在主机、端口或账号密码,不在转发器。看「连接失败」那篇指南。
为什么 Chrome 里 SOCKS5 的账号密码到不了代理,以及怎样用一个本机小转发器让 Selenium 正常上网。
SOCKS5 开头有一次握手:客户端列出自己会的登录方式,代理从中选一种。Chromium 的客户端只列一种,「无需认证」,代理选了别的方式就按错误处理。所以要求账号密码的代理会在页面加载之前就拒绝连接,写在地址里的账号密码根本没有发出去。
这是浏览器的限制,不是你的 Selenium 代码或密码写错了。curl 这类实现了账号密码方式的工具,用同一组账号密码就能通,这也是区分两种情况最快的办法。Chrome 和 Edge 的整体情况见这里链接的指南。
| 项目 | 改什么 | 适合 | 注意 |
|---|---|---|---|
| 同一资产的 HTTP 地址 | Chrome 里用 http://主机:2222,再在 Selenium 里应答代理的登录 | 单个浏览器,不用多起进程 | 需要有办法应答代理登录,Selenium 配置页有写法;先确认你的资产支持 HTTP |
| 本机转发器 | Chrome 连 socks5://127.0.0.1:端口,账号密码由转发器带 | 任何 Selenium 版本、任何语言、同时开多个浏览器 | 多一个要启动和关闭的进程;只监听 127.0.0.1 |
| 换工具 | Playwright 或 Puppeteer 在代理设置里直接填账号密码 | 新项目 | Chromium 里仍然要用 HTTP 地址;已有 Selenium 用例要改写 |
来源:Chromium 源码和 Chromium SOCKS 文档,2026 年 11 月 13 日读取;协议和端口来自 Proxy302 产品事实文件。
先用下面前一条 curl 在浏览器之外测账号密码。正常会输出带代理出口 IP 的 JSON。
预期结果 输出带代理出口 IP 的 JSON。
安装一个能转到带账号密码 SOCKS5 的转发器。示例用 gost,从 gost.run 的文档安装。
像 gost 命令那样,在 127.0.0.1 上用一个空闲本地端口启动。再用后一条 curl 测试:这一步不需要账号密码。
预期结果 和第 1 步相同的出口 IP。
按 Python 示例,让 Selenium 启动的 Chrome 带上 --proxy-server=socks5://127.0.0.1:端口。
在这个浏览器里打开 https://ipinfo.io/json,把 IP 和国家与第 1 步对比。测试结束后关掉转发器。
# 1) The login itself, outside the browser (socks5h = the proxy resolves the host name)
curl -x socks5h://LOGIN:PASSWORD@HOST:PORT https://ipinfo.io/json
# 2) The local forwarder, with no login
curl -x socks5h://127.0.0.1:1080 https://ipinfo.io/json
仅作示例:把 HOST、PORT、LOGIN、PASSWORD 换成「我的资产」里复制的值。
# Listen on 127.0.0.1 without a login, forward to the Proxy302 SOCKS5 endpoint with the login
gost -L socks5://127.0.0.1:1080 -F socks5://LOGIN:PASSWORD@HOST:PORT
仅作示例。只监听 127.0.0.1,账号密码就只能在本机使用;不要监听 0.0.0.0。
# pip install -U selenium and install gost (see gost.run)
import socket, subprocess, time
from selenium import webdriver
from selenium.webdriver.common.by import By
LOCAL_PORT = 1080
forwarder = subprocess.Popen([
"gost",
"-L", f"socks5://127.0.0.1:{LOCAL_PORT}", # what Chrome connects to, no login
"-F", "socks5://LOGIN:PASSWORD@HOST:PORT", # what the forwarder connects to, with login
])
for _ in range(50): # wait until the local port is open
try:
socket.create_connection(("127.0.0.1", LOCAL_PORT), timeout=0.2).close()
break
except OSError:
time.sleep(0.2)
options = webdriver.ChromeOptions()
options.add_argument(f"--proxy-server=socks5://127.0.0.1:{LOCAL_PORT}")
driver = webdriver.Chrome(options=options)
try:
driver.get("https://ipinfo.io/json")
print(driver.find_element(By.TAG_NAME, "body").text) # the proxy's exit IP
finally:
driver.quit()
forwarder.terminate()
仅作示例:把 HOST、PORT、LOGIN、PASSWORD 换成「我的资产」里复制的值。
转发器只绑 127.0.0.1,不要绑所有网卡:谁能连上一个敞开的转发端口,谁就能用你的账号密码。测试结束就关掉进程,账号密码也别写进多人共用的脚本和日志。
用 socks5:// 地址时,Chrome 会让代理去解析网页的域名,但 Chromium 文档提醒,Chrome 里别的部分仍可能自己做 DNS 解析。如果你的测试在意 DNS 路径,请按那篇文档的说法加上 --host-resolver-rules 参数。
检查 转发器没在运行,本地端口和 --proxy-server 里的不一致,或者端口被别的程序占了。
处理 运行后一条 curl。它失败就先修转发器;它成功就核对 Selenium 选项里的端口。
停止条件 如果前一条 curl 也失败就别再试了:问题出在主机、端口或账号密码,不在转发器。看「连接失败」那篇指南。
检查 -F 地址里的 HOST、PORT 或账号密码写错了,或者资产只支持 HTTP。
处理 对照「我的资产」。proxy.proxy302.com 上 SOCKS5 是 3333 端口,HTTP 是 2222 端口;用资产发放时的协议对应的地址。
检查 Chrome 没吃到这个参数,比如已有一个旧的 Chrome 进程在用同一个配置目录。
处理 关掉所有 Chrome 进程,换一个新的 --user-data-dir,并确认参数确实放进了传给 webdriver.Chrome 的选项里。
检查 上一次的转发器进程还占着端口。
处理 像示例那样在 finally 里调用 terminate(),或者每次运行换一个本地端口。
想让登录后一直用同一个地址,买协议选 SOCKS5 的静态 ISP IP:租期内 IP 不轮换,1 天 US$0.50,30 天 US$7.99(折合约每天 US$0.27)。SOCKS5 在 proxy.proxy302.com 的 3333 端口。没有免费试用,最小的一笔是 1 个 IP 用 1 天。
转发器对 Proxy302 所有产品的用法都一样。协议请在购买页选好,因为每个资产只按一种协议发放。
打开静态 ISP 页面,选国家,协议选 SOCKS5,核对费用后用钱包付款。
打开「我的资产」,复制主机、端口、用户名和密码。
填进转发器命令的 -F 地址:socks5://LOGIN:PASSWORD@HOST:PORT。
运行 Selenium 示例,用 https://ipinfo.io/json 确认出口。
Chrome 里不支持。Chromium 的 SOCKS5 客户端只提供「无需认证」,账号密码到不了代理。请用 HTTP 地址或本机转发器。
Chrome 不会在 SOCKS5 握手里发送账号密码,要求登录的代理就会拒绝连接。把账号写进地址并不能给浏览器增加登录方式。
只改代理地址:把远程地址换成 --proxy-server=socks5://127.0.0.1:端口,其余测试代码不变。
可以。每个代理起一个转发器、用不同的本地端口;如果几个浏览器本来就该用同一个出口,也可以都连同一个转发器。
不用多起进程,但 Chrome 需要应答代理登录,Selenium 自己不会做这一步。Selenium 配置页有这条路线的写法。
官方文档 · 确认日期:
Read on 13 November 2026: the greeting Chromium sends is 05 01 00 (one method, "no authentication"); a reply that selects a different method is handled as an unexpected-auth error and the connection fails.
官方文档 · 确认日期:
Read on 13 November 2026: --proxy-server="socks5://myproxy:8080"; with it the host name of http and https URLs is resolved by the proxy server, not locally; other components of Chrome may issue DNS requests directly; --host-resolver-rules can block local resolution.
官方文档 · 确认日期:
Read on 13 November 2026: every -F parameter on the command line adds one hop to the forwarding chain, e.g. gost -L http://:8080 -F https://192.168.1.1:8080; -L opens a local listener, see also the SOCKS page for gost -L socks5://user:pass@:1080.
The page has no example with a login inside -F. The login-in-URL form shown here is the same user:pass@host form used for -L; confirm it with gost --help or the docs of the version you install.
产品观察 · 确认日期:
站点产品事实文件,2026 年 11 月 13 日对照控制台、后端和价目表核对:静态 ISP 按 IP 租赁价格(US$,1 PTC = US$1)、动态住宅低价线路每 GB 价格、proxy.proxy302.com 上 HTTP 2222 端口和 SOCKS5 3333 端口、各产品支持哪种协议、无免费试用。
注册账号、充值一次,就能选动态住宅、静态 ISP 或数据中心 IP,几分钟配进你的浏览器。