如何使用Puppeteer获取请求的原始下载大小?

时间:2018-01-15 12:46:52

标签: javascript puppeteer

即,所有资源(包括视频/媒体)下载的数据总量,与Chrome DevTools的“网络”标签返回的数据类似。

4 个答案:

答案 0 :(得分:3)

自2018年1月开始,似乎没有任何方法可以使用所有资源类型(监听console.log(result);事件fails for videos),并正确统计压缩资源。< / p>

最佳解决方法似乎是监听response事件,并手动处理事件:

Network.dataReceived

答案 1 :(得分:1)

如果使用的是puppeteer,则有服务器端节点...为什么不通过流将请求通过管道传输,然后计算内容大小?

还有https://github.com/watson/request-stats

您可能还想致电page.waitForNavigation,因为您可能正在努力解决异步计时问题

答案 2 :(得分:1)

@mjs 的解决方案即使在 2021 年也能完美运行。只需更换:

page._networkManager -> page._frameManager._networkManager

对我有用的完整示例:

const resources = {};
page._client.on('Network.dataReceived', (event) => {
  const request = page._frameManager._networkManager._requestIdToRequest.get(
    event.requestId
  );
  if (request && request.url().startsWith('data:')) {
    return;
  }
  const url = request.url();
  const length = event.dataLength;
  if (url in resources) {
    resources[url] += length;
  } else {
    resources[url] = length;
  }
});

await page.goto('https://stackoverflow.com/questions/48263345/how-can-i-get-the-raw-download-size-of-a-request-using-puppeteer');

const totalUncompressedBytes = Object.values(resources).reduce((a, n) => a + n, 0);
console.log(totalUncompressedBytes);

答案 3 :(得分:0)

const imgaes_width =等待页面。$$ eval('img',锚=> [] .map.call(anchors,img => img.width));     const imgaes_height =等待页面。$$ eval('img',锚=> [] .map.call(anchors,img => img.height));