SuperAPI AI 工具集

cloudflare-browser-rendering

部署与运维

查看项目

更新于 10-15 12:05

技能介绍

用途

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。

使用方式

快速上手步骤:

  1. 添加浏览器绑定。在 wrangler.jsonc 中配置 browser 绑定(如 MYBROWSER),并启用 nodejs_compat 兼容标志,因为 Browser Rendering 需要 Node.js API 和 polyfill。

  2. 安装 Puppeteer:bun add @cloudflare/puppeteer

  3. 编写 Worker 代码:通过 puppeteer.launch(env.MYBROWSER) 启动浏览器,browser.newPage() 创建页面,page.goto(url) 导航,page.screenshot() 截图,最后 browser.close() 清理。

  4. 部署: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/)。