使用Browsermobproxy,硒,Firefox,Marionette/Gecko获取请求和响应



我正在尝试使用BMP的RequestFilter和ResponseFilter获取响应和请求。但是,当网页加载时,没有任何印刷在控制台中。
不过,其他一切似乎都起作用。也许BMP没有看Geckodriver?
我正在使用Firefox 50.0,Browsermobproxy 2.1.2,硒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及更低中,硒3的geckodriver中有一个错误/丢失功能,可防止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报告》,此问题已固定在原定于2017年3月7日发布的Firefox 52中。与此同时,使用FirefoxProfile的解决方案应与51(及较低)一起使用,并且应该使用还继续使用52 。

最新更新