傀儡师。 Page.evluate() 不是 运行 或没有得到结果

Puppeteer. Page.evluate() is not running or not getting results

我正在尝试 运行 Pupeteer 的一个非常简单的例子。但是在 page.evalute() 方法中什么也没发生,没有错误,没有结果。我做错了什么?

const puppeteer = require("puppeteer");
    module.exports = class zrGrabber {
        async startGrabbing() {
            try {
                const browser = await puppeteer.launch();
                const page = await browser.newPage();
                await page.goto('https://www.zr.ru/news/avtomobili/');
                await page.evaluate(() => {
                    const links = document.querySelectorAll(`div.head > h2 > a`)
                    console.log(links)
                });
                browser.close();
            } catch (err) {
                console.log(err)
            }
        }
    }

这就是 运行在 Node 上的表现:

const http = require('http');
const port = 3000;
const cron = require('node-cron');
const zrGrabber = require('./grabbers/zr.grabber');

const requestHandler = (request, response) => {
    response.end('Hello Node.js Server!')
}
const server = http.createServer(requestHandler)
server.listen(port, (err) => {
    cron.schedule('* * * * *', async () => {
        const zr = new zrGrabber();
        await zr.startGrabbing();
    });
    if (err) {
        return console.log('something bad happened', err)
    }
    console.log(`server is listening on ${port}`)
})

console.log(links)是在页面上下文中执行的,所以links是在浏览器控制台输出的(如果你在可见模式下启动Chrome并打开DevTools就可以看到它在关闭浏览器之前)。如果你需要这个在Node.js进程控制台中输出,你需要return可序列化的值,获取它并在Node.js上下文中管理它:

                const links = await page.evaluate(() => {
                    const links = document.querySelectorAll(`div.head > h2 > a`);
                    return [...links].map(link => link.href);
                });
                console.log(links);
                browser.close();