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

Часто задаваемые вопросы

Здесь вы найдёте ответы на наиболее часто задаваемые вопросы о Browser Run (ранее Browser Rendering).

По вопросам тарификации перейдите на FAQ по тарифам. По вопросам о лимитах использования посетите FAQ по лимитам. Если вы не нашли ответ на свой вопрос, присоединяйтесь к нам в Discord ↗.


Ошибки и устранение неполадок

Error: Cannot read properties of undefined (reading 'fetch')

Эта ошибка обычно возникает из-за того, что при запуске Puppeteer не передаётся привязка browser binding. Чтобы устранить эту ошибку, передайте свою привязку browser binding в puppeteer.launch.

Ошибка: 429 browser time limit exceeded

Эта ошибка (Unable to create new browser: code: 429: message: Browser time limit exceeded for today) означает, что вы достигли дневного лимита экземпляров браузера на плане Workers Free. Для аккаунтов с тарифом Workers Free использование браузера ограничено 10 минутами в день. После превышения этого лимита дальнейшие попытки создания будут возвращать ошибку 429 до следующего дня по UTC.

Чтобы устранить эту ошибку, перейдите на план Workers Paid который допускает более 10 минут использования в день и имеет более высокие ограничения. Если вы недавно перешли на новый план, но всё равно видите эту ошибку, попробуйте повторно развернуть Worker, чтобы использование было правильно связано с новым планом.

Ошибка: 422 unprocessable entity

A 422 Unprocessable Entity ошибка обычно означает, что Browser Run не смог выполнить действие из-за проблемы на стороне сайта.

Это может произойти, если:

Чаще всего эта ошибка вызвана истечением тайм-аута. Ознакомиться с разными таймерами и их ограничениями можно в разделе Справка по тайм-аутам Quick Actions.

Почему содержимое страницы отсутствует или загружено не полностью?

Если на скриншотах, в PDF или в собранном содержимом отсутствуют элементы, которые видны при просмотре страницы в браузере, вероятная причина в том, что страница не успела полностью загрузиться до того, как Browser Run сделал снимок.

Страницы с большим количеством JavaScript и одностраничные приложения (SPA) часто загружают контент динамически, уже после разбора исходного HTML. По умолчанию Browser Run ожидает domcontentloaded, которое срабатывает до того, как JavaScript завершит рендеринг страницы.

Чтобы устранить это, используйте goToOptions.waitUntil параметр с одним из следующих значений:

Значение Когда использовать
networkidle0 Страница должна быть полностью неактивна (без сетевых запросов в течение 500 мс). Оптимально подходит для страниц, которые загружают весь контент сразу.
networkidle2 Страница может поддерживать до 2 одновременных подключений (например, аналитику или веб-сокеты). Оптимально подходит для большинства динамических страниц.

Пример Quick Actions:

{
	"url": "https://example.com",
	"goToOptions": {
		"waitUntil": "networkidle2"
	}
}

Если содержимое всё ещё отсутствует:

Полный справочник см. в Тайм-ауты Quick Actions.


Начало работы и разработка

Зачем запускать браузеры в облаке, а не локально?

Локальный запуск браузера подходит для разработки и небольших задач, но имеет практические ограничения при работе с продакшен-нагрузками.

С Browser Run сессии браузера выполняются на инфраструктуре Cloudflare, поэтому автоматизация работает без локальной машины. Не нужно поддерживать установку Chrome или держать запущенной виртуальную машину: сессии запускаются по требованию и завершаются, как только работа выполнена.

Также можно использовать Cloudflare Queues чтобы асинхронно обрабатывать пакеты URL-адресов, что позволяет сканировать в масштабе без необходимости самостоятельно управлять инфраструктурой очереди.

Сессии браузера открываются в глобальной сети Cloudflare, рядом с местом, откуда поступил запрос. Browser Run представляет собой привязка Workers, поэтому он напрямую интегрируется с Durable Objects, Queues и остальной платформы разработчика Cloudflare.

Поддерживает ли локальная разработка все возможности Browser Run?

