Browser Run の制限は、Cloudflare Workers のプラン に基づきます。
料金については、Browser Run の料金 を参照してください。
| 機能 | 制限 |
|---|---|
| ブラウザ時間 | 1 日あたり 10 分 |
| アカウントあたりの同時ブラウザ数(Browser Sessions のみ) 1 | アカウントあたり 3 |
| 新しいブラウザインスタンス(Browser Sessions のみ) | 20 秒に 1 回 |
| ブラウザのタイムアウト | 60 秒 2 |
| 総リクエスト数(Quick Actions のみ) 3 | 10 秒に 1 回 |
/crawl エンドポイント には、Workers Free プランのユーザー向けの追加制限があります。
| 機能 | 制限 |
|---|---|
| 1 日あたりのクロールジョブ数 | 1 日あたり 5 |
| 1 クロールあたりの最大ページ数 | 100 ページ |
| 機能 | 制限 |
|---|---|
| ブラウザ時間 | 制限なし(料金を参照) |
| アカウントあたりの同時ブラウザ数(Browser Sessions のみ) 1 | アカウントあたり 200(料金を参照) |
| 1 秒あたりの新しいブラウザインスタンス数(Browser Sessions のみ) | 1 秒あたり 3 |
| ブラウザのタイムアウト | 60 秒 2 |
| 1 秒あたりの総リクエスト数(Quick Actions のみ) 3 | 1 秒あたり 30 |
同時実行の 制限 に達している場合や、同時ブラウザー利用を最適化したい場合は、次のヒントを参考にしてください。
- タブまたは共有ブラウザーで最適化する: タスクごとに新しいブラウザーを起動する代わりに、同じブラウザーインスタンスで複数のタブを開く、または複数の操作を実行することを検討してください。
- セッションを再利用する: 毎回新しいブラウザーを起動せずセッションを再利用すると、構成を最適化し、起動時間を短縮できます。テストの分離(クリーンな環境に依存するテストなど)を維持したい場合は、Cookie とキャッシュをほかのセッションから分離する シークレット(incognito)ブラウザーコンテキスト ↗ の利用をおすすめします。
それでも同時実行の制限に達する場合は、上限の引き上げを申請 ↗ できます。
デフォルトでは、ブラウザインスタンスは 60 秒間操作がないとタイムアウトします。ブラウザをより長く開いたままにするには、keep_alive オプション を使います。タイムアウトは最大 10 分まで延長できます。
セッションがアクティブな限り、ブラウザセッションに固定の最長寿命はありません。意図しない利用を防ぐため、Browser Run はデフォルトで 1 分間操作がないとセッションを閉じます。この非アクティブタイムアウト は最大 10 分まで延長できます。
セッションをより長く開いたままにするには、設定した非アクティブ期間内に少なくとも 1 回コマンドを送信して、セッションをアクティブに保ちます(例: 10 分ごと)。Browser Run が新しいリリースをロールアウトするときも、セッションは閉じます。
最近 Workers Paid プラン にアップグレードしたあとも、1 日 10 分の制限に達する場合は、Worker を再デプロイしてください。利用量が新しいプランに正しく紐づきます。
1 日の制限に達したり、想定より多い利用量が見えたりする場合、最も多い原因は、ブラウザセッションが正しく閉じられていないことです。browser.close() で明示的に閉じないセッションは開いたままになり、タイムアウトするまでブラウザ時間を消費します(デフォルトは 60 秒。keep_alive オプションを使うと最大 10 分)。
利用量を抑えるには:
- ブラウザセッションの利用が終わったら、必ず
browser.close()を呼び出します。 - ブラウザのコードを
try/finallyブロックで囲み、エラーが起きてもbrowser.close()が呼ばれるようにします。 puppeteer.history()またはplaywright.history()で最近のセッションを確認し、NormalClosureではなくBrowserIdleで閉じたセッションがないかを調べます。アイドルタイムアウトで閉じたセッションは、ブラウザを明示的に閉じていないことを示します。
利用量とセッションの終了理由は、Cloudflare ダッシュボードの Browser Run ページで確認できます。
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 プランの 1 日あたりのブラウザ制限に達したことを示します。Workers Free プランのアカウント は、Browser Run の利用が 1 日あたり 10 分に制限されます。この制限を超えると、次の UTC 日まで 429 エラーが返ります。
Cloudflare ダッシュボードの Workers plans ページで Workers Paid プランにアップグレードすると、制限を引き上げられます。
Workers plans を開く ↗最近アップグレードしたあとも 1 日 10 分の制限に達する場合は、Worker を再デプロイしてください。利用量が新しいプランに正しく紐づきます。
-
ブラウザは、タスク完了時、または 60 秒間操作がないとき(ブラウザのタイムアウトを延長していない場合)に閉じます。そのため実際には、多くのワークフローで高い同時ブラウザ数は不要です。 ↩ ↩2
-
デフォルトでは、ブラウザは 60 秒間操作がないとタイムアウトします。
keep_aliveオプション を使うと、最大 10 分まで延長できます。すぐにブラウザインスタンスを解放するには、browser.close()を呼び出します。 ↩ ↩2 -
1 秒あたりのレート制限を超えると、
429レスポンスが返ります。429 Too many requestsエラーのトラブルシューティング を参照してください。 ↩ ↩2