微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用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中存在一个错误/缺失功能,可防止Firefox在DesiredCapabilities对象上设置CapabilityType.PROXY时获取代理设置.

但是,您仍然可以直接在FirefoxProfile上设置代理设置.在one of BMP’s tests中有一个这样的例子.由于你已经在使用FirefoxProfile对象,这对你来说可能是一个明智的解决方案.它看起来像这样(根据需要用localname / 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", "");

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

UPDATE

根据mozilla bug report,这个问题在2017年3月7日scheduled to be released的Firefox 52中得到修复.与此同时,FirefoxProfile的解决方案应该使用51(及更低版本),并且还应该继续使用52.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