Puppeteer:如何听取具体的回应?

Ale*_*x29 7 node.js puppeteer

我正在修补无头镀铬节点api puppeteer.

我想知道如何倾听特定的请求响应以及如何采取行动.

我查看了事件requestfinish,response但它给了我在页面中已经执行的所有请求/响应.

我怎样才能实现评论行为?

谢谢 !

小智 16

一种选择是执行以下操作:

  page.on('response', response => {
    if (response.url().endsWith("your/match"))
      console.log("response code: ", response.status());
      // do something here
  });
Run Code Online (Sandbox Code Playgroud)

这仍然可以捕获所有请求,但允许您过滤并处理事件发射器.

https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#event-response


Ily*_*Zub 9

由于木偶师v1.6.0(我猜)你可以使用page.waitForResponse(urlOrPredicate[, options])

文档中的示例用法:

const firstResponse = await page.waitForResponse('https://example.com/resource');
const finalResponse = await page.waitForResponse(response =>
  response.url() === 'https://example.com' && response.status() === 200
);
return finalResponse.ok();
Run Code Online (Sandbox Code Playgroud)


sto*_*nth 7

过滤后的响应(最多等待 11 秒)正文解析为 JSON,每次调用时都会使用最初请求的PATCHPOST方法:

const finalResponse = await page.waitForResponse(response => 
  response.url() === urlOfRequest 
  && (response.request().method() === 'PATCH' 
  || response.request().method() === 'POST'), 11);
let responseJson = await finalResponse.json();
console.log(responseJson);
Run Code Online (Sandbox Code Playgroud)