如何在 Puppeteer 中通过 CSS 选择器查找元素?

在进行网页抓取时,CSS 选择器是最有效的 HTML 页面解析方法之一。在 Node.js 和 Puppeteer 中,您可将 CSS 选择器与 page.$page.$$ 方法结合使用。这两大方法让您可以使用熟悉的 CSS 语法与网页元素进行交互。

以下示例代码展示了使用这两大方法查找网页元素的具体操作,并附有详细的注释,以帮助您理解每个操作步骤。

      const puppeteer = require('puppeteer');

async function run() {
    // Launch a new browser instance
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    
    // Navigate to the target webpage
    await page.goto("https://httpbin.dev/html", { waitUntil: 'domcontentloaded' });

    // Get the first matching element
    const firstParagraph = await page.$("p");
    console.log("First paragraph element found:", firstParagraph);

    // Get all matching elements
    const allParagraphs = await page.$$("p");
    console.log("Total paragraphs found:", allParagraphs.length);

    // Extract and log the text content of the first paragraph
    const firstParagraphText = await page.$eval("p", element => element.innerText);
    console.log("Text of the first paragraph:", firstParagraphText);

    // Extract and log the href attribute of the first anchor tag
    const firstAnchorHref = await page.$eval("a", element => element.href);
    console.log("Href of the first anchor tag:", firstAnchorHref);

    // Count the total number of paragraph elements
    const paragraphCount = await page.$$eval("p", elements => elements.length);
    console.log("Total number of paragraph elements:", paragraphCount);

    // Modify the inner text of the first paragraph
    await page.$eval("p", element => element.innerText = "New text for the first paragraph");
    console.log("Modified the text of the first paragraph.");

    // Close the browser
    await browser.close();
}

// Run the function
run();
    

在本示例中,我们执行了以下操作:

  1. 启动新的浏览器实例:这将启动一个由 Puppeteer 控制的新浏览器。
  2. 导航至目标网页:通过 goto 方法导航至指定 URL 并等待页面的 DOM 内容完全加载完毕。
  3. 获取第一个匹配元素:通过 page.$ 方法检索与 CSS 选择器 p 匹配的第一个元素。
  4. 获取所有匹配元素:通过 page.$$ 方法检索与 CSS 选择器 p 匹配的所有元素。
  5. 提取并记录第一段的文本内容:通过 page.$eval 方法在第一个匹配元素的上下文中评估一个函数,并返回其 innerText
  6. 提取并记录第一个锚点标签的 href 属性:通过 page.$eval 方法检索第一个 a 标签的 href 属性。
  7. 计算段落元素的总数: 通过 page.$$eval 方法在所有匹配元素的上下文中评估一个函数,并返回总数。
  8. 修改第一段的内部文本:通过 page.$eval 方法更改与 p 匹配的第一个元素的 innerText
  9. 关闭浏览器:这可确保浏览器实例在脚本完成后正确关闭。

注意:在尝试查找元素前,务必要等待页面完全加载完毕,特别是对于包含动态内容的页面。详情请参阅《如何在 Puppeteer 中等待页面加载?》一文。

如想了解其他元素查找方法,也可参阅《如何在 Puppeteer 中通过 XPath 查找元素?》一文。

结语

将 CSS 选择器与 Puppeteer 搭配使用可使网页抓取和自动化任务变得简单、高效。通过了解和使用这些方法,您可与网页元素高效进行交互,并提取有价值的数据。

想要立即开始使用?