使用Selenium的JAVA中的browsermob不起作用,浏览器的错误不同

我使用Java和selenium,我想使用browsermob:我在不同的浏览器中使用相同的代码,例如firefox:

BrowserMobProxyServer proxyServer = new BrowserMobProxyServer(); proxyServer.start(); proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes()); proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT); Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer); DesiredCapabilities dccFirefox = DesiredCapabilities.firefox(); dccFirefox.setCapability(CapabilityType.PROXY, proxy); this.driver = new FirefoxDriver(dccFirefox); 

在Firefox中发生错误:

  org.openqa.selenium.SessionNotCreatedException: InvalidArgumentError: Expected [object Undefined] undefined to be an integer Build info: version: '3.5.1', revision: '9c21bb67ef', time: '2017-08-17T15:26:08.955Z' System info: host: 'BEN-PLL-ST1-HP', ip: '192.168.1.9', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_141' Driver info: driver.version: FirefoxDriver remote stacktrace: stack backtrace: 0: 0x4bb74f -  1: 0x4bbea9 -  2: 0x43ce8d -  3: 0x44ce14 -  4: 0x44944a -  5: 0x4203e1 -  6: 0x407dc7 -  7: 0x6d95b9 -  8: 0x4173a7 -  9: 0x6d38b3 -  10: 0x775559cd - BaseThreadInitThunk at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.java:57) at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.java:104) at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$24(ProtocolHandshake.java:360) at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source) at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source) at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source) at java.util.stream.AbstractPipeline.copyInto(Unknown Source) at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source) at java.util.stream.AbstractPipeline.evaluate(Unknown Source) at java.util.stream.ReferencePipeline.findFirst(Unknown Source) at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:363) at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:137) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142) at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:641) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:254) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236) at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:137) at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:191) at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:103) at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:137) 

Chrome打开normaly但页面无法打开,在控制台发生错误:

 Failed to load resource: net::ERR_EMPTY_RESPONSE net::ERR_PROXY_CONNECTION_FAILED 

有人知道为什么会出现这种错误吗?

Geckodriver存在一个问题,导致了这个问题。 https://github.com/mozilla/geckodriver/issues/764

您可以使用以下代码获得解决方法。

编辑-1

由于geckodriver不受信任的设置已经改变。 所以更新了代码以适应相同的情况

 import net.lightbody.bmp.BrowserMobProxyServer; import net.lightbody.bmp.client.ClientUtil; import net.lightbody.bmp.core.har.Har; import net.lightbody.bmp.proxy.CaptureType; import org.openqa.selenium.Proxy; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxProfile; import org.openqa.selenium.remote.DesiredCapabilities; import java.io.File; import java.io.IOException; /** * Created by tarun.lalwani on 5/31/17. */ public class TestApp { public static void main(String [] args) { BrowserMobProxyServer proxyServer = new BrowserMobProxyServer(); proxyServer.start(); proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes()); proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT); Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer); FirefoxProfile profile = new FirefoxProfile(); DesiredCapabilities cap = new DesiredCapabilities(); cap.setAcceptInsecureCerts(true); String host = proxy.getHttpProxy().split(":")[0]; int port = Integer.parseInt(proxy.getHttpProxy().split(":")[1]); profile.setPreference("network.proxy.type", 1); profile.setPreference("network.proxy.http", host); profile.setPreference("network.proxy.http_port", port); profile.setPreference("network.proxy.ssl", host); profile.setPreference("network.proxy.ssl_port", port); profile.setPreference("acceptInsecureCerts", true); cap.setCapability(FirefoxDriver.PROFILE, profile); FirefoxDriver driver = new FirefoxDriver(cap); proxyServer.newHar("mysite"); driver.get("http://google.com"); Har har = proxyServer.getHar(); try { har.writeTo(new File("har.json")); } catch (IOException e) { e.printStackTrace(); } driver.quit(); } } 

的pom.xml

   4.0.0 test1 test2 1.0-SNAPSHOT   org.seleniumhq.selenium selenium-java 3.4.0   net.lightbody.bmp  browsermob-core-littleproxy 2.1.0-beta-6 test   net.lightbody.bmp browsermob-core-littleproxy 2.1.0-beta-5