page.$eval puppeteer 中的函数总是返回 undefined



我正在使用puppeteer和函数page.$(selector(来获取值。该函数返回错误"预期获取 |string|或 |函数|作为第一个参数,但得到了"未定义"。 我已经在Chrome的控制台中测试了确切的选择器,它可以工作。

const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://stackoverflow.com/', {waitUntil: 'networkidle0'});
try {
const x = await page.$eval("body > header > div > ol.list-reset.grid.gs4 > li > a")
console.log(firstArticle.text())
} catch(err){
console.log(err)
}
console.log(x.text())
await browser.close();
})();

这里有什么问题?

函数 page.$eval(( 必须接收两个参数,但你只发送一个。请参阅方法签名:

page.$eval(selector, pageFunction[, ...参数](

  • 选择器(字符串(用于查询页面的选择器
  • pageFunction (function(Element(( 要在浏览器上下文中计算的函数
  • 。参数 (...可序列化|JSHandle(传递给pageFunction的参数
  • 返回
  • :(承诺(可序列化((解析为返回值pageFunction
  • 的承诺

尝试将代码更改为:

const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://stackoverflow.com/', {waitUntil: 'networkidle0'});
try {
const elemText = await page.$eval("body > header > div > ol.list-reset.grid.gs4 > li > a", elem => elem.innerText)
console.log('element innerText:', elemText)
} catch(err){
console.log(err)
}
await browser.close();
})();

使用第二个参数 (页面函数 - 要在浏览器上下文中评估的函数(

await page.$eval(cssSelector, e => e.innerText);

最新更新