NodeJS Puppeteer 页面,在(控制台,,不按预期工作

dddzy1tm  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(130)

我尝试在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 textjust some text 2。此外,如果我打开开发人员工具,当导航到Google时,我会在控制台中看到just some text 2,但当查看本地时,该文本不会显示在我的控制台中。
当在我的本地运行时,我在page.goto之后的节点控制台中得到2个输出:一个404问题,缺少一个favicon和一个DOM错误(密码字段存在于FORM标记之外),但任何其他对console.log的调用都不会显示在Node控制台中,它们也不会显示在开发人员工具控制台中(如果我去了Google,情况就不是这样了,我的日志会同时显示在Node和开发人员工具控制台中)。
AFAIK我运行Puppeteer的代码没有什么特别的,它只是一个基本的内部工具。

baubqpgj

baubqpgj1#

这其实不是人偶师的问题以前的开发人员编写了一个脚本,它覆盖了console.log的功能,而不是将内容发送到控制台,而是将内容发送到隐藏的DIV(除了其他一些东西)。该脚本导致浏览器控制台中不显示任何内容,因此在运行Puppeteer时不会显示。
由于各种原因,我不能改变脚本,这是导致问题的 puppet 。为了克服这个问题,我写了一个函数,它将日志记录到Node的控制台,然后通过exposeFunction在Puppeteer中提供。执行如下。

let nodeLogger = (msg: string) => {
    console.log(msg);
}

await page.exposeFunction("nodeLogger", nodeLogger);

await page.evaluate(async () => {
    await nodeLogger("Node test in eval");
    ...
});

相关问题