Как распечатать консольный вывод страницы в Puppeter, как это будет выглядеть в браузере? - PullRequest
4 голосов
/ 25 сентября 2019

Я постоянно вижу этот НЕПРАВИЛЬНЫЙ КОД

page.on('console', msg => console.log(msg.text()));

, который FAILS

console.log('Hello %s', 'World');

производит

Hello World     // browser
Hello %s World  // puppeteer

Ладно, я подумал, что, может быть, я смогу сделать это

page.on('console', msg => console.log(...msg.args()));

НОПЕ: Это выбрасывает какую-то гигантскую вещь JSHandle.

Ладно, может быть,

page.on('console', msg => console.log(...msg.args().map(a => a.toString());

NOPE: Это печатает

JSHandle: Hello %s JSHandle: World

Полагаю, я могу взломать его, удалив первые 9 символов.

Я также попытался

page.on('console', msg => console.log(...msg.args().map(a => a.jsonValue())));

NOPE: Это печатает

Promise { <pending> } Promise { <pending> }

Хорошо, как насчет

page.on('console', async(msg) => {
  const args = Promise.all(msg.args().map(a => a.jsonValue()));
  console.log(...args);
});

Нет, это печатает

UnhandledPromiseRejectionWarning: TypeError: Found non-callable @@iterator
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 95)

Еще один ход

page.on('console', async(msg) => {
  const args = Promise.all(msg.args().map(async(a) => {
    return await a.jsonValue();
  }));
  console.log(...args);
});

такой же, как раньше

UnhandledPromiseRejectionWarning: TypeError: Found non-callable @@iterator
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a 

Я даже проследил через msg.text(), но все, что он делает, это возвращает готовую строку, так что уже слишком поздно ее использовать.

Как получить тот же вывод, что и console.log браузера в puppeteer?


PS: как уже упоминалось выше, этот хак работает в puppeteer 1.20.0

  page.on('console', (msg) => {
    console.log(...msg.args().map(v => v.toString().substr(9)));
  });

но это явно взлом, и я ожидаю, что он сломается в какой-то момент, поэтому ищу правильное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...