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

Начало работы

Cloudflare Browser Run (ранее Browser Rendering) позволяет программно управлять headless-браузером: делать снимки экрана, создавать PDF-файлы и выполнять другие автоматизированные задачи в браузере. Это руководство поможет вам выбрать подходящий способ интеграции и приступить к работе над первым проектом.

Browser Run предлагает два типа методов интеграции:

Сценарий использования Рекомендуется Почему
Простой скриншот, PDF-файл или скрейпинг Быстрые действия Без развёртывания кода: один HTTP-запрос
Автоматизация браузера Playwright, Puppeteer, или CDP Полное управление браузером с помощью скриптов
Перенос существующих скриптов Puppeteer, Playwright, или CDP Минимальные изменения кода по сравнению со стандартными библиотеками
Извлечение данных на основе ИИ JSON-эндпойнт Структурированные данные через запросы на естественном языке
Сканирование всего сайта Эндпоинт для сканирования Извлечение контента с нескольких страниц с асинхронными результатами
Просмотр веб-страниц ИИ-агентом Playwright MCP или CDP с клиентами MCP LLM управляют браузерами через MCP
Устойчивый скрапинг Stagehand ИИ находит элементы по намерению, а не по селекторам
Прямое управление браузером из любой среды CDP Доступ по WebSocket с локальных машин, из CI/CD или с внешних серверов

Быстрые действия

Quick Actions можно использовать через REST API или напрямую из Cloudflare Worker с помощью привязки браузера.

Предварительные требования

Пример: создание скриншота

curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<accountId>/browser-rendering/screenshot' \
  -H 'Authorization: Bearer <apiToken>' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://example.com"
  }' \
  --output "screenshot.png"

Предварительные требования

Пример: создание скриншота из Worker

1. Создайте проект Worker

Создайте новый проект Worker с именем browser-quick-action выполнив:

npm create cloudflare@latest -- browser-quick-action

Для настройки выберите следующие параметры:

  • Для С чего вы хотите начать?, выберите Hello World example.
  • Для Какой шаблон вы хотите использовать?, выберите Worker only.
  • Для Какой язык вы хотите использовать?, выберите TypeScript.
  • Для Хотите использовать git для контроля версий?, выберите Yes.
  • Для Хотите развернуть приложение?, выберите No (мы внесём некоторые изменения перед развёртыванием).

2. Настройка привязки браузера

Обновите ваш конфигурационный файл Wrangler с браузером привязка:

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "name": "browser-quick-action",
  "main": "src/index.ts",
  // Set this to today's date
  "compatibility_date": "2026-08-28",
  "browser": {
    "binding": "BROWSER"
  }
}
name = "browser-quick-action"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-28"

[browser]
binding = "BROWSER"

3. Написание кода Worker

Замените содержимое src/index.ts на следующее:

export default {
	async fetch(request, env) {
		return await env.BROWSER.quickAction("screenshot", {
			url: "https://example.com",
		});
	},
};
interface Env {
	BROWSER: BrowserRun;
}

export default {
	async fetch(request, env): Promise<Response> {
		return await env.BROWSER.quickAction("screenshot", {
			url: "https://example.com",
		});
	},
} satisfies ExportedHandler<Env>;

Этот Worker использует привязку browser binding, чтобы сделать снимок экрана example.com и возвращает изображение непосредственно в ответе.

4. Тестирование

Запустите npx wrangler dev --remote чтобы протестировать Worker локально.

Откройте локальный URL, чтобы увидеть скриншот.

5. Разверните

Запустите npx wrangler deploy чтобы развернуть Worker в глобальной сети Cloudflare.

К другим эндпоинтам Quick Actions относятся:

Ознакомьтесь с полным списком Конечные точки Quick Actions.

Browser Sessions

Предварительные требования

  1. Зарегистрируйтесь для получения Аккаунт Cloudflare ↗.
  2. Установка Node.js ↗.

менеджер версий Node.js

Используйте менеджер версий Node, например Volta ↗ или nvm ↗ чтобы избежать проблем с правами доступа и переключать версии Node.js. Wrangler, о котором пойдёт речь далее в этом руководстве, требует версию Node 16.17.0 или более поздней версии.

Пример: переход по URL, создание скриншота и сохранение в KV

1. Создайте проект Worker

Cloudflare Workers предоставляет бессерверную среду выполнения, которая позволяет создавать новые приложения или дополнять существующие без настройки и обслуживания инфраструктуры. Ваше Worker-приложение служит контейнером для взаимодействия с headless-браузером и выполнения таких действий, как создание скриншотов.

Создайте новый проект Worker с именем browser-worker выполнив:

npm create cloudflare@latest -- browser-worker

Для настройки выберите следующие параметры:

2. Установка Puppeteer

В вашем browser-worker директории установите пакет Cloudflare форк Puppeteer:

npm i -D @cloudflare/puppeteer

3. Создание пространства имён KV

Browser Run можно использовать вместе с другими продуктами для разработчиков. Вам может понадобиться реляционная база данных, Бакет R2 чтобы архивировать просканированные страницы и ресурсы, Durable Object чтобы экземпляр браузера оставался активным и использовался несколькими запросами, или Queues чтобы обрабатывать ваши задания асинхронно.

