我尝试在page.evaluate
内部使用console.log
,以便将信息记录到Node的控制台。关于pptr.dev的指南提供了以下代码片段
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
await page.evaluate(() => console.log(`url is ${location.href}`));
这段代码通常可以工作,但我在本地机器上测试时遇到了一个问题,console.log
似乎停止工作。下面是我正在运行的代码:
import puppeteer from 'puppeteer';
async function run() {
const puppeterOptions = {
headless: false,
executablePath: 'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe'
};
const browser = await puppeteer.launch(puppeterOptions);
const page = await browser.newPage();
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
await page.evaluate(() => {
console.log("just some text");
});
await page.goto('https://localhost');
await page.evaluate(() => {
console.log("just some text 2");
});
await browser.close();
}
run();
在本例中,just some text
将输出到Node控制台,但just some text 2
不会。更令人沮丧的是,如果我将https://localhost
更改为类似https://www.google.com
的代码,代码将按预期工作,并且我在Node控制台中看到just some text
和just some text 2
。此外,如果我打开开发人员工具,当导航到Google时,我会在控制台中看到just some text 2
,但当查看本地时,该文本不会显示在我的控制台中。
当在我的本地运行时,我在page.goto
之后的节点控制台中得到2个输出:一个404问题,缺少一个favicon和一个DOM错误(密码字段存在于FORM标记之外),但任何其他对console.log
的调用都不会显示在Node控制台中,它们也不会显示在开发人员工具控制台中(如果我去了Google,情况就不是这样了,我的日志会同时显示在Node和开发人员工具控制台中)。
AFAIK我运行Puppeteer的代码没有什么特别的,它只是一个基本的内部工具。
1条答案
按热度按时间baubqpgj1#
这其实不是人偶师的问题以前的开发人员编写了一个脚本,它覆盖了
console.log
的功能,而不是将内容发送到控制台,而是将内容发送到隐藏的DIV(除了其他一些东西)。该脚本导致浏览器控制台中不显示任何内容,因此在运行Puppeteer时不会显示。由于各种原因,我不能改变脚本,这是导致问题的 puppet 。为了克服这个问题,我写了一个函数,它将日志记录到Node的控制台,然后通过
exposeFunction
在Puppeteer中提供。执行如下。