【问题标题】:BrowserMobProxy with Selenium Java使用 Selenium Java 的 BrowserMobProxy
【发布时间】:2020-02-17 02:20:39
【问题描述】:

我正在尝试使用 Selenium Java UI 脚本将 JAR 内容保存到我的本地驱动器中。当我尝试这样做时,我收到了一些错误。我经历了几个块,我已将 Guava JAR 文件更新到最新版本,但仍然没有成功。

代码片段:

public static void main(String[] args) {
    System.out.println("Hi");

    ChromeOptions options = new ChromeOptions();
    BrowserMobProxy proxy = new BrowserMobProxyServer();
    proxy.start(8080);

    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);

    System.setProperty("webdriver.chrome.driver", "D:\\Selenium Files\\chromedriver_win32 (3)\\chromedriver.exe");
    @SuppressWarnings("deprecation")
    WebDriver driver = new ChromeDriver(capabilities);

    driver.manage().window().maximize();

    proxy.newHar("test");
    driver.get("https://google.com");

    proxy.stop();
}

错误:

07:43:43.059 [LittleProxy-0-ClientToProxyWorker-4] ERROR org.littleshoot.proxy.impl.ClientToProxyConnection - (AWAITING_INITIAL) [id: 0xca565cec, L:/192.168.1.4:8080 - R:/192.168.1.4:62453]: Caught an exception on ClientToProxyConnection
java.lang.NoSuchMethodError: com.google.common.net.HostAndPort.getHostText()Ljava/lang/String;
    at org.littleshoot.proxy.impl.ProxyToServerConnection.addressFor(ProxyToServerConnection.java:954) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyToServerConnection.setupConnectionParameters(ProxyToServerConnection.java:832) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyToServerConnection.<init>(ProxyToServerConnection.java:199) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyToServerConnection.create(ProxyToServerConnection.java:173) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ClientToProxyConnection.doReadHTTPInitial(ClientToProxyConnection.java:284) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ClientToProxyConnection.readHTTPInitial(ClientToProxyConnection.java:191) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ClientToProxyConnection.readHTTPInitial(ClientToProxyConnection.java:80) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection.readHTTP(ProxyConnection.java:135) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection.read(ProxyConnection.java:120) ~[browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection.channelRead0(ProxyConnection.java:587) ~[browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) ~[browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) [browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection$RequestReadMonitor.channelRead(ProxyConnection.java:715) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293) [browsermob-dist-2.1.4.jar:?]
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) [browsermob-dist-2.1.4.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection$BytesReadMonitor.channelRead(ProxyConnection.java:692) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:351) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:373) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:129) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:651) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:574) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:488) [browsermob-dist-2.1.4.jar:?]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:450) [browsermob-dist-2.1.4.jar:?]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873) [browsermob-dist-2.1.4.jar:?]
    at java.lang.Thread.run(Thread.java:834) [?:?]

我在我的项目中配置了以下 JAR 文件。

【问题讨论】:

  • 如果您使用的是 Maven 项目,最好分享您用于依赖项的 pom 文件。我在列表中看不到硒罐,还有其他与此代码无关的不必要的罐子可以删除。也许您可以从一个包含所有必需依赖项的小型 Maven 项目开始,然后将其合并到您的最终项目中,这样调试起来会更容易。

标签: java selenium browsermob-proxy


【解决方案1】:

如前所述,您的问题中有很多缺失的部分,例如硒版本等。也没有。支持 jar 可能适用于您的整个项目。您可以创建一个单独的项目以使 browsermobproxy 工作以捕获 HAR 文件,然后将其合并到您的实际项目中。下面是我的代码,它适用于描述的 pom 配置。

    // start the proxy
    BrowserMobProxy proxy = new BrowserMobProxyServer();
    proxy.setTrustAllServers(true);
    proxy.start(0);

    // get the Selenium proxy object
    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
    seleniumProxy.setSslProxy("localhost:" + proxy.getPort());

    // configure it as a desired capability
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);

    //add chrome options to ignore certificate errors for https 
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--ignore-certificate-errors");

    // replace 'directory' with a suitable temp dir on your filesystem
    options.addArguments("--user-data-dir=/home/shariq/newchrome");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);

    //prepare chromedriver service required for latest selenium
    ChromeDriverService service = new ChromeDriverService.Builder()
            .usingAnyFreePort()
            .build();

    //setup driver
    ChromeDriver driver = new ChromeDriver(service, options);

    // enable more detailed HAR capture, if desired (see CaptureType for the complete list)
    proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);

    // create a new HAR with the label "google.com"
    proxy.newHar("google.com");

   // open google.com
    driver.get("https://google.com");

    // get the HAR data
    Har har = proxy.getHar();
    har.writeTo(new File("/home/shariq/Downloads/google.com.har"));
    proxy.stop();
    driver.close();

POM 依赖项:

<dependencies>
    <dependency>
        <groupId>net.lightbody.bmp</groupId>
        <artifactId>browsermob-core</artifactId>
        <version>2.1.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>28.2-jre</version>
    </dependency>
</dependencies>

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 2017-04-26
    • 2016-04-12
    • 2019-03-12
    • 2016-05-23
    • 2016-07-12
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    相关资源
    最近更新 更多