Puppeteer 的无头模式和有头模式是两种不同的浏览器运行方式,各有其适用场景。
无头模式(Headless Mode):
无头模式是 Puppeteer 的默认模式,浏览器在没有图形界面的情况下运行。
特点:
- 不显示浏览器窗口,所有操作在后台进行
- 占用系统资源更少,运行速度更快
- 适合服务器环境和自动化任务
- 不需要显示器的支持
启用方式:
javascriptconst browser = await puppeteer.launch({ headless: true // 默认值,可以省略 });
适用场景:
- CI/CD 管道中的自动化测试
- 服务器端网页爬虫
- 批量截图和 PDF 生成
- 性能测试和监控
- 定时任务和后台处理
有头模式(Headful Mode):
有头模式会显示完整的浏览器界面,用户可以看到所有操作过程。
特点:
- 显示完整的浏览器窗口
- 可以实时观察浏览器行为
- 便于调试和开发
- 占用更多系统资源
启用方式:
javascriptconst browser = await puppeteer.launch({ headless: false });
适用场景:
- 开发和调试阶段
- 需要可视化操作的场景
- 演示和教学
- 手动测试辅助
- 复杂交互的调试
性能对比:
| 指标 | 无头模式 | 有头模式 |
|---|---|---|
| 内存占用 | 较低 | 较高 |
| 启动速度 | 快 | 慢 |
| CPU 使用 | 低 | 高 |
| 调试难度 | 较高 | 较低 |
| 适用环境 | 服务器 | 开发机 |
最佳实践:
- 开发阶段:使用有头模式进行调试
- 测试环境:使用无头模式提高效率
- 生产环境:始终使用无头模式
- 混合使用:根据需要动态切换模式
示例代码:
javascriptconst puppeteer = require('puppeteer'); // 根据环境变量选择模式 const isDev = process.env.NODE_ENV === 'development'; const browser = await puppeteer.launch({ headless: !isDev, devtools: isDev // 开发模式下打开 DevTools });