首页 > 解决方案 > 使用 Puppeteer 获取所有 p 标签

问题描述

我正在尝试使用 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();
})();

标签: node.jspuppeteer

解决方案


官方文档中所述:

如果传递给 的函数page.evaluate返回一个不可序列化的值,则page.evaluate解析为undefined.

您正试图通过返回一个NodeList(不可序列化的值)querySelectorAll(),因此,您的page.evaluate()函数正在返回undefined

相反,您可以使用or获取元素ElementHandle数组:ppage.$$()page.$x()

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

推荐阅读