Пока нет. Локальная разработка в настоящее время имеет следующие ограничения:

При локальной разработке можно также запускать Chrome в видимом режиме (headful), чтобы визуально отлаживать скрипты автоматизации (экспериментальная функция). Задайте X_BROWSER_HEADFUL переменную окружения перед запуском сервера разработки:

X_BROWSER_HEADFUL=true npx wrangler dev

Как отрендерить страницы с авторизацией с помощью Quick Actions?

Если для рендеринга страницы требуется авторизация, вы можете передать учетные данные одним из следующих способов. Эти параметры работают со всеми Быстрые действия конечные точки.

HTTP Basic Auth:

{
	"authenticate": {
		"username": "user",
		"password": "pass"
	}
}

Аутентификация через cookie:

{
	"cookies": [
		{
			"name": "session_id",
			"value": "abc123",
			"domain": "example.com",
			"path": "/",
			"secure": true,
			"httpOnly": true
		}
	]
}

Аутентификация на основе токена:

{
	"setExtraHTTPHeaders": {
		"Authorization": "Bearer your-token"
	}
}

Полные рабочие примеры всех трех методов см. в Снимок экрана аутентифицированной страницы.

Определит ли Bot Management Browser Run как бота?

Да, Cloudflare всегда определяет запросы Browser Run как трафик ботов. По умолчанию защита от ботов не применяется: это решение остаётся за клиентом.

Если вы сканируете собственную зону и хотите, чтобы Browser Run свободно обращался к вашему сайту без вмешательства настроек защиты от ботов, вы можете создать правило пропуска WAF, чтобы добавление Browser Run в список разрешений.

Можно ли добавить Browser Run в список разрешённых на моём сайте?

Чтобы добавить Browser Run в список разрешённых (allowlist) на собственном сайте, необходим тариф Enterprise, поскольку пользовательские правила WAF требуют доступа к Bot Management поля.

Browser Run использует разные идентификаторы обнаружения ботов в зависимости от метода. Используйте ID, соответствующий методу, который нужно добавить в список разрешённых.

  1. На панели управления Cloudflare перейдите к разделу Правила безопасности странице вашего аккаунта и домена.

    Перейдите в Правила безопасности ↗
  2. Чтобы создать новое пустое правило, выберите Создать правило > Custom rules.

  3. Введите описательное название правила в Название правила, например Allow Browser Run.

  4. В разделе Когда входящие запросы соответствуют, используйте Поле раскрывающемся списке выберите Bot Detection ID. Для Оператор, выберите равно. Для Значение, введите идентификатор обнаружения ботов для метода, который нужно добавить в список разрешённых.

  5. В разделе Затем выберите действие, в Выберите действие раскрывающемся списке выберите Пропустить.

  6. В разделе Расположите на, выберите порядок правила в Выберите порядок является раскрывающимся списком, который нужно установить на Первая. Установка порядка как Первая позволяет применить это правило раньше последующих.

  7. Чтобы сохранить и развернуть правило, выберите Развернуть.

Меняет ли Browser Run IP-адреса для исходящих запросов?

Нет. Запросы Browser Run отправляются из глобальной сети Cloudflare, и настроить ротацию IP-адресов для отдельных запросов нельзя. Весь трафик рендеринга поступает из диапазонов IP-адресов Cloudflare, а запросы включают автоматические заголовки, например cf-biso-request-id и cf-biso-devtools чтобы исходные серверы могли их идентифицировать.

Есть ли ограничение на число запросов, которые способен обработать один сеанс браузера?

Фиксированного ограничения на количество запросов в рамках одного сеанса браузера нет. Один браузер может обрабатывать несколько запросов, пока это не выходит за пределы доступных вычислительных ресурсов и памяти.

Можно ли использовать пользовательские шрифты в Browser Run?

Да. Если для страницы или PDF нужен шрифт, которого нет среди предустановленных, вы можете загрузить пользовательские шрифты во время рендеринга с помощью addStyleTag. Это работает с Быстрые действия, Puppeteer, а также Playwright. Инструкции и примеры см. в Пользовательские шрифты.

