Puppeteer 中的 pageFunction returns 空对象

pageFunction in Puppeteer returns empty object

我在 Puppeteer 中使用 page.$eval,但我不知道为什么 pageFunction 会 return 对象不为空时的空对象。这是一个代码示例:

const puppeteer = require('puppeteer');

(async() => {
  const browser = await puppeteer.launch({
    headless: false,
    slowMo: 1000
  });
  const page = await browser.newPage();
  await page.goto('https://www.google.com/search?q=news');

  const result1 = await page.$eval('#resultStats', elem => elem.textContent)
  console.log('result1', result1);  // returns 'About 2,890,000,000  results (0.45 seconds)'.  This is expected behavior straight from puppeeteer docs

  const result2 = await page.$eval('#resultStats', elem => elem)
  console.log('result2', result2);  // returns and empty object.  Why?  I would have expected to see a DOM Node Object here

  await browser.close();
})();

如何将整个元素返回到 result2 中?

我不明白 pageFunction 函数是 Chromium 本身的 运行,所以在返回 elem => elem 的第二个示例中,它实际上返回了一个活动的 NodeList 集合到木偶师。

但是从 Chromium 返回一个实时的 NodeList 集合到 puppeteer 是不可能的,因为 Puppeteer 将数据传入和传出 Chromium 的方式必须通过 JSON.stringify / JSON.parse 序列化。当 Puppeteer 在实时 NodeList 上运行 JSON.stringify 时,我相信它 returns 是一个空对象。

好吧,正如你所说,above.You 可以在求值函数 function.But 中得到 dom 节点,而当你 return 从求值函数中获取 dom 节点时, puppeteer 会处理你的数据 returned.So 你无法获取形容词数据。