使用BrowserMobProxy、Selenium、Firefox、Marionette/Gecko获取请求和响应

4
我正在尝试使用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");;
1个回答

7
在Firefox 51及以下版本中,Selenium 3的GeckoDriver存在一个错误/缺失功能,当在DesiredCapabilities对象上设置CapabilityType.PROXY时,Firefox无法获取代理设置。然而,您仍然可以直接在FirefoxProfile上设置代理设置。BMP的测试之一中有一个示例。由于您已经在使用FirefoxProfile对象,因此这可能是一个明智的解决方案。它看起来会像这样(根据需要将localhost替换为主机名/ IP地址):
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

更新

根据mozilla bug报告,此问题已在Firefox 52中解决,该版本计划于2017年3月7日发布。在此期间,使用FirefoxProfile的解决方案应该可以在51(及更低版本)中使用,并且也应该继续在52+中使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接