【问题标题】:Browser-mob Proxy is not capturing the network traffic with chrome driverBrowser-mob 代理未使用 chrome 驱动程序捕获网络流量
【发布时间】:2017-10-26 12:09:03
【问题描述】:

我正在使用此代码将浏览器 mob 代理与 maven 依赖项集成 net.lightbody.bmp browsermob-core 2.1.5

它根本没有捕获网络请求,我得到了这种 har 文件:

{
   "log":{
      "version":"1.2",
      "creator":{
         "name":"BrowserMob Proxy",
         "version":"2.1.0-beta-6-littleproxy",
         "comment":""
      },
      "pages":[
         {
            "id":"11",
            "startedDateTime":"2017-10-26T17:28:42.501+05:30",
            "title":"11",
            "pageTimings":{
               "comment":""
            },
            "comment":""
         }
      ],
      "entries":[],
      "comment":""
   }
}

package lenskart.tests;

import java.io.File;
import java.net.UnknownHostException;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.Test;

import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import net.lightbody.bmp.mitm.manager.ImpersonatingMitmManager;
import net.lightbody.bmp.proxy.CaptureType;

public class ProxyTestClass {

    @Test
    public static void main() throws Exception {
        // TODO Auto-generated method stub

        BrowserMobProxyServer browserMobProxy = new BrowserMobProxyServer();
        browserMobProxy.setTrustAllServers(true);
        browserMobProxy.setMitmManager(ImpersonatingMitmManager.builder().trustAllServers(true).build());
        browserMobProxy.start(0);

        System.out.println("Port Started On: " + browserMobProxy.getPort());
        System.setProperty("webdriver.chrome.driver", "/Users/pankaj.katiyar/Desktop/Automation/Lenskart_Automation/tpt/drivers/chromedriver");

        browserMobProxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT, CaptureType.RESPONSE_HEADERS);

        WebDriver driver = getDriver_CapProxy(browserMobProxy);

        driver.get("http://www.lenskart.com");
        driver.navigate().to("http://www.google.com");

        driver.quit();

        browserMobProxy.stop();

        browserMobProxy.newHar("11");
        browserMobProxy.getHar().writeTo(new File("/Users/pankaj.katiyar/Desktop/Automation/Lenskart_Automation/har"));
        ;
        System.out.println("Loaded browser ");
    }


    public static WebDriver getDriver_CapProxy(BrowserMobProxyServer browserMobProxy) throws UnknownHostException {
        Proxy proxy = ClientUtil.createSeleniumProxy(browserMobProxy);
        proxy.setHttpProxy("localhost:" + browserMobProxy.getPort());

        DesiredCapabilities cap = new DesiredCapabilities();

        ChromeOptions options = new ChromeOptions();
        options.addArguments("--ignore-certificate-errors");

        cap.setCapability(ChromeOptions.CAPABILITY, options);
        cap.setCapability(CapabilityType.PROXY, proxy);

        WebDriver driver = new ChromeDriver(options);

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        return driver;
    }
}

【问题讨论】:

    标签: java selenium selenium-webdriver browsermob-proxy


    【解决方案1】:

    您的代码有两个问题。

    首先将 selenium 代理分配给功能,但从不使用该实例。所以要么assign the options to the capabilities,要么直接把selenium代理赋值给options:

    Proxy seleniumProxy  = ClientUtil.createSeleniumProxy(browserMobProxy);
    
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--ignore-certificate-errors");
    options.setCapability(CapabilityType.PROXY, seleniumProxy);
    
    WebDriver driver = new ChromeDriver(options);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    

    其次,你在录音结束时调用browserMobProxy.newHar,而它应该在开头:

    browserMobProxy.newHar("11");
    
    driver.get("http://www.lenskart.com");
    driver.navigate().to("http://www.google.com");
    
    browserMobProxy.getHar().writeTo(new File("/Users/pankaj.katiyar/Desktop/Automation/Lenskart_Automation/har"));
    
    driver.quit();
    browserMobProxy.stop();
    

    【讨论】:

    • 应用代理后 - 我得到:此页面无法正常工作 www.google.co.in 未发送任何数据。 ERR_EMPTY_RESPONSE
    • 重定向可能有问题。尝试使用https://www.google.com 而不是http://www.google.com
    【解决方案2】:

    我运行了您的代码,您只需要进行两项更改,更改

    WebDriver driver = new ChromeDriver(options);
    

    WebDriver driver = new ChromeDriver(cap);
    

    在导航前移动browserMobProxy.newHar("11");

    browserMobProxy.newHar("11");
    driver.get("http://www.lenskart.com");
    

    在您的代码中一切正常。一旦你这样做了,Har 就会很好地生成,如下面的截图所示

    【讨论】:

    • 应用代理后,我得到 - 此页面无法正常工作 www.google.co.in 未发送任何数据。 ERR_EMPTY_RESPONSE
    • @PankajKumarKatiyar,让我检查一下
    • 尝试删除setMitmManagersetTrustAllServers。之后它也适用于我的 https 链接
    • 对不起,它不起作用,我在评论这些行后尝试了 browserMobProxy.setTrustAllServers(true); browserMobProxy.setMitmManager(ImpersonatingMitmManager.builder().trustAllServers(true).build());继续获取 - 此页面无法正常工作
    • 我想我过去可能已经做过一些证书设置,让我检查一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    相关资源
    最近更新 更多