Puppeteer 入门指南:强大的 headless Chrome 自动化工具

124 阅读4分钟

Puppeteer 是一个强大的 JavaScript 库,它提供了高级 API 来以编程方式控制 Chrome 或 Firefox 浏览器。由 Chrome 团队开发,它使开发者能够自动化浏览器交互、执行网页抓取、生成截图和 PDF、运行测试等更多功能——所有这些都通过简单直观的界面实现。

Puppeteer 有何特别之处?

Puppeteer 在浏览器自动化领域脱颖而出,因为它使用 DevTools 协议或较新的 WebDriver BiDi 标准直接与浏览器通信。这种直接通信赋予 Puppeteer 对浏览器行为前所未有的控制能力,使其能够执行传统自动化工具难以或无法完成的任务。

该库默认以 无头模式(没有可见界面)运行浏览器,非常适合服务器环境和自动化工作流。不过,它也可以在"有头"模式下运行,显示浏览器界面,这对调试和开发工作非常宝贵。

Puppeteer 有两种版本:puppeteer(会自动下载兼容的浏览器版本)和 puppeteer-core(不包含浏览器,允许您连接到现有的浏览器安装)。

使用 Puppeteer 可以做什么?

Puppeteer 为浏览器自动化开辟了无限可能。以下是一些最常见的用例:

1. 网页抓取和数据提取

从重度依赖 JavaScript 的网站提取数据。Puppeteer 可以等待内容加载、与表单交互并导航复杂的网站结构。

const puppeteer = require('puppeteer'); (async () => {  const browser = await puppeteer.launch();  const page = await browser.newPage();    await page.goto('https://developers.google.com/web/');  await page.type('.devsite-search-field', 'Headless Chrome');    // 等待结果并提取  const resultsSelector = '.gsc-table-result a.gs-title[href]';  await page.waitForSelector(resultsSelector);    const links = await page.evaluate(resultsSelector => {    const anchors = Array.from(document.querySelectorAll(resultsSelector));    return anchors.map(anchor => `${anchor.textContent} - ${anchor.href}`);  }, resultsSelector);    console.log(links.join('\n'));  await browser.close();})();

2. 截图和 PDF 生成

以编程方式捕获网页的可视化表示。这对于生成报告、存档内容或创建可视化文档非常理想。

const puppeteer = require('puppeteer'); (async () => {  const browser = await puppeteer.launch();  const page = await browser.newPage();  await page.goto('https://example.com');  await page.screenshot({path: 'example.png'});  await browser.close();})();

3. 自动化测试

Puppeteer 擅长 Web 应用程序的端到端测试。它可以模拟用户交互、测试表单提交,并验证您的应用程序在不同场景下是否正常工作。

4. 性能监控

分析页面加载时间、网络请求和渲染性能。Puppeteer 提供详细的指标,帮助您优化 Web 应用程序。

5. 网络爬虫和网站分析

构建能够处理现代、重度 JavaScript 网站的复杂网络爬虫。Puppeteer 可以导航复杂的网站结构、处理身份验证并遵守 robots.txt 规则。

主要特性

Puppeteer 拥有丰富的功能,使浏览器自动化变得简单而强大:

特性描述
无头执行在没有可见界面的情况下运行浏览器,非常适合服务器和 CI/CD 管道
完整浏览器控制同时启动、关闭和管理多个浏览器实例
页面管理在每个浏览器中创建、导航和操作多个页面
DOM 交互使用直观的选择器查询、点击、输入和与页面元素交互
网络拦截监控、修改和阻止网络请求和响应
JavaScript 执行在网页上下文中运行任意 JavaScript 代码
文件生成从网页内容创建截图、PDF 和其他文件格式
跨浏览器支持适用于 Chrome、Chromium 和 Firefox 浏览器

入门指南

开始使用 Puppeteer 非常简单。该库设计为只需最少的设置即可让您快速上手:

  1. 安装 Puppeteer(这会自动下载兼容的浏览器):

    npm i puppeteer
    
  2. 编写您的第一个脚本

    import puppeteer from 'puppeteer'; const browser = await puppeteer.launch();const page = await browser.newPage();await page.goto('https://example.com');console.log('页面标题:', await page.title());await browser.close();
    
  3. 运行您的脚本

    node your-script.js
    

就是这样!只需几行代码,您就已经启动了浏览器、导航到网页并从中提取了信息。

为何选择 Puppeteer?

Puppeteer 已成为浏览器自动化的首选解决方案,原因如下:

  • 官方 Google 项目:由 Chrome 团队支持,确保与最新浏览器功能兼容
  • 积极开发:定期更新和改进,紧跟不断发展的 Web 标准
  • 全面文档:丰富的文档、示例和社区支持
  • TypeScript 支持:完整的类型定义,提供更好的开发体验
  • 可扩展架构:插件系统和自定义选择器,满足高级用例需求
  • 跨平台:适用于 Windows、macOS 和 Linux
  • 现代 JavaScript:使用 async/await 模式,代码简洁易读

Puppeteer 需要 Node.js 18 或更高版本。在开始之前,请确保您的开发环境满足此要求。