如何获得完整页面加载的传输大小?

Qta*_*tax 9 javascript java firefox selenium selenium-webdriver

使用Selenium或JavaScript,您如何获得(通过网络)已加载页面的传输大小(字节),包括所有内容,图像,css,js等?

首选大小是通过网络传输的大小,即压缩的大小,仅用于发出的请求等.

这是您通常可以在开发工具中看到的,在网络状态栏的右侧: Firefox>开发者工具>网络>状态栏

 

如果那是不可能的,那么只需要获得所有已加载资源的总大小(没有压缩等)吗?那将是一个可以接受的选择.

浏览器是Firefox,但如果可以使用其他一些兼容的Selenium浏览器也可以接受.

 

我想这可以使用代理完成,但有没有任何JS或Selenium方式来获取这些信息?

如果代理是唯一的方法,哪一个人可以使用(或实现)来保持这样的任务简单?在设置驱动程序之前用Java实现一些东西?

(该解决方案至少应该在Linux上运行,但最好也适用于Windows.我通过Java使用Selenium WebDriver.)

Hak*_*llo 5

为了将来参考,可以通过 JavaScript 从浏览器请求此信息。然而,在撰写本文时,还没有浏览器支持此特定数据的此功能。更多信息可以在这里找到

同时,对于 Chrome,您可以从性能日志中解析此信息。

    //Enable performance logging
    LoggingPreferences logPrefs = new LoggingPreferences();
    logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
    capa.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

    //Start driver
    WebDriver driver = new ChromeDriver(capa);
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样获取这些数据

for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
        if(entry.getMessage().contains("Network.dataReceived")) {
            Matcher dataLengthMatcher = Pattern.compile("encodedDataLength\":(.*?),").matcher(entry.getMessage());
            dataLengthMatcher.find();
            //Do whatever you want with the data here.
        }
Run Code Online (Sandbox Code Playgroud)

如果像您的情况一样,您想了解单个页面加载的具体信息,您可以使用加载前和加载后时间戳,并且仅获取该时间范围内的条目。


Dav*_*ave 5

Hakello 的答案中提到的性能 API 现在得到了很好的支持(除了 IE 和 Safari 之外),并且使用起来很简单:

return performance
  .getEntriesByType("resource")
  .map((x) => x.transferSize)
  .reduce((a, b) => (a + b), 0);
Run Code Online (Sandbox Code Playgroud)

您可以运行该脚本来executeScript获取自上次导航事件以来下载的字节数。无需设置或配置。