ブラウザーセッションは、正常完了、アイドル、接続エラー、ヘッドレスブラウザーインスタンスのエラーなど、さまざまな理由で閉じることがあります。予期しない終了を適切に扱うため、puppeteer.connect または puppeteer.launch は try...catch ↗ で囲むのが推奨です。
ブラウザーが閉じた理由を確認するには、次の手順を実行します。
-
Cloudflare ダッシュボードで、Browser Run ページを開きます。
Browser Run を開く ↗ -
Runs タブを選択します。
Browser Run セッションは 使用量 に基づいて課金されます。基盤となる Browser Run インフラのエラーで失敗したセッションは課金しません。
| 理由 | 説明 |
|---|---|
| Normal closure | コードが browser.close() を呼び出し、セッションが正常に終了しました。対応は不要です。 |
| Browser idle | 設定したアイドルタイムアウト(既定は 60 秒、keep_alive では最大 10 分)のあいだ、セッションがコマンドを受け取りませんでした。アイドル終了を防ぐには、アイドル時間内にコマンドを送るか、keep_alive の値を増やしてください。 |
| Chromium crashed | セッション内の Chromium インスタンスがクラッシュしました。ページのメモリ使用量が大きすぎる場合(大きな DOM、重い JavaScript、多数の同時ページ)によく起きます。ページの複雑さを下げる、使っていないページを閉じる、作業を小さなタスクに分割する、などを試してください。 |
| Connection error | クライアントと Browser Run の接続が切れました。ネットワークの問題、Worker が CPU 時間の上限に達した、WebSocket が切断された、などが原因です。try...catch ブロックで操作を再試行してください。 |
| Session evicted | インフラのメンテナンスまたは新しいリリースのデプロイにより、Browser Run がセッションを回収しました。コードが原因ではありません。try...catch ブロックと再接続ロジックで操作を再試行してください。 |
インフライベント、ネットワークの問題、ブラウザーのクラッシュにより、セッションはいつでも閉じる可能性があります。ブラウザー操作を try...catch で囲み、必要に応じて再接続するようにコードを設計してください。
async function runBrowser(env) {
let browser;
try {
browser = await puppeteer.launch(env.MYBROWSER);
const page = await browser.newPage();
await page.goto("https://example.com");
// Your browser automation logic
} catch (error) {
console.error("Browser session ended unexpectedly:", error.message);
// Retry or return an error response
} finally {
await browser?.close();
}
}長時間実行や重要なワークフローでは、再試行ロジックの追加を検討してください。
async function runWithRetry(env, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
return await runBrowser(env);
} catch (error) {
if (attempt === maxRetries) throw error;
console.log(`Attempt ${attempt} failed, retrying...`);
}
}
}