Node.js page.$eval函数在Puppeter中始终返回未定义

Node.js page.$eval函数在Puppeter中始终返回未定义,node.js,css-selectors,puppeteer,Node.js,Css Selectors,Puppeteer,我正在使用Puppeter和函数页。$(选择器)获取值。该函数返回错误“预期将| string |或| function |作为第一个参数,但得到的却是“undefined”。我已经在Chrome的控制台中测试了确切的选择器,它可以工作 const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser

我正在使用Puppeter和函数页。$(选择器)获取值。该函数返回错误“预期将| string |或| function |作为第一个参数,但得到的却是“undefined”。我已经在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();
})();
这里有什么问题?

使用第二个参数 (pageFunction-要在浏览器上下文中计算的函数)

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

页面.$eval(选择器,页面函数[,…参数])

  • 选择器(字符串)要查询页面的选择器
  • 要在浏览器上下文中计算的pageFunction(函数(元素))函数
  • …args(…可序列化的| JSHandle)参数传递给
    pageFunction
  • 返回:(Promise(Serializable))Promise,解析为
    pageFunction的返回值
尝试将代码更改为:

const puppeter=require('puppeter');
(异步()=>{
const browser=wait puppeter.launch();
const page=wait browser.newPage();
等待页面。转到('https://stackoverflow.com/“,{waitUntil:'networkidle0'});
试一试{
const elemText=wait page.$eval(“body>header>div>ol.list-reset.grid.gs4>li>a”,elem=>elem.innerText)
log('element innerText:',elemText)
}捕捉(错误){
console.log(错误)
}
等待浏览器关闭();
})();

这个答案确实帮助了我。感谢您发布它=]
await page.$eval(cssSelector, e => e.innerText);