1

我目前正在尝试使用 BrowserMob 设置 Selenium WebDriver,以在测试中捕获网络请求。目前我的设置如下:

在 192.168.1.97,端口 8080 上运行 TomCat 的开发机器

在网络驱动程序上:

System.out.println( options.getCapability(CapabilityType.PROXY  ) );

返回:

代理(手动,http=192.168.0.97:64181,ssl=192.168.0.97:64181)

我们的网络上没有使用公司代理。

以下是我测试中的代码:

@BeforeClass
public static void setupWebDriver() throws MalformedURLException
{
   DesiredCapabilities capabilities = new DesiredCapabilities();
   proxy = new BrowserMobProxyServer();

   proxy.setMitmManager( ImpersonatingMitmManager.builder().trustAllServers( true ).build() );
   proxy.setChainedProxy( new InetSocketAddress( "192.168.1.97", 8080 ) );
   proxy.setTrustAllServers( true );
   proxy.start( 0 );

   // get the Selenium proxy object
   Proxy seleniumProxy = ClientUtil.createSeleniumProxy( proxy );
   seleniumProxy.setSslProxy( "192.168.1.97:" + proxy.getPort() );


   capabilities.setAcceptInsecureCerts( true );
   capabilities.setCapability( CapabilityType.ACCEPT_SSL_CERTS, true );
   capabilities.setCapability( CapabilityType.PROXY, seleniumProxy );

   proxy.setHarCaptureTypes( CaptureType.REQUEST_CONTENT, CaptureType.REQUEST_HEADERS );
   SeleniumHelper.startup( capabilities );
}

目前正在发生的事情是,Chrome 正在成功生成,当我将这些功能传递给 Web 驱动程序时,本地 Web 服务器为许多请求返回 404 错误。这些似乎都是外部资源(与直接来自 TomCat 的请求相反),所以我的解决方案非常接近,只是无法让 BrowserMob 连接到第三方 HTTP 和 HTTPS 资源。例如 jQuery 失败、Google Analytics 失败等等。

我已经检查了实际资源中的 HAR 资源,并且代理似乎受到了打击,因为我能够读取 HAR 资源。IE。我从中得到输出:

super.getProxy().newHar("check.har");

goTo( "/507393" );
waitForNavigation();
Har har = super.getHar();
HarLog log = har.getLog();
List<HarEntry> entries = log.getEntries();
for(HarEntry entry: entries ) {
    HarRequest request= entry.getRequest();
    System.out.println( request.getUrl() );
}

如果我删除链式代理的行,Selenium 根本不会连接到任何 Web 服务器。我怀疑本地设置是否需要链式代理,但我现在使用它比没有它更进一步。

有人能看出有什么不对吗?我假设因为我正在运行“嵌入式”模式我不需要在命令行运行代理?

还有其他值得探索的设置吗?

4

0 回答 0