Puppeteer 如何拦截多个请求

Posted

技术标签:

【中文标题】Puppeteer 如何拦截多个请求【英文标题】:Puppeteer how to intercept multiple requests 【发布时间】:2022-01-22 08:06:02 【问题描述】:

我想拦截多个请求,但找不到可行的解决方案。

    中止对请求 1 的样式表和图像的所有请求 在循环中为请求 2 注入 POST 请求负载

据我所知,我只能有一个请求拦截器?!

目前我的拦截器正在循环中将有效负载拦截到 POST 请求中。

const siteResponse = await page.goto(siteUrl,  waitUntil: 'load', timeout: 0 );
...

for (var item of items) 

  const payload =  prop: item ;
  
  await page.setRequestInterception(true);
  page.once('request', request => 
      
      request.continue(
          'method': 'POST',
          'postData': JSON.stringify(payload),
          'headers':  ...request.headers()
      );
        
      page.setRequestInterception(false);
  );

  const addItemResponse = await page.goto(addItemUrl,  waitUntil: 'load', timeout: 0 );

这很有效。但我无法拦截请求 1 以中止对样式表和图像的请求。

任何想法如何设计代码以拦截带有有效负载的循环中的请求并中止第一个请求的样式表和图像请求?

【问题讨论】:

【参考方案1】:

您的问题对我来说并不完全清楚,但听起来您可能想进一步探索 puppeteer 中的请求拦截。 Here 是 puppeteer 关于请求拦截的官方文档。他们实际上提供了一个示例,似乎非常接近您想要的实现。

如果无法通过请求拦截接口获取您要查找的内容,您还可以使用 Chrome DevTools 协议来挖掘更多请求数据。我之前回答过一个问题,here。

【讨论】:

以上是关于Puppeteer 如何拦截多个请求的主要内容,如果未能解决你的问题,请参考以下文章

拦截请求

Puppeteer模拟浏览器时禁止图片加载

如何打印 puppeteer 发送的原始 devtools 请求?

javascript 使用chrome和puppeteer拦截响应

如何在多个文件中运行 Jest-Puppeteer 测试

使用CucumberJS / Puppeteer,如何使用多个场景扩展Page对象?