你可以args
从JSHandle
与await
它。
对我来说最好的方法是描述来自浏览器的错误并捕获所需类型的console
通知:
import { ConsoleMessage, Page, JSHandle } from 'puppeteer';
const chalk = require('chalk');
export const listenPageErrors = async (page: Page) => {
// make args accessible
const describe = (jsHandle) => {
return jsHandle.executionContext().evaluate((obj) => {
// serialize |obj| however you want
return `OBJ: ${typeof obj}, ${obj}`;
}, jsHandle);
}
const colors: any = {
LOG: chalk.grey, // (text: any) => text,
ERR: chalk.red,
WAR: chalk.yellow,
INF: chalk.cyan,
};
// listen to browser console there
page.on('console', async (message: ConsoleMessage) => {
const args = await Promise.all(message.args().map(arg => describe(arg)));
// make ability to paint different console[types]
const type = message.type().substr(0, 3).toUpperCase();
const color = colors[type] || chalk.blue;
let text = '';
for (let i = 0; i < args.length; ++i) {
text += `[${i}] ${args[i]} `;
}
console.log(color(`CONSOLE.${type}: ${message.text()}\n${text} `));
});
}
把它放在const page = await browser.newPage();
和之间page.goto(URL)
,它会正常工作
const page = await browser.newPage();
await listenPageErrors(page); // <- like there
page.goto(URL)