无头浏览器
什么是无头浏览器,它如何用于自动截图,以及常见的问题。
无头浏览器是一种没有可见窗口、由代码控制的 Web 浏览器。它使用与普通浏览器相同的引擎:解析 HTML、运行 JavaScript、计算布局并渲染像素,只是把像素绘制到屏幕外的缓冲区中。
Chrome 和 Firefox 都有无头模式。程序通过 Chrome DevTools Protocol、WebDriver 和 WebDriver BiDi 等协议控制它们。Puppeteer、Playwright 和 Selenium 等库把这些协议封装成编程 API。
由于不需要在屏幕上绘制任何内容,无头浏览器可以在没有显示器的服务器和 CI 流水线中运行。
无头浏览器的工作原理
- 脚本以无头模式启动浏览器。
- 打开页面,设置视口尺寸并加载 URL。
- 等待某个事件,例如 load 事件或网络空闲。
- 执行点击或滚动等操作,然后请求截图或 PDF。
- 关闭页面或浏览器。
无头浏览器的使用场景
- 检查页面和流程的自动化测试。
- 用于监控和存档的定时截图。
- 从 HTML 生成 PDF 和社交媒体预览图。
- 从需要 JavaScript 渲染的页面收集公开数据。
无头截取与有头截取
| 无头 | 有头(可见窗口) | |
|---|---|---|
| 需要显示器 | 否 | 是 |
| 批量处理速度 | 通常更快 | 较慢 |
| 调试 | 较难,没有画面可看 | 较容易 |
| 被网站识别 | 可能性较高 | 可能性较低 |
部分网站会识别无头浏览器,返回不同内容或直接拦截。字体和 GPU 功能也可能与桌面浏览器不同,因此同一页面的渲染结果可能略有差异。
常见错误
- 对持续加载内容的页面在 load 事件时就截取。
- 忘记设置视口,导致每次截取都使用默认尺寸。
- 在配置较低的机器上同时运行多个浏览器。
- 服务器缺少字体,导致文字排版发生变化。
需要反复截取相同的截图?
Temposhot 的 Website Capture 无需编写代码,即可在你的 Mac 上用受管理的本地浏览器加载 URL,Concurrent browsers 可设为 1 到 10 个。参见网站截图自动化。
常见问题
使用无头浏览器需要写代码吗?
Puppeteer 和 Playwright 等库需要写代码。桌面工具和截图服务会把这一层隐藏起来。
无头截图与普通截图完全相同吗?
通常很接近,但字体、GPU 渲染和网站行为可能有所不同。
参考资料
相关资源
- 用 Playwright 自动截取网站截图:代码示例。
- 用 Puppeteer 自动截取网站截图:代码示例。
- Website Capture 快速入门:无需代码的方案。
总是重复截取相同的截图吗?
Temposhot 可定时截取屏幕、窗口或指定区域,并将结果导出为 PDF、图片、ZIP 或 MP4。免费的网页工具只能处理单张图片。
相关资源
相关术语
- PuppeteerPuppeteer 是什么,它如何截图,以及在浏览器自动化方面与 Playwright 有何不同。
- PlaywrightPlaywright 是什么,它如何跨浏览器截图,以及在自动化方面与 Puppeteer 有何不同。
- 批量截图批量截图是什么,与单次截图有何不同,以及团队在哪些场景中使用它。
- 截图 API截图 API 的含义、工作原理,以及何时适合用它以编程方式截图。
- 视觉回归测试视觉回归测试是什么、截图比较如何发现界面缺陷,以及常见陷阱。
- 网络爬虫网络爬虫如何工作、爬取与抓取有何区别,以及爬虫如何与截图工具配合使用。
- 网页抓取网页抓取是什么、与截图有什么关系,以及相关的法律和伦理问题。