我正在尝试运行一个非常简单的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}`)
})
答案 0 :(得分:0)
console.log(links)
在页面上下文中执行,因此links
在浏览器控制台中输出(如果在可见模式下启动Chrome并在关闭浏览器之前打开DevTools,则可以看到它)。如果需要在Node.js流程控制台中输出此值,则需要返回可序列化的值,获取它并在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();