Как я могу получить отклик дыры при загрузке страницы - PullRequest
0 голосов
/ 02 мая 2018

когда я использую page.todo('https://www.alipay.com/' и слушаю ответное событие, используйте page.on('response', res => {console.log(res)}) ответа нет.

Но на самом деле при загрузке страницы есть несколько http запросов: информация от Chrome DevTool

Как мне получить эти запрос и ответ?

Я заметил, что некоторые из запросов pic на скриншоте выполнены в коде стиля CSS, например background-image, эти запросы не могут прослушиваться при событии 'response'?

Вот мой код:

'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 голосов
/ 06 мая 2018

Код не прослушивает ответы до тех пор, пока он не перейдет по URL, page.on('request', res => console.log(res)); должен быть установлен до того, как перейдет по URL.

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, вам нужно найти другой способ ожидания ответов.

0 голосов
/ 03 мая 2018

Чтобы получить запросы страницы, вы должны установить 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...