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 セッションの作成時なのか、ウェブサイトの遷移時なのかを切り分けます。この二つの失敗は、異なるネットワーククライアントと異なるプロキシポリシーに関係する可能性があります。

関連記事