В этом примере мы будем использовать Хранилище KV чтобы кэшировать скриншоты.

Создайте два пространства имён: одно для продакшена и одно для разработки.

npx wrangler kv namespace create BROWSER_KV_DEMO
npx wrangler kv namespace create BROWSER_KV_DEMO --preview

Запишите идентификаторы (ID) для следующего шага.

4. Настройка конфигурационного файла Wrangler

Настройте свой browser-worker проекта конфигурационный файл Wrangler добавив привязку browser привязка и Флаг совместимости с Node.js. Привязки позволяют вашим Workers взаимодействовать с ресурсами платформы разработчика Cloudflare. Ваш браузер binding задаётся вами, в этом руководстве используется имя MYBROWSER. Привязки браузера обеспечивают взаимодействие между Worker и headless-браузером, что позволяет выполнять такие действия, как создание снимка экрана, генерация PDF и другое.

Обновите ваш конфигурационный файл Wrangler с привязкой Browser Run API и пространствами имён KV, которые вы создали:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "browser-worker",
	"main": "src/index.js",
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"compatibility_flags": ["nodejs_compat"],
	"browser": {
		"binding": "MYBROWSER"
	},
	"kv_namespaces": [
		{
			"binding": "BROWSER_KV_DEMO",
			"id": "22cf855786094a88a6906f8edac425cd",
			"preview_id": "e1f8b68b68d24381b57071445f96e623"
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "browser-worker"
main = "src/index.js"
# Set this to today's date
compatibility_date = "2026-08-28"
compatibility_flags = [ "nodejs_compat" ]

[browser]
binding = "MYBROWSER"

[[kv_namespaces]]
binding = "BROWSER_KV_DEMO"
id = "22cf855786094a88a6906f8edac425cd"
preview_id = "e1f8b68b68d24381b57071445f96e623"

5. Код

Обновите src/index.js с кодом Worker:

import puppeteer from "@cloudflare/puppeteer";

export default {
	async fetch(request, env) {
		const { searchParams } = new URL(request.url);
		let url = searchParams.get("url");
		let img;
		if (url) {
			url = new URL(url).toString(); // normalize
			img = await env.BROWSER_KV_DEMO.get(url, { type: "arrayBuffer" });
			if (img === null) {
				const browser = await puppeteer.launch(env.MYBROWSER);
				const page = await browser.newPage();
				await page.goto(url);
				img = await page.screenshot();
				await env.BROWSER_KV_DEMO.put(url, img, {
					expirationTtl: 60 * 60 * 24,
				});
				await browser.close();
			}
			return new Response(img, {
				headers: {
					"content-type": "image/jpeg",
				},
			});
		} else {
			return new Response("Please add an ?url=https://example.com/ parameter");
		}
	},
};

Обновите src/index.ts с кодом Worker:

import puppeteer from "@cloudflare/puppeteer";

interface Env {
	MYBROWSER: Fetcher;
	BROWSER_KV_DEMO: KVNamespace;
}

export default {
	async fetch(request, env): Promise<Response> {
		const { searchParams } = new URL(request.url);
		let url = searchParams.get("url");
		let img: Buffer;
		if (url) {
			url = new URL(url).toString(); // normalize
			img = await env.BROWSER_KV_DEMO.get(url, { type: "arrayBuffer" });
			if (img === null) {
				const browser = await puppeteer.launch(env.MYBROWSER);
				const page = await browser.newPage();
				await page.goto(url);
				img = (await page.screenshot()) as Buffer;
				await env.BROWSER_KV_DEMO.put(url, img, {
					expirationTtl: 60 * 60 * 24,
				});
				await browser.close();
			}
			return new Response(img, {
				headers: {
					"content-type": "image/jpeg",
				},
			});
		} else {
			return new Response("Please add an ?url=https://example.com/ parameter");
		}
	},
} satisfies ExportedHandler<Env>;

Этот Worker создаёт экземпляр браузера с помощью Puppeteer, открывает новую страницу, переходит по адресу, указанному в параметре 'url', делает снимок экрана, сохраняет его в KV, закрывает браузер и возвращает в ответе JPEG-изображение снимка.

Если ваш Worker работает в продакшене, скриншот будет сохранен в продакшен-неймспейс KV. Если вы запускаете wrangler dev, он сохранит снимок экрана в пространство имён KV для разработки.

Если тот же url запрашивается снова, будет использована кешированная версия в KV, если она ещё не устарела.

6. Тестирование

Запустите npx wrangler dev чтобы протестировать Worker локально.

Чтобы проверить создание первого снимка экрана, перейдите по следующему URL-адресу:

<LOCAL_HOST_URL>/?url=https://example.com

7. Разверните

Запустите npx wrangler deploy чтобы развернуть Worker в глобальной сети Cloudflare.

Чтобы сделать первый снимок экрана, перейдите по следующему URL-адресу:

<YOUR_WORKER>.<YOUR_SUBDOMAIN>.workers.dev/?url=https://example.com

Следующие шаги

Если у вас есть пожелания по функциям или вы заметили ошибку, поделитесь отзывом напрямую с командой Cloudflare, присоединившись к Сообщество разработчиков Cloudflare в Discord ↗.