Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

ブラウザー終了の理由

最終更新 Markdown で表示Agent セットアップ

ブラウザーセッションは、正常完了、アイドル、接続エラー、ヘッドレスブラウザーインスタンスのエラーなど、さまざまな理由で閉じることがあります。予期しない終了を適切に扱うため、puppeteer.connect または puppeteer.launchtry...catch で囲むのが推奨です。

ブラウザーが閉じた理由を確認するには、次の手順を実行します。

  1. Cloudflare ダッシュボードで、Browser Run ページを開きます。

    Browser Run を開く ↗
  2. 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...`);
    }
  }
}

役に立ちましたか?