BrowserMob 只记录真正经过其监听器的流量。在 Selenium 浏览器旁边启动代理,并不会让该浏览器走这条路径。

对于 BrowserMob 文档中 2.1.5 的内嵌 API,现有的 Java Selenium 配置可以采用这个顺序:

BrowserMobProxy proxy = new BrowserMobProxyServer();
proxy.start(0);
try {
    ChromeOptions options = new ChromeOptions();
    options.setProxy(ClientUtil.createSeleniumProxy(proxy));
    WebDriver driver = new ChromeDriver(options);
    try {
        proxy.newHar("example-page");
        driver.get("http://www.example.com/");
        Har capture = proxy.getHar();
        capture.writeTo(new java.io.File("page.har"));
    } finally {
        driver.quit();
    }
} finally {
    proxy.stop();
}

端口 0 会申请一个可用端口。ClientUtil 根据该监听器构建 Selenium 代理设置。捕获在导航之前开始,并在代理仍然可用时取回。

这段代码假定项目的 BrowserMob、HAR 和 Selenium 类型已经可用。捕获请求或响应正文是额外的 CaptureType 选择。HTTPS 拦截还需要它预期的证书信任安排。

对于远程 Grid 浏览器,要公布一个能从该浏览器所在机器访问的地址。测试运行器上的 loopback 地址在那边指的是另一台机器的 loopback。

这捕获的是浏览器已配置的 HTTP 路径。它并不会建立一条阻止其他任何出站连接的操作系统规则。

相关文章