JavaScript 的 Selenium 脚本会在远端服务器的浏览器能够访问任何页面之前,先把 WebDriver 命令发送到那台服务器。如果命令连接必须经过 HTTP 代理,请配置 Builder 的 WebDriver 代理:

const { Builder, Browser } = require("selenium-webdriver");

const driver = await new Builder()
  .forBrowser(Browser.CHROME)
  .usingServer(gridUrl)
  .usingWebDriverProxy("http://proxy.example.net:8080")
  .build();

gridUrl 是真正的 Selenium 服务器或托管的 WebDriver 端点。对于允许该路由的公网可访问端点,HTTP 代理列表可以为 usingWebDriverProxy 提供候选。请在 async 的 CommonJS 函数中运行这段代码。测试会话结束时退出 driver。

usingWebDriverProxy 控制的是 JavaScript 绑定的 HTTP 连接。它不会设置 Chrome 的代理能力,也不会设置 Chrome 的启动参数。

如果浏览器流量也需要经由中间人,请另外提供相应的 Chrome 选项。该浏览器运行在远端机器上,所以它的代理端点必须在那一端可达。脚本所在机器上的 loopback 地址并不会自动成为远端浏览器可用的 loopback 服务。

要区分失败发生在创建 WebDriver 会话时,还是发生在访问网站时。这两种失败可能涉及不同的网络客户端和不同的代理策略。

相关文章