当前位置: 首页 > 知识库问答 >
问题:

通过selenium中的browsermob代理运行时,Har文件总是返回空

阙庆
2023-03-14

我试图通过browsermob代理读取selenium重播期间遍历的页面源,但我总是得到一个空的har文件。

Selenium 3.141 BrowserMob-Core 2.1.5 jar

下面是我的代码。

如果我设置

WebDriver驱动程序=新ChromeDriver(选项);页面已加载

WebDriver驱动程序=新的ChromeDriver(功能);页加载失败,返回页未加载

根据日志,代理正在正确启动

/****************************************/

[RemoteTestNG]检测到TestNG版本6.14.3

SLF4J:无法加载类“org.slf4j.impl.StaticloggerBinder”。

SLF4J:默认为无操作(NOP)记录器实现

SLF4J:请参阅http://www.slf4j.org/codes.html#staticloggerbinder了解更多详细信息。

net.lightbody.bmp.BrowserMobProxyServer@61322F9DBrowserMobProxy 59858IS端口号

代理(手动,HTTP=10.88.16.64:59858,SSL=10.88.16.64:59858)硒代理

/******************************************/

任何建议都会有帮助。

public void test() throws Exception 
    {

        BrowserMobProxy proxy = getProxyServer(); //getting browsermob proxy
        System.out.println(proxy+"BrowserMobProxy");
        Proxy seleniumProxy = getSeleniumProxy(proxy);
        System.out.println(seleniumProxy+"seleniumProxy");
        DesiredCapabilities capabilities = new DesiredCapabilities().chrome();


        capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
        capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        System.setProperty("webdriver.chrome.driver", "C:\\APMWS\\testmvnproject\\src\\drivers\\chromedriver76.exe");
         ChromeOptions options = new ChromeOptions();
         WebDriver driver = new ChromeDriver(options);

        proxy.newHar(); // creating new HAR
        driver.get("https://google.com");
        driver.navigate().to("https://pizzahut.com"); //example

        List<HarEntry> entries = proxy.getHar().getLog().getEntries();
        for (HarEntry entry : entries) 
        {
            HarRequest request = entry.getRequest();
            HarResponse response = entry.getResponse();
            System.out.println(request.getUrl()+" : "+response.getStatus()+","+entry.getTime()+"ms");
        }
    proxy.stop();
    driver.close();
    }

    public Proxy getSeleniumProxy(BrowserMobProxy proxyServer) 
    {
        Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxyServer);
        System.out.println(seleniumProxy.getHttpProxy());
    try
    {
        String hostIp = Inet4Address.getLocalHost().getHostAddress();
        System.out.println(hostIp);
        seleniumProxy.setHttpProxy(hostIp + ":" + proxyServer.getPort());
        seleniumProxy.setSslProxy(hostIp + ":" + proxyServer.getPort());
        System.out.println(proxyServer.getPort()+"is port number");
    } 
    catch (UnknownHostException e) 
    {
        e.printStackTrace();
        System.out.println("invalid host");
    }
    return seleniumProxy;
}

public BrowserMobProxy getProxyServer() 
{
    BrowserMobProxy proxy = new BrowserMobProxyServer();
    proxy.setTrustAllServers(true);
    proxy.start(0);
    return proxy;
}

预期结果:将通过代理运行的跟踪写入HAR文件

实际结果:代理被设置,页面被启动,但是HAR文件是空的。

共有1个答案

满自明
2023-03-14

您可以删除以下内容:slf4j:未能加载类“org.slf4j.impl.staticloggerbinder”。

如果您正在运行Maven,只需将其放入POM文件中即可。

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.25</version>
  <scope>test</scope>
</dependency>

这就是我在Chrome中启动Har文件的方式。

  // start the proxy
        proxy = new BrowserMobProxyServer();
        proxy.start(0);
        // get the Selenium proxy object
        org.openqa.selenium.Proxy seleniumProxy = 
        ClientUtil.createSeleniumProxy(proxy);
        ChromeOptions options = new ChromeOptions();
        options.setCapability(CapabilityType.PROXY, seleniumProxy);
        options.setExperimentalOption("useAutomationExtension", false);
        options.addArguments("--start-maximized");
        driver = new ChromeDriver(options);
 类似资料:
  • 我开始在Selenium上写一些测试,并认为如果我能在登录我们的网站时获得性能指标,那就太好了。我遇到了BrowserMob-Proxy。我开始从Lightbody的github页面复制前五行,我已经得到了错误消息:“ProxyServer无法解析为类型”和“代理无法解析为类型”。 谁能告诉我这里还缺什么吗? 这是pom。xml: 在这个类中,我试图让方法“开始”和“结束”(“开始”还没有完成,我

  • 我想在所有浏览器上自动化Web应用程序。我的代码运行正常,铬,火狐,但当我尝试它在边缘,它显示ssl证书错误。 if((browser.equalsIgnoreCase(“边缘”)){ //DesiredCapabilities=新DesiredCapabilities();//能力。setCapability(CapabilityType.PROXY,PROXY);

  • 我写了一个简单的Selenium测试(打开一个页面)的安全网站在无头模式使用Chrome59测试版。 我在执行代码时遇到以下异常。初始化驱动程序时引发异常 当我在注释了headless选项(options.addArguments(“headless”)后重新运行脚本时,它显示了Chrome并运行良好,但我的目标是将其作为headless运行。你能谈谈你对解决我的问题的看法吗? 例外:在端口497

  • 问题内容: 我面临着Java6 / 8的奇怪行为。我尝试通过需要基本用户身份验证的代理进行隧道传输。通过标准的Java身份验证器执行此操作。如果我尝试访问https网址作为第一个网址,则会引发异常: java.io.IOException:无法通过代理隧道。代理返回“需要HTTP / 1.1 407代理身份验证” 但是,如果我先访问http URL,然后再访问https URL,则https访问正

  • 我之前做过,但现在无法通过selenium使用chrome。浏览器打开几秒钟后关闭,然后出现错误(大约5分钟后): 我使用以下代码运行浏览器(我一直使用): ChromeDrive目录位于PATH中。你可以在错误中看到的chrome和chrome驱动程序的版本。Python 3.7.0,硒==3.14.0。我的行为有什么问题? 顺便说一句,它可以与Firefox配合使用

  • 问题内容: 在程序中使用用户身份验证的代理的最佳/最简便方法是什么?我目前有这个,但是打开浏览器时我需要输入用户名和密码。 问题答案: 您可以使用Proxy Auto auth插件实现相同的功能 使用以下扩展程序下载扩展程序 https://chrome.google.com/webstore/detail/get- crx/dijpllakibenlejkbajahncialkbdkjc/rel