Как управлять параллелизмом и изоляцией сессий в Browser Run?

Если вы столкнулись с ограничением параллелизма ограничения, или хотите оптимизировать параллельное использование браузера, вот несколько советов:

Если вы всё ещё сталкиваетесь с ограничением параллелизма, вы можете запросите более высокий лимит ↗.


Управление сессиями

Открывать новый браузер для каждой задачи или использовать одну сессию с несколькими вкладками

В большинстве случаев используйте повторно существующую сессию браузера и открывайте новую вкладку вместо запуска нового браузера для каждой задачи. Browser Run учитывает экземпляры браузера в счёт вашего одновременные браузеры и частота создания новых экземпляров браузера ограничений, но вкладки внутри уже существующей сессии не учитываются ни в одном из этих лимитов. Повторное использование сессии также позволяет избежать затрат на холодный старт новой сессии браузера.

Один браузер может обслуживать много вкладок, но все они используют общий процесс и общую память браузера. Тяжёлые страницы (например, страницы с крупными JavaScript-бандлами, медиаконтентом или сложным DOM) потребляют больше памяти на вкладку, поэтому открытие слишком большого числа вкладок в одном браузере может привести к его сбою. Проверьте свою нагрузку опытным путем, чтобы определить безопасное количество вкладок на браузер. Для лёгких страниц может подойти несколько десятков вкладок, а для тяжёлых страниц лишь немного.

Если вы повторно используете сессию, но при этом нужна изоляция между задачами, используйте контекст браузера в режиме инкогнито. Такие контексты изолируют cookie, локальное хранилище и кэш друг от друга и от контекста по умолчанию, поэтому отдельные задачи можно выполнять во вкладках одного браузера без утечки данных между ними.

import puppeteer from "@cloudflare/puppeteer";

const browser = await puppeteer.connect(env.MYBROWSER, sessionId);
// or await puppeteer.launch(env.MYBROWSER);

const context = await browser.createBrowserContext();
const page = await context.newPage();
import { connect } from "@cloudflare/playwright";

const browser = await connect(env.BROWSER, sessionId);
// or use the browser returned by acquire()

const context = await browser.newContext();
const page = await context.newPage();

Открывайте новый браузер только тогда, когда нужна полная изоляция на уровне процесса, другая конфигурация браузера или когда браузер стал нестабильным. Для автоматизированных задач создания скриншотов, скрапинга и обхода страниц обычно правильнее повторно использовать сессии и вкладки. Быстрые действия автоматически управляют сессиями и вкладками, поэтому вам не нужно самостоятельно заниматься их повторным использованием.


Безопасность и обработка данных

Хранит ли Cloudflare HTML-контент, который я отправляю на рендеринг?

Для Быстрые действия (кроме /crawl конечная точка), Puppeteer, Playwright, а также CDP, Cloudflare обрабатывает контент эфемерно и не сохраняет отправленный клиентом HTML или сгенерированный результат (например, PDF-файлы или снимки экрана) дольше, чем это необходимо для выполнения операции рендеринга. После возврата ответа контент немедленно удаляется из среды рендеринга.

Есть два исключения, когда данные сохраняются дольше сеанса:

Кэшируется ли отправленный контент, пусть даже временно?

Для Быстрые действия (кроме /crawl конечная точка), сгенерированный контент по умолчанию кешируется на пять секунд (можно настроить до одного дня с помощью cacheTTL параметр, или установите на 0 чтобы отключить кэширование). Этот кэш защищает от повторных запросов одного и того же URL-адреса в рамках одного аккаунта. HTML-контент, отправленный клиентом, сам по себе не кэшируется.

Для Puppeteer, Playwright, а также CDP, кэширование не используется. Содержимое существует только в памяти на время операции рендеринга и удаляется сразу после возврата ответа.

Для /crawl конечная точка, все результаты задания обхода сохраняются в R2 в течение 14 дней после завершения.