使用Puppeteer获取所有p标签

时间:2018-08-22 22:48:07

标签: node.js puppeteer

我试图使用Puppeteer从网站上获取所有段落标签,然后从中提取文本。 pTags但是始终是一个空数组,我不知道为什么。

这是我的代码。

const puppeteer = require('puppeteer')

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.newyorker.com/news/letter-from-trumps-washington/the-worst-hour-of-his-entire-life-cohen-manafort-and-the-twin-courtroom-dramas-that-changed-trumps-presidency');

  const pTags = await page.evaluate(() => Array.from(document.querySelectorAll('p')));

  console.log(pTags);

  browser.close();
})();

2 个答案:

答案 0 :(得分:2)

使用:

const pTags = await page.$$("p");

参考:https://github.com/GoogleChrome/puppeteer/blob/v1.7.0/docs/api.md#pageselector-1

答案 1 :(得分:2)

Official Documentation中所述:

  

如果传递给page.evaluate的函数返回非Serializable值,则page.evaluate解析为undefined

您尝试通过NodeList返回Serializable(非querySelectorAll()值),因此,您的page.evaluate()函数正在返回undefined

相反,您可以使用ElementHandlepage.$$()获得p个元素的page.$x()数组:

const pTags = await page.$$( 'p' );
const pTags = await page.$x( '//p' );