Как мне отслеживать ответы на POST запросы в Puppeteer?

Как улучшить вывод данных при использовании waitForResponse в puppeteer на JavaScript, чтобы получать более полезную информацию, а не только "CdpHTTPResponse {}"?
  • 2 ноября 2023 г. 20:28
Ответы на вопрос 1
Для отслеживания ответов на POST запросы в Puppeteer вы можете использовать метод `page.waitForResponse()`. Вот пример, как это можно сделать:

```javascript
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.setRequestInterception(true);

  page.on('request', request => {
    // Если это POST запрос, то отслеживаем его ответ
    if (request.method() === 'POST') {
      request.continue();
      page.waitForResponse(response => {
        // Здесь можно добавить логику для вывода нужной информации
        console.log(response);
        return response.request() === request;
      });
    } else {
      request.continue();
    }
  });

  await page.goto('https://www.example.com');
  
  // Здесь идет выполнение POST запроса, который будет отслеживаться
  await page.evaluate(() =>
    fetch('https://www.example.com/api', {
      method: 'POST',
      body: JSON.stringify({ data: 'example' }),
      headers: { 'Content-Type': 'application/json' },
    })
  );
  
  await browser.close();
})();
```

Чтобы улучшить вывод данных при использовании `waitForResponse()` и чтобы получать более полезную информацию, вы можете использовать методы и свойства CDP (Chrome DevTools Protocol). Например, вы можете использовать `response.headers()`, чтобы получить заголовки ответа, или `response.text()`, чтобы получить тело ответа в виде текста. Вот пример улучшенного вывода данных:

```javascript
page.waitForResponse(response => {
  console.log('Status:', response.status()); // Вывод статуса ответа
  console.log('URL:', response.url()); // Вывод URL запроса
  console.log('Headers:', response.headers()); // Вывод заголовков ответа
  response.text().then(body => console.log('Body:', body)); // Вывод тела ответа
  return response.request() === request;
});
```

Вы можете дополнить этот код для логирования и вывода нужной информации в удобном для вас формате.
Похожие вопросы