让 Java 的 RemoteWebDriver 命令经过代理
Java 运行端需要通过正向代理访问远程 WebDriver 服务时,在命令执行器上配置 ClientConfig。
Java runner → configured proxy → WebDriver service
remote browser → its own route → website
第一条路径需要配置 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.net.Proxy,作用于 Java 运行端的 HTTP 连接。Selenium 的 org.openqa.selenium.Proxy capability 控制的则是浏览器页面流量;只有第二条路径也需要代理时,才同时配置它。
创建会话或发送命令失败,属于第一条路径的问题。随后导航失败,则可能出在第二条路径。运行端连接中间代理时,需要采用该 HTTP 传输层支持的认证方式;浏览器认证回调不能替它完成配置。