Я постоянно вижу этот НЕПРАВИЛЬНЫЙ КОД
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)));
});
но это явно взлом, и я ожидаю, что он сломается в какой-то момент, поэтому ищу правильное решение.