Java の RemoteWebDriver コマンドをプロキシ経由にする
Java の実行側から遠隔 WebDriver サービスにフォワードプロキシ経由で接続する場合は、コマンド実行器の ClientConfig を設定します。
Java runner → configured proxy → WebDriver service
remote browser → its own route → website
1 本目の経路には、Java のコマンド実行器を設定します。
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URI;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.HttpCommandExecutor;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.http.ClientConfig;
var proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("proxy.example", 8080));
var config = ClientConfig.defaultConfig()
.baseUri(URI.create("https://grid.example/"))
.proxy(proxy);
var executor = new HttpCommandExecutor(config);
var driver = new RemoteWebDriver(executor, new ChromeOptions());
実際の Grid エンドポイントを、デプロイ先のパスも含めて指定します。必要な Chrome オプションを維持し、driver.quit() でセッションを終了してください。
ここで使うのは Java 実行側の HTTP 接続用の java.net.Proxy です。一方、Selenium の org.openqa.selenium.Proxy capability が制御するのはブラウザーのページ通信です。2 本目の経路にもプロキシが必要な場合に限り、そちらも設定します。
セッション作成やコマンド送信の失敗は 1 本目の経路の問題です。その後のページ遷移は 2 本目で失敗する場合があります。Java 実行側の中継プロキシへの認証には、その HTTP トランスポートが対応する方式が必要です。ブラウザーの認証コールバックでは設定できません。