Browser Run 限制基于你的 Cloudflare Workers 套餐。
有关定价信息,请参阅 Browser Run 定价。
| 功能 | 限制 |
|---|---|
| 浏览器小时数 | 每天 10 分钟 |
| 并发浏览器(仅浏览器会话)1 | 每个账户 3 个 |
| 新浏览器实例(仅浏览器会话) | 每 20 秒 1 个 |
| 浏览器超时 | 60 秒 2 |
| 总请求数(仅 Quick Actions)3 | 每 10 秒 1 个 |
``/crawl` 端点 对 Workers Free 用户有额外限制:
| 功能 | 限制 |
|---|---|
| 每天爬取任务数 | 每天 5 个 |
| 每次爬取的最大页面数 | 100 页 |
| 功能 | 限制 |
|---|---|
| 浏览器小时数 | 无限制(查看定价) |
| 每个账户的并发浏览器(仅浏览器会话)1 | 每个账户 120 个(查看定价) |
| 每秒新浏览器实例数(仅浏览器会话) | 每秒 1 个 |
| 浏览器超时 | 60 秒 2 |
| 每秒总请求数(仅 Quick Actions)3 | 每秒 10 个 |
若遇到并发限制,或希望优化并发浏览器使用,可参考以下建议:
- 使用标签页或共享浏览器优化:与其为每个任务启动新浏览器,不如在同一浏览器实例中打开多个标签页或运行多个操作。
- 复用会话:通过复用会话而非每次启动新浏览器,可优化配置并缩短启动时间。若需保持测试隔离(例如依赖干净环境的测试),建议使用无痕浏览器上下文 ↗,其 cookies 和缓存与其他会话隔离。
若仍遇到并发限制,可申请提高限额 ↗。
默认情况下,浏览器实例在 60 秒不活动后超时。如果想让浏览器保持更长时间打开,可以使用 keep_alive 选项,允许将超时延长至最多 10 分钟。
只要会话保持活动,浏览器会话没有固定的最大生命周期。默认情况下,Browser Run 在一分钟不活动后关闭会话,以防止意外用量。你可以增加此不活动超时至最多 10 分钟。
如果需要会话保持更长时间打开,请在配置的不活动窗口内至少发送一次命令(例如每 10 分钟一次)。Browser Run 发布新版本时,会话也会关闭。
如果你最近升级到 Workers Paid 套餐 但仍遇到每天 10 分钟的限制,请重新部署 Worker 以确保用量正确关联到新套餐。
如果你遇到每日限制或用量高于预期,最常见的原因是浏览器会话未正确关闭。如果未使用 browser.close() 显式关闭浏览器会话,它将保持打开并继续消耗浏览器时间,直到超时(默认 60 秒,或使用 keep_alive 选项最长 10 分钟)。
要最小化用量:
- 完成浏览器会话后始终调用
browser.close()。 - 将浏览器代码包装在
try/finally块中,确保即使发生错误也会调用browser.close()。 - 使用
puppeteer.history()或playwright.history()查看最近的会话,识别因BrowserIdle而非NormalClosure关闭的会话。因空闲超时关闭的会话表示浏览器未被显式关闭。
你可以在 Cloudflare 仪表板的 Browser Run 页面监控用量并查看会话关闭原因:
Go to Browser Run ↗更多信息请参阅浏览器关闭原因。
当你在短时间内发出过多请求时,Browser Run 将响应 HTTP 状态码 429 Too many requests。你可以在上述 Workers Free 和 Workers Paid 部分查看账户的速率限制。
以下示例演示如何通过读取 Retry-After 值并在该延迟后重试请求来优雅地处理速率限制。
const response = await fetch('https://api.cloudflare.com/client/v4/accounts/<accountId>/browser-rendering/content', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your-token>',
},
body: JSON.stringify({ url: 'https://example.com' })
});
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After');
console.log(`Rate limited. Waiting ${retryAfter} seconds...`);
await new Promise(resolve => setTimeout(resolve, retryAfter \* 1000));
// Retry the request
const retryResponse = await fetch(/* same request as above */);
}import puppeteer from "@cloudflare/puppeteer";
try {
const browser = await puppeteer.launch(env.MYBROWSER);
const page = await browser.newPage();
await page.goto("https://example.com");
const content = await page.content();
await browser.close();
} catch (error) {
if (error.status === 429) {
const retryAfter = error.headers.get("Retry-After");
console.log(
`Browser instance limit reached. Waiting ${retryAfter} seconds...`,
);
await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
// Retry launching browser
const browser = await puppeteer.launch(env.MYBROWSER);
}
}此 Error processing the request: Unable to create new browser: code: 429: message: Browser time limit exceeded for today 错误表示你已达到 Workers Free 套餐的每日浏览器限制。Workers Free 账户每天限制 10 分钟 Browser Run 用量。如果超过该限制,你将收到 429 错误,直到下一个 UTC 日。
你可以在 Cloudflare 仪表板的 **Workers plans(Workers 套餐)**页面升级到 Workers Paid 套餐以提高限制:
Go to Workers plans ↗如果你最近升级但仍遇到每天 10 分钟的限制,请重新部署 Worker 以确保用量正确关联到新套餐。
-
默认情况下,浏览器在 60 秒不活动后超时。你可以使用
keep_alive选项 将其延长至最多 10 分钟。调用browser.close()可立即释放浏览器实例。 ↩ ↩2 -
如果超过每秒速率限制,你将收到
429响应。请参阅排查429 Too many requests错误。 ↩ ↩2