具有依赖项的Maven / Java项目:
<dependencies> <dependency> <groupId>net.lightbody.bmp</groupId> <artifactId>browsermob-core</artifactId> <version>2.1.4</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.4</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.7.1</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>23.0</version> </dependency> </dependencies>
码:
公共类bmp_Selenium {
@Test public void test() throws Exception { String chromedriverPath = System.getProperty("user.dir") + "/chromedriver"; System.setProperty("webdriver.chrome.driver", chromedriverPath); BrowserMobProxy proxy = getProxyServer(); //getting browsermob proxy System.out.println("BrowserMob Proxy running on port: " + proxy.getPort()); Proxy seleniumProxy = getSeleniumProxy(proxy); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.PROXY, seleniumProxy); WebDriver driver = new ChromeDriver(capabilities); proxy.newHar("foo"); driver.get("http://www.google.com"); Har har = proxy.getHar(); // Write HAR Data in a File String harFilePath = System.getProperty("user.dir") + "/hars/ww.har"; File harFile = new File(harFilePath); try { har.writeTo(harFile); } catch (IOException ex) { System.out.println (ex.toString()); System.out.println("Could not find file " + harFilePath); } List<HarEntry> entries = har.getLog().getEntries(); for (HarEntry entry : entries) { System.out.println("Request URL: " + entry.getRequest().getUrl()); System.out.println("Entry response status: " + entry.getResponse().getStatus()); System.out.println("Entry response text: " + entry.getResponse().getStatusText()); } proxy.stop(); driver.quit(); } public Proxy getSeleniumProxy(BrowserMobProxy proxyServer) { Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxyServer); try { String hostIp = Inet4Address.getLocalHost().getHostAddress(); seleniumProxy.setHttpProxy(hostIp + ":" + proxyServer.getPort()); seleniumProxy.setSslProxy(hostIp + ":" + proxyServer.getPort()); } catch (UnknownHostException e) { e.printStackTrace(); Assert.fail("invalid Host Address"); } return seleniumProxy; } public BrowserMobProxy getProxyServer() { BrowserMobProxy proxy = new BrowserMobProxyServer(); proxy.setTrustAllServers(true); proxy.setHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT); proxy.start(); return proxy; }
}
控制台输出:
在端口:57547上运行的BrowserMob代理在端口47157上启动ChromeDriver 2.33.506106(8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2)仅允许本地连接。2017年11月30日下午4:48:33 org.openqa.selenium.remote.ProtocolHandshake createSession INFO:检测到方言:OSS请求URL:http : //www.google.com/ 输入响应状态:0输入响应文本:请求URL :http : //www.google.com/ 输入响应状态:0输入响应文本:请求URL:http : //www.google.com/ 输入响应状态:0输入响应文本:请求URL:http:// www .google.com / 输入响应状态:0输入响应文本:
Har文件:
{ "log": { "version": "1.2", "creator": { "name": "BrowserMob Proxy", "version": "2.1.4", "comment": "" }, "pages": [{ "id": "foo", "startedDateTime": "2017-11-30T21:48:34.064Z", "title": "foo", "pageTimings": { "comment": "" }, "comment": "" } ], "entries": [{ "pageref": "foo", "startedDateTime": "2017-11-30T21:48:34.210Z", "request": { "method": "GET", "url": "http://www.google.com/", "httpVersion": "HTTP/1.1", "cookies": [ ], "headers": [ ], "queryString": [ ], "headersSize": 417, "bodySize": 0, "comment": "" }, "response": { "status": 0, "statusText": "", "httpVersion": "unknown", "cookies": [ ], "headers": [ ], "content": { "size": 0, "mimeType": "", "comment": "" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "comment": "", "_error": "No response received" }, "cache": {}, "timings": { "comment": "", "send": 0, "wait": 0, "receive": 0, "ssl": -1, "connect": -1, "blocked": 0, "dns": -1 }, "comment": "", "time": 0 }, { "pageref": "foo", "startedDateTime": "2017-11-30T21:48:34.224Z", "request": { "method": "GET", "url": "http://www.google.com/", "httpVersion": "HTTP/1.1", "cookies": [ ], "headers": [ ], "queryString": [ ], "headersSize": 417, "bodySize": 0, "comment": "" }, "response": { "status": 0, "statusText": "", "httpVersion": "unknown", "cookies": [ ], "headers": [ ], "content": { "size": 0, "mimeType": "", "comment": "" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "comment": "", "_error": "No response received" }, "cache": {}, "timings": { "comment": "", "send": 0, "wait": 0, "receive": 0, "ssl": -1, "connect": -1, "blocked": 0, "dns": -1 }, "comment": "", "time": 0 }, { "pageref": "foo", "startedDateTime": "2017-11-30T21:48:34.225Z", "request": { "method": "GET", "url": "http://www.google.com/", "httpVersion": "HTTP/1.1", "cookies": [ ], "headers": [ ], "queryString": [ ], "headersSize": 417, "bodySize": 0, "comment": "" }, "response": { "status": 0, "statusText": "", "httpVersion": "unknown", "cookies": [ ], "headers": [ ], "content": { "size": 0, "mimeType": "", "comment": "" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "comment": "", "_error": "No response received" }, "cache": {}, "timings": { "comment": "", "send": 0, "wait": 0, "receive": 0, "ssl": -1, "connect": -1, "blocked": 0, "dns": -1 }, "comment": "", "time": 0 }, { "pageref": "foo", "startedDateTime": "2017-11-30T21:48:34.327Z", "request": { "method": "GET", "url": "http://www.google.com/", "httpVersion": "HTTP/1.1", "cookies": [ ], "headers": [ ], "queryString": [ ], "headersSize": 443, "bodySize": 0, "comment": "" }, "response": { "status": 0, "statusText": "", "httpVersion": "unknown", "cookies": [ ], "headers": [ ], "content": { "size": 0, "mimeType": "", "comment": "" }, "redirectURL": "", "headersSize": -1, "bodySize": -1, "comment": "", "_error": "No response received" }, "cache": {}, "timings": { "comment": "", "send": 0, "wait": 0, "receive": 0, "ssl": -1, "connect": -1, "blocked": 0, "dns": -1 }, "comment": "", "time": 0 } ], "comment": "" } }
根据GitHub用户mediga的建议,修改BMP依赖关系解决了该问题:
取代这个
<dependency> <groupId>net.lightbody.bmp</groupId> <artifactId>browsermob-core</artifactId> <version>2.1.4</version> <scope>test</scope> </dependency>
与
> <dependency> > <groupId>net.lightbody.bmp</groupId> > <artifactId>browsermob-core</artifactId> > <version>2.1.5</version> > </dependency>
https://github.com/lightbody/browsermob- proxy/issues/689#issuecomment-348620752