阻止对 puppeteer 的视频请求

gdo*_*ica 1 javascript google-chrome node.js html5-video puppeteer

我想阻止(中止)对视频资源的所有请求,如何使用 puppeteer 实现它?

我看到文档中有一个例子:

中止所有图像请求的简单请求拦截器示例:

page.on('request', interceptedRequest => {
    if (interceptedRequest.url().endsWith('.png') || interceptedRequest.url().endsWith('.jpg'))
      interceptedRequest.abort();
    else
      interceptedRequest.continue();
});
Run Code Online (Sandbox Code Playgroud)

但我似乎找不到有关如何阻止视频的示例。
只有响应标头表示content-type,我不想白白浪费带宽。

gdo*_*ica 7

很好的问题,我自己也有同样的问题。

主要问题是视频 URL 不必以特定的后缀结尾,实际上它们在许多网站(例如 YouTube)上都没有。

但是有这个功能:

request.resourceType ()

包含渲染引擎所感知的请求资源类型。ResourceType 将是以下之一:文档、样式表、图像、媒体、字体、脚本、texttrack、xhr、fetch、事件源、websocket、清单、其他。

有点谷歌搜索并找到了这个MDN

媒体

<video>or <audio>元素加载的资源 。

而且我也不介意阻止音频请求(感谢上帝,它们不在普通网页中使用......)

最终这就是我最终做的事情:

page.on('request', request => {
  const url = request.url().toLowerCase()
  const resourceType = request.resourceType()
  
  if (resourceType == 'media' ||
    url.endsWith('.mp4') ||
    url.endsWith('.avi') ||
    url.endsWith('.flv') ||
    url.endsWith('.mov') ||
    url.endsWith('.wmv')) {
    
    console.log(`ABORTING: video`)
    request.abort();
  }
  else
    request.continue();
})
Run Code Online (Sandbox Code Playgroud)

  • 很确定你还需要 `await page.setRequestInterception(true);` (4认同)