跳转到内容
搜索文档

浏览器关闭原因

最后更新 查看 MarkdownAgent 设置

浏览器会话可能因多种原因关闭,包括正常完成、不活动、连接错误或无头浏览器实例中的错误。最佳实践是将 puppeteer.connectpuppeteer.launch 包装在 try...catch 语句中,以优雅地处理意外关闭。

要查找浏览器关闭的原因:

  1. 在 Cloudflare 仪表板中,前往 Browser Run 页面。

    Go to Browser Run ↗
  2. 选择 **Runs(运行记录)**选项卡。

Browser Run 会话根据用量计费。对于因 Browser Run 底层基础设施错误而失败的会话,我们不收费。

关闭原因

原因 描述
正常关闭 你的代码调用了 browser.close(),会话正常结束。无需操作。
浏览器空闲 会话在配置的不活动超时时间内未收到任何命令(默认 60 秒,使用 keep_alive 最长可设为 10 分钟)。要防止空闲关闭,请在不活动窗口内发送命令或增大 keep_alive 值。
Chromium 崩溃 会话内的 Chromium 实例崩溃,通常是因为页面消耗过多内存(大型 DOM、重型 JavaScript 或大量并发页面)。尝试降低页面复杂度、关闭未使用的页面或将工作拆分为更小的任务。
连接错误 客户端与 Browser Run 之间的连接中断。可能由网络问题、Worker 达到 CPU 时间限制或 WebSocket 断开引起。使用 try...catch 块重试操作。
会话被驱逐 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...`);
    }
  }
}

这篇文档对您有帮助吗?