java - 仅获取加载时间 >= 1 秒的请求/响应 Java 中的 BrowserMob

标签 java selenium-webdriver browsermob browsermob-proxy har

是否可以过滤来自加载时间 >=1 秒的 .HAR 的请求/响应?我需要将 har 对象保存到单独的文件中并上传到 har 查看器。下面是我生成 .HAR 文件的代码。

//BrowserMobProxy
        BrowserMobProxy server = new BrowserMobProxyServer();
        server.start(0);
        server.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
        server.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
        server.newHar("Bhaskar");

        //PHANTOMJS_CLI_ARGS
        ArrayList<String> cliArgsCap = new ArrayList<>();
        cliArgsCap.add("--proxy=localhost:"+server.getPort());
        cliArgsCap.add("--ignore-ssl-errors=yes");

        //DesiredCapabilities
        String userAgent = "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36";
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
        capabilities.setCapability("phantomjs.page.settings.userAgent", userAgent);
        capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
        capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,"D:/req/phantomjs-2.1.1-windows/bin/phantomjs.exe");

        //WebDriver
        WebDriver driver = new PhantomJSDriver(capabilities);
        driver.get("https://www.google.com");

        //HAR
        Har har = server.getHar();
        FileOutputStream fos = new FileOutputStream("D:\\HAR-Information.har");
        har.writeTo(fos);
        server.stop();
        driver.close();

最佳答案

您是否注意到 HAR 中的“计时” block ?

该对象描述请求-响应往返过程中的各个阶段。所有时间均以毫秒为单位指定。

"timings": {
    "blocked": 0,
    "dns": -1,
    "connect": 15,
    "send": 20,
    "wait": 38,
    "receive": 12,
    "ssl": -1,
    "comment": ""
}
  • blocked [数字,可选] - 在队列中等待的时间 网络连接。如果计时不适用于则使用-1 当前请求。

  • dns [数字,可选] - DNS 解析时间。所需时间 解析主机名。如果计时不适用于则使用-1 当前请求。

  • connect [数字,可选] - 创建 TCP 连接所需的时间。 如果计时不适用于当前请求,则使用 -1。

  • send [number] - 向服务器发送 HTTP 请求所需的时间。

  • wait [number] - 等待服务器的响应。收到 [number] - 从服务器读取整个响应所需的时间(或 缓存)。

  • ssl [数字,可选](1.2 中的新增功能)- SSL/TLS 所需的时间 谈判。如果定义了该字段,则还包括时间 在连接字段中(以确保与 HAR 1.1 向后兼容)。 如果计时不适用于当前请求,则使用 -1。

  • comment [字符串,可选](1.2 中新增)- 由 用户或应用程序。

发送、等待和接收计时不是可选的,并且必须具有非负值。

如果导出工具无法提供每个请求的阻止、dns、连接和 ssl 计时,则可以忽略它们。如果不适用,可以提供这些计时的工具可以将其值设置为 -1。例如,对于重新使用现有连接的请求,connect 将为 -1。

请求的时间值必须等于本节中提供的计时总和(不包括任何 -1 值)。

如果没有 -1 值,则以下必须为 true(条目是 log.entries 中的对象):

entry.time == entry.timings.blocked + entry.timings.dns + entry.timings.connect + entry.timings.send + entry.timings.wait + entry.timings.receive;

一旦获得完整的 HAR 对象,您就可以迭代 HAR 并计算每个元素的总项目,并删除那些时间 >1000ms 的项目。然后您可以将 HAR 对象保存到文件中。

关于java - 仅获取加载时间 >= 1 秒的请求/响应 Java 中的 BrowserMob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47483463/

相关文章:

protractor - 如何将 BrowserMob 代理与 Protractor 一起使用?

java - 我怎样才能清除不断增长的堆?

java - JPA 查询根据外键从不同表中获取数据

java - 分配的变量引用在哪里,在堆栈中还是在堆中?

c# - 将页面对象与 Selenium 结合使用时检查 WebElement 是否存在

java - Selenium 网络驱动程序 : Variable for different countries

java - Spring JDBC for SQL Server - 使用 SQLXML 数据类型会产生 SQLServerException : Implicit conversion from data type xml to nvarchar(max) is not allowed

java - 需要在 selenium webdriver 代码中使用代理捕获网络流量

javascript - 使用 BrowserMobProxy 配置 WebDriverIO

ruby - 在 ruby​​ 中为 selenium chrome 驱动程序设置代理