INTEGRITY Документация

Причины закрытия браузера

Сеанс браузера может закрыться по разным причинам: штатное завершение, бездействие, ошибки соединения или ошибки в экземпляре headless-браузера. Рекомендуем оборачивать puppeteer.connect или puppeteer.launch в try...catch ↗ для аккуратной обработки неожиданных закрытий.

Чтобы узнать причину закрытия браузера:

  1. На панели управления Cloudflare перейдите к разделу Browser Run страницу.

    Перейдите в Browser Run ↗
  2. Выберите Запуски на вкладке.

Сессии Browser Run тарифицируются на основе использование. Мы не взимаем плату за сеансы, которые завершаются ошибкой из-за сбоев в инфраструктуре Browser Run.

Причины закрытия

Причина Описание
Штатное закрытие Ваш код вызвал browser.close() и сеанс завершился штатно. Никаких действий не требуется.
Простой браузера Сеанс не получал команд в течение настроенного тайм-аута бездействия (по умолчанию 60 секунд, до 10 минут при использовании keep_alive). Чтобы избежать закрытия из-за простоя, отправляйте команды в течение окна неактивности или увеличьте keep_alive значение.
Сбой Chromium Экземпляр Chromium внутри сессии аварийно завершил работу, часто из-за того, что страница потребляла слишком много памяти (большой DOM, тяжёлый JavaScript или много одновременно открытых страниц). Попробуйте упростить страницу, закрыть неиспользуемые страницы или разбить задачу на более мелкие части.
Ошибка подключения Соединение между клиентом и Browser Run было прервано. Причиной может быть проблема с сетью, превышение лимита процессорного времени Worker или разрыв соединения 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...`);
    }
  }
}