我一直看到这个错误的代码
page.on('console', msg => console.log(msg.text()));
这失败
console.log('Hello %s', 'World');
产生
Hello World // browser
Hello %s World // puppeteer
好的,所以我想也许我可以这样做
page.on('console', msg => console.log(...msg.args()));
NOPE:这会抛出一些巨大的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()
但它所做的只是返回一个预制的字符串,所以现在使用它为时已晚。
如何在 puppeteer 中获得与浏览器的 console.log 相同的输出?
PS:如上所述,这个hack适用于puppeteer 1.20.0
page.on('console', (msg) => {
console.log(...msg.args().map(v => v.toString().substr(9)));
});
但这显然是一个黑客行为,我预计它会在某个时候中断,因此正在寻找正确的解决方案。