0

page.$evalPuppeteer中使用,我不知道为什么pageFunction当对象不为空时 a 会返回一个空对象。这是一个代码示例:

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 中恢复整个元素?

4

2 回答 2

1

我不明白该pageFunction函数是在 Chromium 本身中运行的,所以在它返回的第二个示例中elem => elem,它实际上是向 Puppeteer 返回了一个实时的 NodeList 集合。

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

于 2017-10-21T01:52:25.033 回答
0

嗯,就像你上面说的。你可以在evaluate函数中获取dom节点。但是当你从evaluate函数中返回dom节点时,puppeteer会处理你返回的数据。所以你无法获取形容词数据。

于 2017-11-28T09:05:12.453 回答