跳转到内容
搜索文档

限制

最后更新 查看 MarkdownAgent 设置

Browser Run 限制基于你的 Cloudflare Workers 套餐

有关定价信息,请参阅 Browser Run 定价

Workers Free

功能 限制
浏览器小时数 每天 10 分钟
并发浏览器(仅浏览器会话)1 每个账户 3 个
新浏览器实例(仅浏览器会话) 每 20 秒 1 个
浏览器超时 60 秒 2
总请求数(仅 Quick Actions)3 每 10 秒 1 个

``/crawl` 端点限制

``/crawl` 端点 对 Workers Free 用户有额外限制:

功能 限制
每天爬取任务数 每天 5 个
每次爬取的最大页面数 100 页

Workers Paid

功能 限制
浏览器小时数 无限制(查看定价
每个账户的并发浏览器(仅浏览器会话)1 每个账户 120 个(查看定价
每秒新浏览器实例数(仅浏览器会话) 每秒 1 个
浏览器超时 60 秒 2
每秒总请求数(仅 Quick Actions)3 每秒 10 个

常见问题

如何管理 Browser Run 的并发与会话隔离?

若遇到并发限制,或希望优化并发浏览器使用,可参考以下建议:

  • 使用标签页或共享浏览器优化:与其为每个任务启动新浏览器,不如在同一浏览器实例中打开多个标签页或运行多个操作。
  • 复用会话:通过复用会话而非每次启动新浏览器,可优化配置并缩短启动时间。若需保持测试隔离(例如依赖干净环境的测试),建议使用无痕浏览器上下文,其 cookies 和缓存与其他会话隔离。

若仍遇到并发限制,可申请提高限额

能否增加浏览器超时时间?

默认情况下,浏览器实例在 60 秒不活动后超时。如果想让浏览器保持更长时间打开,可以使用 keep_alive 选项,允许将超时延长至最多 10 分钟。

是否有最大会话持续时间?

只要会话保持活动,浏览器会话没有固定的最大生命周期。默认情况下,Browser Run 在一分钟不活动后关闭会话,以防止意外用量。你可以增加此不活动超时至最多 10 分钟。

如果需要会话保持更长时间打开,请在配置的不活动窗口内至少发送一次命令(例如每 10 分钟一次)。Browser Run 发布新版本时,会话也会关闭。

我从 Workers Free 套餐升级了,但仍遇到每天 10 分钟的限制。该怎么办?

如果你最近升级到 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 ↗

更多信息请参阅浏览器关闭原因

故障排除

Error: 429 Too many requests(错误:请求过多)

当你在短时间内发出过多请求时,Browser Run 将响应 HTTP 状态码 429 Too many requests。你可以在上述 Workers FreeWorkers 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: 429 Browser time limit exceeded for today(错误:今日浏览器时间限制已超出)

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 以确保用量正确关联到新套餐。

Footnotes

  1. 浏览器在任务完成或六十秒不活动后关闭(如果你未延长浏览器超时)。因此,实际上许多工作流不需要大量并发浏览器。 2

  2. 默认情况下,浏览器在 60 秒不活动后超时。你可以使用 keep_alive 选项 将其延长至最多 10 分钟。调用 browser.close() 可立即释放浏览器实例。 2

  3. 如果超过每秒速率限制,你将收到 429 响应。请参阅排查 429 Too many requests 错误 2

这篇文档对您有帮助吗?