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

时间:2017-08-22 15:46:07

标签: node.js puppeteer

我正在修补名为puppeteer的无头镀铬节点api。

我想知道如何倾听特定的请求回复以及如何采取行动。

我查看了事件requestfinishresponse,但它为我提供了所有已在页面中执行的请求/回复。

如何实现评论行为?

谢谢!

5 个答案:

答案 0 :(得分:10)

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

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

这仍会捕获所有请求,但允许您过滤并处理事件发射器。

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

答案 1 :(得分:2)

每次调用该请求时,都会使用以下最初请求的 PATCH POST 方法将

过滤后的响应(最多等待11秒)正文解析为JSON,

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

答案 2 :(得分:0)

我正在使用jest-puppeteer并尝试测试我的测试服务器的特定响应代码。 page.goto() resolves to the response of the original request

这是一个简单的测试,可以在预期时返回404响应。

describe(`missing article page`, () => {
    let response;
    beforeAll(async () => {
        response = await page.goto('http://my-test-server/article/this-article-does-not-exist')
    })
    it('has an 404 response for missing articles', () => {
        expect(response.status()).toEqual(404)
    })

    it('has a footer', async () => {
        await expect(page).toMatch('My expected footer content')
    })
})

答案 3 :(得分:0)

由于操纵up 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();

答案 4 :(得分:0)

要获得 xhr 响应,只需执行以下操作:

const firstResponse = await page.waitForResponse('https://example.com/resource')

// the NEXT line will extract the json response

console.log( await firstResponse.json() )