如需在项目中使用 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
如需详细了解评估和相关方法(例如 evaluateOnNewDocument
和 exposeFunction
),请参阅评估 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()
。
如需了解详情,请参阅:
- How-To Geek 中的 Chromium 和 Chrome 有何区别?
- Chromium 文档介绍了适用于 Linux 用户的一些差异。
创建新的用户个人资料
Puppeteer 会创建自己的浏览器用户个人资料,在每次运行时进行清理。