# Настоящий браузер для ИИ-агентов и служб

> Fractera AI Browser

Настоящий браузер на вашем сервере для машин: открывает страницы и веб-приложения так, как их открывает человек, и возвращает то, что на них на самом деле есть.

Память, другие службы и агенты дают ему адреса и получают итоговый HTML после скриптов, весь текст, заголовки, ссылки, кнопки, формы, поля и медиа по атрибутам — по нескольким страницам за один вызов. Ролики YouTube приходят с данными и субтитрами с метками времени.

- Страницы такими, какими их видит человек
- Внутрь машины не достать
- Работает на вашем сервере

- [Читать API](https://ai-browser.aifa.dev/ru/settings?section=api)
- [Открыть паспорт](https://ai-browser.aifa.dev/ru/passport)

## Какую задачу решает

Агент, читающий веб простыми HTTP-запросами, видит пустые заготовки страниц, которые рисуют скрипты, и мета-теги вместо содержимого. А браузер рядом с вашими данными — отдельный риск, если страница может заставить его стучаться во внутренние двери машины.

ИИ-браузер — отдельный микросервис со своим адресом, своим ключом и своими страницами. Он делает одно: открывает то, что ему дали, настоящим браузером и возвращает результат в виде, пригодном для программы.

## Как проходит запрос

Один вход, и каждый шаг между зовущим и страницей — проверка.

1. **Зовущий.** Программа присылает адреса с ключом, процесс этой машины — с секретом машины.
2. **Проверка адреса.** Схема и адрес проверяются раньше, чем появится вкладка: только http и https, никогда машина, петля или частная сеть.
3. **Защищённая вкладка.** У каждого адреса свой контекст браузера и свой прокси. Куки одной страницы не достаются следующей.
4. **Настоящий браузер.** Camoufox открывает страницу и ждёт документ, событие load и тишину сети — у каждого ожидания свой предел.
5. **Ответ.** Итоговый HTML, текст, элементы и медиа по атрибутам и список того, что было отвергнуто.

## Что возвращается

Поверхностный разбор элементов и медиа по атрибутам — и весь текст и код страницы.

- **Итоговый HTML и текст.** HTML целиком после исполнения скриптов и весь видимый текст — не исходник, присланный сервером.
- **Структура.** Заголовок, lang, canonical, мета-теги и заголовки h1–h6 с уровнями.
- **Интерактивные элементы.** Ссылки, кнопки, формы и поля с именами, подписями, подсказками и вариантами выбора.
- **Медиа по атрибутам.** Картинки, видео, звук и фреймы по атрибутам: адрес, alt, постер, длительность, заголовок.

## Внутрь машины не достать

Браузер стоит рядом со слоем данных и другими службами. Страница не должна получить его руки внутри машины.

- **До вкладки.** Схема, буквальный IP и разрешённое имя проверяются до открытия вкладки: петля, частные сети, link-local и адреса самой машины отвергаются.
- **На каждом запросе.** Весь выход браузера идёт через собственный прокси службы для этого адреса. Он сам разрешает имена и соединяется только с проверенным адресом — перенаправления и WebSocket тоже.
- **Без обхода.** Движок браузера запущен так, что даже петля идёт через прокси; по умолчанию Firefox отправил бы её мимо.

## YouTube

Тот же браузер, свой метод: youtube возвращает содержание ролика, а не страницу вокруг него.

- **Данные ролика.** Название, описание, канал, длительность, даты публикации и загрузки, просмотры, ключевые слова — со страницы самого ролика.
- **Субтитры с метками времени.** Берутся из запроса, который делает плеер при включении субтитров, строками [мм:сс–мм:сс] текст. Язык можно попросить.
- **Что досталось и почему.** Субтитров нет или плеер их не отдал — данные ролика, transcript: null и причина словами.

## Стенд «Тест чтения»

Служба поставляется со стендом за входом архитектора. Он зовёт тот же договор, что и любая программа, — второго пути в браузер нет.

- Вставить адреса по одному в строке и увидеть ровно тот ответ, который получает программа.
- Раскрыть итоговый HTML, видимый текст, заголовки, интерактивные элементы и списки медиа.
- Увидеть, что страница пыталась достать внутри машины и получила отказ.

`/{язык}/settings?section=read-test`

## Быстрый старт и примеры API

Один REST API, один ключ. Два метода: прочитать страницы, прочитать ролик YouTube.

### Прочитать приложение, которое рисуют скрипты

```bash
curl -X POST https://ai-browser.your-domain.com/v1/read \
  -H "Content-Type: application/json" -H "x-ai-browser-key: YOUR_KEY" \
  -d '{ "urls": ["https://todomvc.com/examples/react/dist/"] }'
```

### Прочитать несколько страниц одним вызовом

```bash
curl -X POST https://ai-browser.your-domain.com/v1/read \
  -H "Content-Type: application/json" -H "x-ai-browser-key: YOUR_KEY" \
  -d '{ "urls": [
    "https://developer.mozilla.org/en-US/docs/Web/HTML",
    "https://en.wikipedia.org/wiki/Web_browser",
    "https://example.com/"
  ] }'
```

### Прочитать ролик YouTube: данные и субтитры с метками времени

```bash
curl -X POST https://ai-browser.your-domain.com/v1/youtube \
  -H "Content-Type: application/json" -H "x-ai-browser-key: YOUR_KEY" \
  -d '{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "lang": "en" }'
```

## Пределы

Пределы названы в самом ответе, а обрезанное помечено: список из 300 ссылок при 2 000 на странице несёт total: 2000.

| Что | Предел |
|---|---|
| Адресов за вызов | 10 |
| Вкладок одновременно | 3 |
| Время на адрес | 90 с |
| Итоговый HTML страницы | 5 000 000 знаков |
| Видимый текст страницы | 1 000 000 знаков |
| Каждый список элементов | 300 записей |

## Установка

Про установку нужно знать ровно одно.

Один запуск робота-установщика Fractera на вашем сервере поднимает все микросервисы платформы, включая ИИ-браузер: движок браузера, его библиотеки, nginx и ключ доступа настраиваются за вас.

## Философия разработки

- **Один путь в браузер.** Стенд, API и каждый метод открывают страницы через одну защищённую вкладку. Второй путь в браузер обошёл бы запрет адресов.
- **Отказы названы.** У каждого отказа вечный код и причина: url-forbidden, page-timeout, not-youtube, video-unavailable. Неоткрывшийся адрес не роняет остальные в том же вызове.
- **Ничего не молчит.** Обрезанное помечено, незагрузившееся названо. load_reached: false значит, что страница отдана, не дождавшись события load.

## Вопросы и ответы

Короткие ответы на то, о чём спрашивают до интеграции.

### Зачем настоящий браузер, а не простой HTTP-запрос?

Потому что многие страницы рисуют скрипты. Простой запрос к TodoMVC получает 645 знаков HTML, браузер после скриптов отдаёт 3 289 — список, поле ввода, кнопки. Простой запрос видит пустую заготовку, браузер — страницу, которую видит человек.

### Может ли открытая страница достать что-то внутри моего сервера?

Нет. Адреса самой машины, петли, частных сетей и link-local отвергаются до открытия вкладки и ещё раз на каждом запросе страницы — картинках, фреймах, fetch, перенаправлениях и WebSocket. Весь выход браузера идёт через собственный прокси службы: он сам разрешает имя и соединяется только с проверенным адресом. Прибор на сервере считает обращения к слушателю на петле: ноль, в том числе после перенаправления на 127.0.0.1.

### Что именно приходит в ответ?

По каждому адресу: итоговый адрес и код, заголовок, итоговый HTML целиком, весь видимый текст, lang и canonical, мета-теги, заголовки h1–h6, ссылки, кнопки, формы и поля с подписями, картинки, видео, звук и фреймы по атрибутам — у каждого списка items и total. И ещё — что страница пыталась достать и получила отказ, и дождалась ли она события load.

### А если у ролика YouTube нет субтитров?

Данные ролика всё равно приходят — название, описание, канал, длительность, даты, просмотры — с transcript: null и причиной словами. Субтитры берутся из запроса самого плеера; если плеер их не отдал, ответ говорит это, а не отдаёт пустой успех.

### Насколько это быстро?

Лёгкая страница открывается за несколько секунд, тяжёлая с десятками сторонних ресурсов — за 20–60 с. До 10 адресов за вызов, одновременно 3, на адрес 90 с. Измерено на эталонном сервере: три тяжёлые страницы одним вызовом — около 95 с.

### Входит ли он на сайты и проходит ли защиту от ботов?

Нет. Браузер не входит на сайты под учётной записью и не проходит проверки на ботов. Если сайт вместо содержимого показал страницу проверки, вы получите её с кодом ответа — измерено: проверка безопасности Vercel пришла кодом 403 со своим заголовком.

### Кто его зовёт?

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

### Где он работает?

На вашем сервере. Браузер, его кэш и каждая открытая страница остаются на машине; стороннего сервиса скрейпинга посередине нет.

## Проект Fractera на GitHub

Fractera AI Browser — один из микросервисов платформы Fractera, инженерной инфраструктуры для автономных агентов. Весь проект, включая эту службу, с открытым исходным кодом.

- https://github.com/Fractera/Agentic-Engineering-Infrastructure

---

Source page: https://ai-browser.aifa.dev/ru
