使用BrowserMobProxy,Selenium,Firefox,marionette / gecko获取请求和响应

我正在尝试使用BMP的RequestFilter和ResponseFilter获得响应和请求。 但是,当网页加载时,控制台中不会打印任何内容。
其他一切似乎都有效。 也许BMP不是在看GeckoDriver?
我使用的是Firefox 50.0,BrowserMobProxy 2.1.2,Selenium 3.0.1和GeckoDriver 0.11.1
测试代码如下。 有人可以帮帮我吗?
非常感谢你!

BrowserMobProxy server = new BrowserMobProxyServer(); server.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT); server.start(); int port = server.getPort(); server.addRequestFilter((request, content, info) -> { String q = URLDecoder.decode(info.getOriginalUrl(), "UTF-8"); System.out.println("Request: "+q); return null; }); server.addResponseFilter((response, content, info) -> { String type = response.headers().get("Content-Type"); System.out.println("Response: "+info.getOriginalRequest()); System.out.println(type); }); Proxy proxy = ClientUtil.createSeleniumProxy(server); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); capabilities.setCapability("marionette", true); capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true); FirefoxProfile fp = new FirefoxProfile(); capabilities.setCapability(FirefoxDriver.PROFILE, fp); String gecko = "d:/Programming/java/geckodriver.exe"; System.setProperty("webdriver.gecko.driver", gecko); driver = new FirefoxDriver(capabilities); driver.get("https://google.com");; 

在Firefox 51及更低版本中,Selenium 3的GeckoDriver中存在一个错误/缺失function,可防止Firefox在DesiredCapabilities对象上设置CapabilityType.PROXY时获取代理设置。

但是,您仍然可以直接在FirefoxProfile上设置代理设置。 在BMP的一项测试中有一个例子。 由于您已经在使用FirefoxProfile对象,因此这对您来说可能是一个明智的解决方案。 它看起来像这样(用适当的主机名/ IP地址替换localhost):

 FirefoxProfile fp = new FirefoxProfile(); fp.setPreference("network.proxy.http", "localhost"); fp.setPreference("network.proxy.http_port", server.getPort()); fp.setPreference("network.proxy.ssl", "localhost"); fp.setPreference("network.proxy.ssl_port", server.getPort()); fp.setPreference("network.proxy.type", 1); fp.setPreference("network.proxy.no_proxies_on", ""); 

此geckodriver问题还讨论了在DesiredCapabilities对象上使用CapabilityType.PROXY的一些其他替代方法。

UPDATE

根据mozilla bug报告 ,此问题在Firefox 52中得到修复, 计划于 2017年3月7日发布 。与此同时, FirefoxProfile的解决方案应该与51(及更低版本)一起使用,并且还应该继续与52+合作。

Interesting Posts