跳至正文
中文
立即开始

Puppeteer

Puppeteer 是一个 JavaScript 库,可通过 Node.js 控制 Chrome 和 Firefox,常用于网站测试、页面渲染和动态内容采集。

文章目录(8 个章节)

Puppeteer 的作用

Puppeteer 是一个 Node.js API,用于自动控制 Chrome 和 Firefox。既能让浏览器在不显示窗口的情况下运行,也能在调试时显示窗口。与基础 HTTP 客户端不同,Puppeteer 会执行页面脚本,并可访问渲染后的 DOM。

常见用途包括:

  • 采集经过 JavaScript 渲染后才出现的内容。
  • 点击按钮、在表单中输入内容和跟随重定向。
  • 运行浏览器测试,以及截取屏幕截图或生成 PDF。
  • 读取网络响应、Cookie 和性能计时数据。

Puppeteer 的工作原理

脚本会启动浏览器或连接到浏览器,打开页面,再发送导航或输入指令。所需内容出现后,脚本便可通过 CSS 选择器读取元素。

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
  args: ['--proxy-server=http://HOST:PORT']
});
const page = await browser.newPage();
await page.authenticate({ username: 'USERNAME', password: 'PASSWORD' });
await page.goto('https://example.com', { waitUntil: 'domcontentloaded' });
console.log(await page.$eval('h1', el => el.textContent));
await browser.close();

这段脚本会打开 example.com 并输出页面的主标题。如果数据由客户端渲染,应等待特定选择器或网络响应,而不是依赖固定的等待时间。

在 Puppeteer 中使用代理

需要认证的代理通常写作 http://USERNAME:PASSWORD@HOST:PORT。Chromium 的启动参数接收 http://HOST:PORT,代理发起认证质询时,page.authenticate() 会提供用户名和密码。必须在 page.goto() 之前调用该方法,否则代理可能返回 407 Proxy Authentication Required。

在启动浏览器时设置的代理通常适用于该浏览器进程中的所有页面。因此,更换代理可能需要单独启动浏览器进程,具体取决于 Puppeteer 版本和配置。

限制与替代工具

工具 最适合 主要取舍
Puppeteer Chrome 和 Firefox 自动化 CPU 和内存占用更高
Playwright Chromium、Firefox 和 WebKit 测试 API 和工具体系不同
HTTP 采集工具 静态页面和 API 不执行浏览器 JavaScript

代理会改变网站看到的 IP 地址,但不能隐藏自动化行为,也不能修正异常的浏览器指纹。请求速率应控制在网站限制以内,同时遵守网站的 robots.txt 和使用条款;收到 429 响应后,应降低请求速率。

常见问题

Puppeteer 是无头浏览器吗?

不是。Puppeteer 是用于控制浏览器的库。“无头”是指浏览器运行时不显示界面。

Puppeteer 可以使用需要认证的代理吗?

可以。启动浏览器时设置代理的主机和端口,再在导航前通过 page.authenticate() 提供用户名和密码。

Puppeteer 适合网页采集吗?

适合,特别是页面需要 JavaScript、滚动或点击操作时。对于静态 HTML 或已有可用 API 的情况,直接使用 HTTP 客户端通常占用的资源更少。

相关术语

查看全部术语