我怎样才能在page.log内部调度一些东西,将它传递给节点并在评估页面时使用它?
我实际上想将page.evaluate的进度记录到控制台并向用户显示一些结果.
我正在使用puppeteer获取一个页面,该页面在浏览器控制台中有一些错误,但是所有控制台消息都没有触发puppeteer的控制台事件.
puppeteer chromium浏览器显示多个控制台消息

但是,puppeteer只有控制台在节点中记录一件事

这是我目前使用的脚本:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.on('console', msg => console.log('PAGE LOG:', msg.text));
await page.goto('https://pagewithsomeconsoleerrors.com');
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
编辑:正如我在下面的评论中所述,我确实尝试了Everettss推荐但不起作用的page.waitFor(5000)命令.
Edit2:msg.text意外删除了传播操作员.
Edit3:我在github上用类似但不同的示例屏幕截图打开了一个问题:https://github.com/GoogleChrome/puppeteer/issues/1512
我试图从失败的请求和js错误中收集数据.
我正在使用以下网站:https://nitzani1.wixsite.com/marketing-automation/3rd-page
该网站要求https://api.fixer.io/1latest,其返回状态代码404,
该页面还包含以下js错误:
"Uncaught (in promise) Fetch did not succeed"
Run Code Online (Sandbox Code Playgroud)
我试图编写下面的代码以捕获404和js错误,但不能.不确定我做错了什么,有什么想法如何解决它?
const puppeteer = require('puppeteer');
function wait (ms) {
return new Promise(resolve => setTimeout(() => resolve(), ms));
}
var run = async () => {
const browser = await puppeteer.launch({
headless: false,
args: ['--start-fullscreen']
});
page = await browser.newPage();
page.on('error', err=> {
console.log('err: '+err);
});
page.on('pageerror', pageerr=> {
console.log('pageerr: '+pageerr);
});
page.on('requestfailed', err => console.log('requestfailed: '+err));
collectResponse = [];
await page.on('requestfailed', rf => { …Run Code Online (Sandbox Code Playgroud) 我一直看到这个错误代码
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 …Run Code Online (Sandbox Code Playgroud)