Puppeteer 快速入门

如需在项目中使用 Puppeteer,必须先安装它。

安装

npm i puppeteer
# or "yarn add puppeteer"

安装 Puppeteer 后,系统会下载最新版本的 Chromium(Mac 版本约为 170MB,Linux 内存量约为 282MB,Linux 内存量约为 280MB),该版本可确保可与 API 搭配使用。如需跳过下载、下载到其他路径或下载其他浏览器,请参阅环境变量

木偶核

从 1.7.0 版开始,我们发布了 puppeteer-core 软件包。默认情况下,此版本的 Puppeteer 不会下载任何浏览器。

npm i puppeteer-core
# or "yarn add puppeteer-core"

puppeteer-core 旨在成为 Puppeteer 的轻量版本,用于启动现有浏览器安装或连接到远程浏览器。请确保您安装的 puppeteer-core 版本与您要连接的浏览器兼容。

请参阅 puppeteer 与 puppeteer-core

用法

Puppeteer 采用 Node 的最新维护 LTS 版本。

使用其他浏览器测试框架的人可能很熟悉 Puppeteer。您可以创建 Browser 的实例,打开页面,然后使用 Puppeteer 的 API 操纵页面。

保存屏幕截图

例如,如需转到 https://example.com 并将屏幕截图保存为 example.png,请将以下代码保存到 example.js

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();
})();

Puppeteer 将初始页面尺寸设置为 800×600px,用于定义屏幕截图尺寸。您可以通过 Page.setViewport() 自定义页面大小。

创建 PDF

将文件另存为 hn.js

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://news.ycombinator.com', {
    waitUntil: 'networkidle2',
  });
  await page.pdf({ path: 'hn.pdf', format: 'a4' });

  await browser.close();
})();

在命令行上执行脚本:

node hn.js

如需详细了解如何创建 PDF,请参阅 Page.pdf()

在网页上下文中评估脚本

将文件另存为 get-dimensions.js

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  // Get the "viewport" of the page, as reported by the page.
  const dimensions = await page.evaluate(() => {
    return {
      width: document.documentElement.clientWidth,
      height: document.documentElement.clientHeight,
      deviceScaleFactor: window.devicePixelRatio,
    };
  });

  console.log('Dimensions:', dimensions);

  await browser.close();
})();

在命令行上执行脚本:

node get-dimensions.js

如需详细了解评估和相关方法(例如 evaluateOnNewDocumentexposeFunction),请参阅评估 JavaScript

默认运行时设置

使用无头模式

Puppeteer 以无头模式启动 Chromium。如需启动完整版 Chromium,请在启动浏览器时设置 headless 选项:

const browser = await puppeteer.launch({ headless: false }); // default is true

运行捆绑版本的 Chromium

默认情况下,Puppeteer 会下载并使用特定版本的 Chromium,因此可以保证其 API 可直接使用。如需将 Puppeteer 与其他版本的 Chrome 或 Chromium 搭配使用,请在创建 Browser 实例时传入可执行文件的路径:

const browser = await puppeteer.launch({ executablePath: '/path/to/Chrome' });

您还可以将 Puppeteer 与 Firefox Nightly 搭配使用(实验性支持)。 如需了解详情,请参阅 Puppeteer.launch()

如需了解详情,请参阅:

创建新的用户个人资料

Puppeteer 会创建自己的浏览器用户个人资料,在每次运行时进行清理。

后续步骤