如何在加载页面时获得孔响应

时间:2018-05-02 08:01:39

标签: puppeteer

当我使用page.todo('https://www.alipay.com/'并听取响应事件时,请使用page.on('response', res => {console.log(res)}),但没有回应。

但实际上加载页面时有一些http请求如下: info from chrome devTool

我应该如何获得这些要求&回应?

我注意到屏幕截图中的某些图片请求是在background-image这样的CSS样式代码中,这些请求是否可以在事件响应下收听' ?

这是我的代码:

'use strict';
const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');

const iPhone = devices['iPhone 6'];

(async () => {
  const browser = await initBrowser();
  const page = await openPage(browser, 'https://www.alipay.com');
  page.on('response', res => {
    console.log('response: ', res);
  });
  return browser.close();
})();

async function initBrowser() {
  return await puppeteer.launch({ headless: true });
}

async function openPage(browser, url) {
  const page = await browser.newPage();
  try {
    await page.emulate(iPhone);
    await page.goto(url);
  } catch (e) {
    console.log(e);
    page.close();
    return null;
  }
  return page;
}

2 个答案:

答案 0 :(得分:0)

要获取网页请求,您必须将page.setRequestInterception设置为true

然后在request事件中,每个请求都会被截获,并且可以被阻止或继续。

  const page = await browser.newPage();
  await page.setRequestInterception(true);
  page.on('request', interceptedRequest => {
    console.log(interceptedRequest.url()); // print out the request url
    interceptedRequest.continue(); // don't block the request
  });
  await page.goto('https://example.com');

答案 1 :(得分:0)

代码在导航到网址之前没有收听回复,page.on('request', res => console.log(res));应该在导航到网址之前设置。

const page = await browser.newPage();
page.on('request', res => console.log(res));
page = await openPage(page, url); // <-- pass in page here instead of browser
                                  // because page is now defined

如果上面发布的代码没有遗漏,那么在浏览器关闭之前它也没有时间查看请求。 await page.goto(url, {waitUntil: 'load'});

或者,如果在load事件被触发后还有其他请求结束,则需要找到另一种方法来等待响应。