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

时间:2014-12-15 18:18:07

标签: java javascript firefox selenium selenium-webdriver

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

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

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

如果那是不可能的,那么可以只获得所有已加载资源的总大小(没有压缩等)吗?这将是一个可以接受的替代方案。

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

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

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

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

4 个答案:

答案 0 :(得分:3)

为了将来参考,可以通过javascript从浏览器请求此信息。但是,在撰写本文时,尚未有任何浏览器支持此功能。 More information can be found here

与此同时,对于Chrome,您可以从效果日志中解析此信息。

lblTimer.Text = name;

然后您可以像这样获取此数据

    //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);

如果您希望了解单个页面加载的具体内容,则可以使用预加载和后加载时间戳,并仅在该时间范围内获取条目。

答案 1 :(得分:2)

是的,你可以使用BrowserMobProxy来做到这一点。这是一个java jar,它使用selenium Proxy来跟踪来自客户端的网络流量。           喜欢页面加载持续时间,查询字符串到不同的服务等           你可以得到它bmp.lightbody.net。这个api将创建.har文件,它们将包含您可以使用的json格式的所有这些信息           在线工具http://www.softwareishard.com/har/viewer/

答案 2 :(得分:2)

我已经在Python中实现了这一目标,这可以节省一些时间。要设置日志记录:

logging_prefs = {'performance' : 'INFO'}    
caps = DesiredCapabilities.CHROME.copy()
caps['loggingPrefs'] = logging_prefs
driver = webdriver.Chrome(desired_capabilities=caps)

要计算总数:

total_bytes = []
for entry in driver.get_log('performance'):
        if "Network.dataReceived" in str(entry):
            r = re.search(r'encodedDataLength\":(.*?),', str(entry))
            total_bytes.append(int(r.group(1)))
            mb = round((float(sum(total_bytes) / 1000) / 1000), 2)

答案 3 :(得分:2)

Hakello的答案中提到的性能API现已得到很好的支持(除IE和Safari之外的所有产品),并且易于使用:

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

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