我在我的 Selenium Java 程序中使用 BrowserMobProxy 来验证用于 Web 浏览的 HTTP 代理。当我访问一个网站时,例如“google.com”,浏览器会很好地加载该页面。但是,当我在第一个页面加载后放置调试断点(如下行)并在调试模式下运行程序时,随后通过自动浏览器 UI 进行的 HTTP 交互似乎挂起。
具体来说,在调试模式下,当程序处于下面的断点时,我手动将其他 URL (yahoo.com) 输入浏览器并按 Enter,这会导致浏览器永远加载。我偷看网络选项卡,状态保持“待定”。
但是,如果我在第一个“google.com”页面加载后通过 webDriver.navigate(ANOTHER_SITE) 以编程方式访问另一个站点,则可以正常工作。
这会阻止我执行基于 UI 的操作,例如在第一次成功访问页面时单击“登录按钮”,因为后续操作将挂起。
这是 网络选项卡屏幕截图
代码片段如下:
BrowserMobProxy browserMobProxyServer = new BrowserMobProxyServer();
browserMobProxyServer.setTrustAllServers(true);
browserMobProxyServer.setChainedProxy(new InetSocketAddress(PROXY_HOST, PROXY_PORT));
browserMobProxyServer
.chainedProxyAuthorization(PROXY_USERNAME, PROXY_PASSWORD, AuthType.BASIC);
browserMobProxyServer.start(9091);
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(browserMobProxyServer);
String hostIp = Inet4Address.getLocalHost().getHostAddress();
String proxyAddress = hostIp + ":" + browserMobProxyServer.getPort();
seleniumProxy.setHttpProxy(proxyAddress);
seleniumProxy.setSslProxy(proxyAddress);
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setProxy(seleniumProxy);
chromeOptions.setAcceptInsecureCerts(true);
System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver");
WebDriver webDriver = new ChromeDriver(chromeOptions);
webDriver.navigate("http://www.google.com");
System.out.println("STOP"); <----- PUT BREAKPOINT HERE
我是否以某种方式错误地设置了 BrowserMobProxy 或者我还缺少什么?
出于诊断目的,我使用以下内容:
<dependency>
<groupId>net.lightbody.bmp</groupId>
<artifactId>browsermob-core</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0-alpha-4</version>
</dependency>
以及最新版本的 Chrome 和 Chrome 驱动程序。
任何指导表示赞赏,谢谢!