Selenium的测试脚本、WebDriver服务和浏览器进程可能不在同一台机器。使用本地ChromeDriver时,浏览器通常从本机访问网络;使用Remote WebDriver或Selenium Grid时,浏览器运行在节点或容器里,公网出口、DNS和证书都属于远程环境。代理排查必须从浏览器所在位置开始。
一、Selenium代理通常通过Capabilities传入
W3C WebDriver定义了代理相关能力,可描述手动HTTP、SSL或SOCKS代理以及不走代理的主机。不同语言绑定的对象名称略有区别,应以当前Selenium版本API为准。不要同时混用浏览器命令行参数、系统代理和Capabilities后再猜测优先级。
二、Chrome和Firefox为何需要分别验证
| 项目 | Chrome/Chromium | Firefox |
|---|---|---|
| 驱动 | ChromeDriver或兼容驱动 | GeckoDriver |
| 代理能力 | W3C能力加浏览器实现 | W3C能力加Firefox首选项 |
| 认证体验 | 受浏览器安全模型限制 | 实现和版本行为可能不同 |
| 绕过规则 | 按Chromium规则验证 | 按Firefox规则验证 |
同一份测试在两个浏览器都能打开首页,不代表API、WebSocket和下载链路行为一致。
三、HTTP、HTTPS与SOCKS代理怎么选
HTTP代理访问HTTPS目标时通常使用CONNECT隧道;SOCKS5更接近通用TCP转发,但域名解析位置和认证支持需验证。协议配置必须与代理服务实际开放的类型一致。把SOCKS端口当HTTP代理使用,常表现为握手失败或连接被立即关闭。
四、代理认证为什么比普通客户端复杂
浏览器可能显示代理认证对话框,而WebDriver能力未必直接接受所有认证方式。将账号密码放进代理URL也可能被浏览器拒绝或泄露到日志。应先确认代理支持Basic、NTLM或其他机制,再查对应浏览器和驱动版本的兼容范围。
认证机制差异见代理407与认证方式说明。
五、Remote WebDriver与Grid要检查哪台机器
创建Session的HTTP请求从测试机发到Grid,但页面访问由实际浏览器节点发起。节点可能运行在Docker或Kubernetes中,拥有独立的代理变量、CA和DNS。应在测试报告记录Session ID、节点标识、浏览器版本和网络配置版本。
六、为什么IP检测页正确,业务请求却直连
- 绕过列表匹配了业务API域名;
- IPv4走代理而IPv6仍直连;
- 扩展、Service Worker或浏览器后台请求走了不同路径;
- 页面通过WebSocket连接,代理空闲策略不同;
- 测试复用了更改配置前创建的旧Session。
双栈旁路可参考代理只改IPv4时的排查。
七、证书能力不要当作永久修复
Selenium可通过能力允许不安全证书,但这会改变真实浏览器的安全行为。正式回归测试应保持证书验证,修复节点系统时间、CA证书、域名与代理TLS检查。只在隔离诊断中短时放宽,并在测试结束后恢复。
八、无头模式和有头模式会不同吗
现代浏览器通常尽量保持网络行为一致,但版本、启动参数、扩展和企业策略可能造成差异。出现仅无头失败时,应比较完整启动参数、用户数据目录、证书策略和浏览器版本,不要直接把问题归因于“无头不支持代理”。
九、如何处理代理切换
代理通常在创建浏览器Session时确定。修改外部配置后,已有Session和连接池可能继续使用旧出口。需要切换时应完成当前用例、关闭Session,再用新能力创建浏览器。不要在并行用例之间修改共享全局代理。
十、推荐验证矩阵
- 本地Chrome、Firefox各测试一次;
- Remote Grid节点重复相同用例;
- 验证HTTP页面、HTTPS页面、API与WebSocket;
- 验证代理目标和绕过目标;
- 测试正确与错误代理凭据;
- 关闭Session后切换代理,核对新出口;
- 检查截图、日志和HAR中没有敏感凭据。
十一、日志应该记录什么
记录Session ID、节点、浏览器与驱动版本、目标主机、代理节点标识、错误阶段和耗时即可。不要记录完整认证头、Cookie、代理密码或含令牌的URL。若需分析网络,优先在自有或授权环境采集。
十二、结论
Selenium代理配置的关键是找到浏览器真正运行的位置,并针对Chrome、Firefox和远程节点分别验证。Capabilities只是配置入口,出口、认证、证书和连接生命周期仍要用实际请求确认。






