用途
Cloudflare Browser Rendering 提供运行在 Cloudflare 全球网络上的无头 Chromium 浏览器,让开发者使用熟悉的 Puppeteer 和 Playwright 工具自动化浏览器任务,包括:网页截图、PDF 生成、网页抓取、前端测试自动化、多页爬取等。
该技能文档定位为生产就绪的知识域,用于构建基于 Cloudflare Browser Rendering 的浏览器自动化工作流。文档标注状态为 Production Ready,最后更新于 2025-11-25。
主要能力
- 截图:捕获网页的视觉快照
- PDF 生成:将 HTML 或 URL 转换为 PDF
- 网页抓取:从动态网站提取内容
- 测试:自动化前端测试
- 爬取:导航多页工作流
提供两种集成方式:Workers Bindings(适合复杂自动化、自定义工作流、会话管理,复杂度较高)和 REST API(适合简单截图/PDF 任务,较简单)。该技能覆盖 Workers Bindings 方式,即使用完整 Puppeteer/Playwright API 的高级方法。
Puppeteer 与 Playwright 对比:Puppeteer 使用 @cloudflare/puppeteer@1.0.4,API 最流行,具备高级会话管理 API,仅支持 Chromium,适合截图、PDF、抓取;Playwright 使用 @cloudflare/playwright@1.0.0,会话管理为基础级别,同样仅支持 Chromium(暂不支持 Firefox/Safari),适合测试和前端自动化。文档建议大多数场景使用 Puppeteer,若已有 Playwright 测试则可选用 Playwright。
使用方式
快速上手步骤:
-
添加浏览器绑定。在 wrangler.jsonc 中配置 browser 绑定(如 MYBROWSER),并启用 nodejs_compat 兼容标志,因为 Browser Rendering 需要 Node.js API 和 polyfill。
-
安装 Puppeteer:
bun add @cloudflare/puppeteer -
编写 Worker 代码:通过
puppeteer.launch(env.MYBROWSER)启动浏览器,browser.newPage()创建页面,page.goto(url)导航,page.screenshot()截图,最后browser.close()清理。 -
部署:
bunx wrangler deploy
关键注意事项:始终将 env.MYBROWSER 传给 puppeteer.launch()(不能为 undefined);完成后始终调用 browser.close(),或使用 browser.disconnect() 以复用会话;使用 nodejs_compat 兼容标志。
Playwright 用法类似,导入方式为 import { chromium } from "@cloudflare/playwright",启动方式为 chromium.launch(env.BROWSER)。
会话管理使用 Durable Objects 实现跨请求的状态持久化,支持休眠、自动清理和并发连接处理。关键模式包括:会话复用(puppeteer.sessions() 和 puppeteer.connect())、浏览器上下文隔离(共享浏览器实例的同时隔离 cookie/缓存)、多标签页(批量操作时用 newPage() 而非多个浏览器)、disconnect 与 close 的区别(disconnect 保持会话存活,close 终止会话)。
常见生产模式包括:带 KV 缓存的截图、从 HTML 生成 PDF、结构化数据网页抓取、批量抓取多个 URL、AI 增强抓取(结合 Workers AI)、表单填写与自动化。
适用场景
- 需要为高流量 URL 缓存截图以减少浏览器使用
- 将自定义 HTML 转换为发票、报告、文档的 PDF
- 从网页提取产品信息、价格、内容
- 在单个浏览器中用标签页高效抓取多个站点
- 结合 Workers AI 进行自适应数据提取
- 自动化登录流程、表单提交、多步骤工作流
限制与已知问题
定价与限制:Browser Rendering 按 CPU 时间计费(仅付费计划)。免费层每天 10 分钟;付费层每月包含 10 小时,超出后每浏览器小时 $0.09,并发浏览器超过 10 个时每个 $2.00。
已知问题预防(文档列出 6 个):
- 问题 #1:不支持 XPath 选择器。原因是 XPath 对 Workers 构成安全风险。解决方案是使用 CSS 选择器,或在 page.evaluate() 中使用 XPathEvaluator。
- 问题 #2:未传递浏览器绑定,报错 "Cannot read properties of undefined (reading 'fetch')"。解决方案是始终将 env.MYBROWSER 传给 launch。
- 问题 #3:浏览器 60 秒超时。默认超时为 60 秒无活动,可用 keep_alive 选项延长至最多 10 分钟,例如
{ keep_alive: 300000 }(5 分钟)。 - 问题 #4:并发限制与速率限制
- 问题 #5:本地开发请求大小限制(本地开发请求超过 1MB 会失败,可在 wrangler.jsonc 中启用 remote 绑定)
- 问题 #6:机器人防护与 WAF 绕过策略(无法绕过;若是自己的 zone,可创建 WAF 跳过规则)
生产检查清单:配置浏览器绑定和 nodejs_compat 标志;使用 try-finally 进行错误处理与清理;速率限制检查与重试逻辑;会话复用提升性能;对重复操作使用 KV 缓存;输入验证(防止 SSRF);在 Cloudflare 仪表盘监控。
依赖:@cloudflare/puppeteer@1.0.4、wrangler@4.81.0、@cloudflare/workers-types@4.20260408.0。相关技能:cloudflare-worker-base、cloudflare-kv、cloudflare-workers-ai。
官方文档:Browser Rendering Docs(https://developers.cloudflare.com/browser-rendering/)、Puppeteer API(https://pptr.dev/api/)、Playwright API(https://playwright.dev/docs/api/class-playwright)、Cloudflare Puppeteer Fork(https://github.com/cloudflare/puppeteer)、Cloudflare Playwright Fork(https://github.com/cloudflare/playwright)、Pricing(https://developers.cloudflare.com/browser-rendering/platform/pricing/)、Limits(https://developers.cloudflare.com/browser-rendering/platform/limits/)。