JAVA 中带有 Selenium 的 browsermob 不起作用,浏览器会出现不同的错误
browsermob in JAVA with Selenium doesn't work, different errors for browsers
我将 Java 与 selenium 一起使用,我想使用 browsermob:我对不同的浏览器使用相同的代码,例如火狐浏览器:
BrowserMobProxyServer proxyServer = new BrowserMobProxyServer();
proxyServer.start();
proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer);
DesiredCapabilities dccFirefox = DesiredCapabilities.firefox();
dccFirefox.setCapability(CapabilityType.PROXY, proxy);
this.driver = new FirefoxDriver(dccFirefox);
在 Firefox 中出现错误:
org.openqa.selenium.SessionNotCreatedException: InvalidArgumentError: Expected [object Undefined] undefined to be an integer
Build info: version: '3.5.1', revision: '9c21bb67ef', time: '2017-08-17T15:26:08.955Z'
System info: host: 'BEN-PLL-ST1-HP', ip: '192.168.1.9', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_141'
Driver info: driver.version: FirefoxDriver
remote stacktrace: stack backtrace:
0: 0x4bb74f - <no info>
1: 0x4bbea9 - <no info>
2: 0x43ce8d - <no info>
3: 0x44ce14 - <no info>
4: 0x44944a - <no info>
5: 0x4203e1 - <no info>
6: 0x407dc7 - <no info>
7: 0x6d95b9 - <no info>
8: 0x4173a7 - <no info>
9: 0x6d38b3 - <no info>
10: 0x775559cd - BaseThreadInitThunk
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new[=12=](W3CHandshakeResponse.java:57)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction(W3CHandshakeResponse.java:104)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession(ProtocolHandshake.java:360)
at java.util.stream.ReferencePipeline.accept(Unknown Source)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.findFirst(Unknown Source)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:363)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:137)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:641)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:254)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:191)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:103)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:137)
Chrome打开正常但是页面打不开,控制台报错:
Failed to load resource: net::ERR_EMPTY_RESPONSE
net::ERR_PROXY_CONNECTION_FAILED
有人知道为什么会出现此错误吗?
Geckodriver 有一个未解决的问题导致了这个问题。 https://github.com/mozilla/geckodriver/issues/764
您可以使用以下代码获得解决方法。
编辑-1
自 geckodriver 以来,不受信任的设置已更改。所以更新了代码以适应相同的
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.CaptureType;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.io.File;
import java.io.IOException;
/**
* Created by tarun.lalwani on 5/31/17.
*/
public class TestApp {
public static void main(String [] args) {
BrowserMobProxyServer proxyServer = new BrowserMobProxyServer();
proxyServer.start();
proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer);
FirefoxProfile profile = new FirefoxProfile();
DesiredCapabilities cap = new DesiredCapabilities();
cap.setAcceptInsecureCerts(true);
String host = proxy.getHttpProxy().split(":")[0];
int port = Integer.parseInt(proxy.getHttpProxy().split(":")[1]);
profile.setPreference("network.proxy.type", 1);
profile.setPreference("network.proxy.http", host);
profile.setPreference("network.proxy.http_port", port);
profile.setPreference("network.proxy.ssl", host);
profile.setPreference("network.proxy.ssl_port", port);
profile.setPreference("acceptInsecureCerts", true);
cap.setCapability(FirefoxDriver.PROFILE, profile);
FirefoxDriver driver = new FirefoxDriver(cap);
proxyServer.newHar("mysite");
driver.get("http://google.com");
Har har = proxyServer.getHar();
try {
har.writeTo(new File("har.json"));
} catch (IOException e) {
e.printStackTrace();
}
driver.quit();
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test1</groupId>
<artifactId>test2</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>net.lightbody.bmp</groupId>
<!-- To use the legacy, Jetty-based implementation,
change the artifactId to browsermob-core -->
<artifactId>browsermob-core-littleproxy</artifactId>
<version>2.1.0-beta-6</version>
<scope>test</scope> </dependency>
<dependency>
<groupId>net.lightbody.bmp</groupId>
<artifactId>browsermob-core-littleproxy</artifactId>
<version>2.1.0-beta-5</version>
</dependency>
</dependencies>
</project>
我将 Java 与 selenium 一起使用,我想使用 browsermob:我对不同的浏览器使用相同的代码,例如火狐浏览器:
BrowserMobProxyServer proxyServer = new BrowserMobProxyServer();
proxyServer.start();
proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer);
DesiredCapabilities dccFirefox = DesiredCapabilities.firefox();
dccFirefox.setCapability(CapabilityType.PROXY, proxy);
this.driver = new FirefoxDriver(dccFirefox);
在 Firefox 中出现错误:
org.openqa.selenium.SessionNotCreatedException: InvalidArgumentError: Expected [object Undefined] undefined to be an integer
Build info: version: '3.5.1', revision: '9c21bb67ef', time: '2017-08-17T15:26:08.955Z'
System info: host: 'BEN-PLL-ST1-HP', ip: '192.168.1.9', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_141'
Driver info: driver.version: FirefoxDriver
remote stacktrace: stack backtrace:
0: 0x4bb74f - <no info>
1: 0x4bbea9 - <no info>
2: 0x43ce8d - <no info>
3: 0x44ce14 - <no info>
4: 0x44944a - <no info>
5: 0x4203e1 - <no info>
6: 0x407dc7 - <no info>
7: 0x6d95b9 - <no info>
8: 0x4173a7 - <no info>
9: 0x6d38b3 - <no info>
10: 0x775559cd - BaseThreadInitThunk
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new[=12=](W3CHandshakeResponse.java:57)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction(W3CHandshakeResponse.java:104)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession(ProtocolHandshake.java:360)
at java.util.stream.ReferencePipeline.accept(Unknown Source)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.findFirst(Unknown Source)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:363)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:137)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:641)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:254)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:191)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:103)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:137)
Chrome打开正常但是页面打不开,控制台报错:
Failed to load resource: net::ERR_EMPTY_RESPONSE
net::ERR_PROXY_CONNECTION_FAILED
有人知道为什么会出现此错误吗?
Geckodriver 有一个未解决的问题导致了这个问题。 https://github.com/mozilla/geckodriver/issues/764
您可以使用以下代码获得解决方法。
编辑-1
自 geckodriver 以来,不受信任的设置已更改。所以更新了代码以适应相同的
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.CaptureType;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.io.File;
import java.io.IOException;
/**
* Created by tarun.lalwani on 5/31/17.
*/
public class TestApp {
public static void main(String [] args) {
BrowserMobProxyServer proxyServer = new BrowserMobProxyServer();
proxyServer.start();
proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer);
FirefoxProfile profile = new FirefoxProfile();
DesiredCapabilities cap = new DesiredCapabilities();
cap.setAcceptInsecureCerts(true);
String host = proxy.getHttpProxy().split(":")[0];
int port = Integer.parseInt(proxy.getHttpProxy().split(":")[1]);
profile.setPreference("network.proxy.type", 1);
profile.setPreference("network.proxy.http", host);
profile.setPreference("network.proxy.http_port", port);
profile.setPreference("network.proxy.ssl", host);
profile.setPreference("network.proxy.ssl_port", port);
profile.setPreference("acceptInsecureCerts", true);
cap.setCapability(FirefoxDriver.PROFILE, profile);
FirefoxDriver driver = new FirefoxDriver(cap);
proxyServer.newHar("mysite");
driver.get("http://google.com");
Har har = proxyServer.getHar();
try {
har.writeTo(new File("har.json"));
} catch (IOException e) {
e.printStackTrace();
}
driver.quit();
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test1</groupId>
<artifactId>test2</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>net.lightbody.bmp</groupId>
<!-- To use the legacy, Jetty-based implementation,
change the artifactId to browsermob-core -->
<artifactId>browsermob-core-littleproxy</artifactId>
<version>2.1.0-beta-6</version>
<scope>test</scope> </dependency>
<dependency>
<groupId>net.lightbody.bmp</groupId>
<artifactId>browsermob-core-littleproxy</artifactId>
<version>2.1.0-beta-5</version>
</dependency>
</dependencies>
</project>