Как в Puppeteer записать журнал браузера Chrome в консоли - PullRequest
2 голосов
/ 06 мая 2020

Я пытаюсь собрать Chrome журналов браузера: предупреждения браузера, такие как устаревание и вмешательства. Например, для сайта https://uriyaa.wixsite.com/corvid-cli2:

A cookie associated with a cross-site resource at http://wix.com/ was set without the `SameSite` attribute.
A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`.
You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.

Я думал, что следующий код сработает, но он захватывает только журналы, созданные кодом страницы.

(async ()=> {
    const browser = await puppeteer.launch({dumpio: true});
    const page = await browser.newPage();
    page.on('console', msg => {
        for (let i = 0; i < msg._args.length; ++i)
            console.log(`${i}: ${msg._args[i]}`);
    });
    await page.goto('https://uriyaa.wixsite.com/corvid-cli2', {waitUntil: 'networkidle2', timeout: 20000});
    await page.screenshot({path: 'screenshot.png'});
    await browser.close();
})();

ниже не имеет значения, поскольку я думал, что reportobserver не улавливает chrome информацию о файлах cookie без SameSite: чтение по этой теме привело меня к https://developers.google.com/web/updates/2018/07/reportingobserver, но я не уверен, как использовать это, используя пример int, консоль браузера не работала.

Я не уверен, в каком контексте следует использовать код наблюдателя или нужен ли браузеру флаг для активации API отчетов. Или, если это способ решить эту проблему.

помощь приветствуется.

1 Ответ

1 голос
/ 10 мая 2020

Предположительно, событие 'console' улавливает только console.log() и подобные вызовы со страниц. Но, похоже, вы можете поймать предупреждения из браузера через CDPSession с Log Domain . К сожалению, у меня работает только с заголовком браузера:

'use strict';

const puppeteer = require('puppeteer');

(async function main() {
  try {
    const browser = await puppeteer.launch({ headless: false });
    const [page] = await browser.pages();
    const cdp = await page.target().createCDPSession();

    await cdp.send('Log.enable');

    cdp.on('Log.entryAdded', async ({ entry }) => {
      console.log(entry);
    });

    await page.goto('https://uriyaa.wixsite.com/corvid-cli2');
  } catch (err) {
    console.error(err);
  }
})();

и одной из записей:

{
  source: 'other',
  level: 'warning',
  text: 'A cookie associated with a cross-site resource at http://www.wix.com/ was set without the `SameSite` attribute. It has been blocked, as Chrome now only delivers cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.',
  timestamp: 1589058118372.802,
  url: 'https://uriyaa.wixsite.com/corvid-cli2'
}
...