Selenium怎么配置代理?Chrome、Firefox、认证与Remote Grid排查

WebDriver代码在本地运行,不代表浏览器也在本地发起请求
发布于
4

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,再用新能力创建浏览器。不要在并行用例之间修改共享全局代理。

十、推荐验证矩阵

  1. 本地Chrome、Firefox各测试一次;
  2. Remote Grid节点重复相同用例;
  3. 验证HTTP页面、HTTPS页面、API与WebSocket;
  4. 验证代理目标和绕过目标;
  5. 测试正确与错误代理凭据;
  6. 关闭Session后切换代理,核对新出口;
  7. 检查截图、日志和HAR中没有敏感凭据。

十一、日志应该记录什么

记录Session ID、节点、浏览器与驱动版本、目标主机、代理节点标识、错误阶段和耗时即可。不要记录完整认证头、Cookie、代理密码或含令牌的URL。若需分析网络,优先在自有或授权环境采集。

十二、结论

Selenium代理配置的关键是找到浏览器真正运行的位置,并针对Chrome、Firefox和远程节点分别验证。Capabilities只是配置入口,出口、认证、证书和连接生命周期仍要用实际请求确认。

常见问题(FAQ)

Selenium代码在本地,代理请求一定从本地发出吗?
不一定。使用Remote WebDriver或Grid时,浏览器运行在远程节点,请求通常从该节点网络发出。
Chrome和Firefox可以共用完全相同的代理能力吗?
不能默认一致。W3C能力有通用结构,但浏览器驱动、认证和绕过规则仍可能存在差异。
带账号密码的代理为什么弹出认证框?
部分浏览器和驱动对代理认证能力支持有限,可能需要受支持的认证方案或测试环境代理配置。
接受不安全证书等于修复证书问题吗?
不是。它只改变浏览器处理错误的方式,正式环境仍应修复CA、证书链、域名或时间。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600