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 トランスポートが対応する方式が必要です。ブラウザーの認証コールバックでは設定できません。

関連記事