gma*_*man 5 javascript puppeteer
我一直看到这个错误代码
page.on('console', msg => console.log(msg.text()));
Run Code Online (Sandbox Code Playgroud)
这失败
console.log('Hello %s', 'World');
Run Code Online (Sandbox Code Playgroud)
产生
Hello World // browser
Hello %s World // puppeteer
Run Code Online (Sandbox Code Playgroud)
好,所以我想也许我可以做到
page.on('console', msg => console.log(...msg.args()));
Run Code Online (Sandbox Code Playgroud)
NOPE:那倒掉了一些巨大的JSHandle东西。
好吧,也许
page.on('console', msg => console.log(...msg.args().map(a => a.toString());
Run Code Online (Sandbox Code Playgroud)
NOPE:打印
JSHandle: Hello %s JSHandle: World
Run Code Online (Sandbox Code Playgroud)
我想我可以通过删除前9个字符来破解它。
我也试过
page.on('console', msg => console.log(...msg.args().map(a => a.jsonValue())));
Run Code Online (Sandbox Code Playgroud)
NOPE:打印
Promise { <pending> } Promise { <pending> }
Run Code Online (Sandbox Code Playgroud)
好吧
page.on('console', async(msg) => {
const args = Promise.all(msg.args().map(a => a.jsonValue()));
console.log(...args);
});
Run Code Online (Sandbox Code Playgroud)
不,那是打印
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)
Run Code Online (Sandbox Code Playgroud)
另一个去
page.on('console', async(msg) => {
const args = Promise.all(msg.args().map(async(a) => {
return await a.jsonValue();
}));
console.log(...args);
});
Run Code Online (Sandbox Code Playgroud)
和之前一样
UnhandledPromiseRejectionWarning: TypeError: Found non-callable @@iterator
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a
Run Code Online (Sandbox Code Playgroud)
我什至进行了跟踪,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)));
});
Run Code Online (Sandbox Code Playgroud)
但这显然是黑客,我希望它会在某个时候破解,因此需要寻找正确的解决方案。
page.on('console', async e => {
const args = await Promise.all(e.args().map(a => a.jsonValue()));
console.log(...args);
});
Run Code Online (Sandbox Code Playgroud)
或者
page.on('console', async e => {
const args = await Promise.all(e.args().map(a => a.jsonValue()));
console[e.type() === 'warning' ? 'warn' : e.type()](...args);
});
Run Code Online (Sandbox Code Playgroud)
作品