node.js - puppeteer 中的 page.$eval 函数始终返回未定义

标签 node.js css-selectors puppeteer

我正在使用 puppeteer 和函数 page.$(selector) 来获取值。该函数返回错误“预期获取 |string| 或 |function| 作为第一个参数,但结果却是“未定义”。”我已经在 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[, ...args])

  • selector (string) A selector to query page for
  • pageFunction (function(Element)) Function to be evaluated in browser context
  • ...args (...Serializable|JSHandle) Arguments to pass to pageFunction
  • returns: (Promise(Serializable)) Promise which resolves to the return value of 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();
})();

关于node.js - puppeteer 中的 page.$eval 函数始终返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57929480/

相关文章:

css - 选择器的部分和部分的正确术语和单词

jquery-selectors - 在用户脚本中,使用 querySelector() 与 jQuery 的 $() 有什么优势吗?

amazon-web-services - 上传到 S3 时触发 Lambda 函数然后等待其响应,并将其响应返回给用户

javascript - 在 puppeteer 中访问子元素

laravel - Laravel 和 Docker 的 Puppeteer 不工作

javascript - 如何在 puppeteer 的评估函数中评估通过父页面的 url 检索到的页面

jquery - 无法使用 node.js 安装 jquery - 无法加载 Contextify

javascript - 检查单元测试中是否调用了函数

node.js - Mongoose 请求缓慢

javascript - waitForSelector 通过,但同一个选择器的 assertExists 失败