Браузер (Browser)
Настоящий браузер на холсте — открыть страницу, нажать, ввести текст, снять экран или описать цель модели.
Блок Браузер (Browser) открывает сайт так, как это делает человек: страница запускается в настоящем Chromium (движок браузера, тот же, что у Google Chrome). Видно и то, что появляется только после скриптов, — обычный HTTP-запрос такой страницы часто отдаёт пустую заготовку.
На холсте одно поле Действие. От него зависят остальные поля. Тип блока — browser.
Два способа работы
- Точные действия — вы сами указываете, что сделать: открыть адрес, нажать элемент, ввести текст, снять экран. Один блок — одно действие. Несколько блоков можно связать одной сессией (номер открытого браузера: следующий блок продолжает на той же странице).
- Задание модели — вы описываете цель словами в поле Задание. Модель сама читает страницу и выбирает шаги, держа один браузер открытым до конца прогона.
| Когда | Что выбрать в Действие |
|---|---|
| Страница известна, шаги короткие и повторяемые | Открыть страницу, Нажать, Ввести текст, Снимок экрана |
| Нужно войти, кликнуть и прочитать результат на одном живом браузере | Те же точные действия + переключатель Держать браузер открытым |
| Путь по сайту заранее не ясен, важна цель, а не каждый клик | Выполнить задание (ИИ) |
Параметры, общие для всех действий
Эти поля есть у каждого действия. Сессия и Держать браузер открытым — в расширенном режиме блока.
| Параметр | На холсте | Тип | Обязательный | Смысл |
|---|---|---|---|---|
operation | Действие | строка | да | Что делает этот блок. Значения: browser_navigate, browser_click, browser_type, browser_screenshot, browser_run_task |
url | Адрес | строка | да, если нет сессии | Страница, которую открыть перед действием. Только http и https в открытом интернете. Если блок продолжает уже открытый браузер, поле можно оставить пустым |
sessionId | Сессия | строка | нет | Продолжить браузер, который предыдущий блок оставил открытым. Обычно <browser1.sessionId> |
keepSession | Держать браузер открытым | логическое | нет | Не закрывать браузер после шага и вернуть sessionId. На последнем блоке цепочки выключите |
Нужен либо Адрес, либо Сессия. Оба пустые — блок не знает, на какой странице работать.
Точные действия
По умолчанию каждое точное действие открывает новый пустой браузер и закрывает его после ответа: вход, cookie (небольшие данные, по которым сайт узнаёт вошедшего) и наполовину заполненная форма не сохраняются. Поэтому Адрес обязателен, пока вы не передаёте сессию.
Общее дополнительное поле точных действий (у задания модели его нет — модель сама решает, когда подождать):
| Параметр | На холсте | Тип | Обязательный | Смысл |
|---|---|---|---|---|
waitForText | Дождаться текста | строка | нет | Ждать этот текст после загрузки и уже потом нажимать или вводить. Нужен на страницах, которые дорисовываются |
Открыть страницу (browser_navigate)
Загружает адрес и возвращает, что на странице.
Вход
Дополнительных полей нет — достаточно общих параметров.
Выход
| Параметр | Тип | Смысл |
|---|---|---|
url | строка | Адрес после действия, с учётом переадресаций |
title | строка | Заголовок вкладки |
content | строка | Что на странице: заголовки, ссылки, кнопки и поля с текстом. Это не HTML, а краткое дерево страницы |
truncated | логическое | true, если содержимое обрезали: страница слишком большая |
sessionId | строка | Номер браузера — только если включено Держать браузер открытым |
Дальше удобно отдать <browser1.content> в блок Агент и вытащить нужную часть.
Нажать (browser_click)
Нажимает элемент и возвращает страницу, которая получилась.
Вход
| Параметр | На холсте | Тип | Обязательный | Смысл |
|---|---|---|---|---|
target | Элемент | строка | да | CSS-селектор — краткая запись, по которой браузер находит элемент, например button#login |
Выход
Те же поля, что у Открыть страницу.
Ввести текст (browser_type)
Печатает в поле. Удобно для поиска и для заполнения формы по одному полю в цепочке сессий.
Вход
| Параметр | На холсте | Тип | Обязательный | Смысл |
|---|---|---|---|---|
target | Элемент | строка | да | CSS-селектор поля, например input[name='q'] |
text | Текст | строка | да | Что ввести |
submit | Нажать Enter после ввода | логическое | нет | Отправить форму, как клавишей Enter |
Выход
Те же поля, что у Открыть страницу.
Снимок экрана (browser_screenshot)
Фотографирует страницу. Картинка приходит строкой data URI (изображение, вшитое в текст) — её читают блок Vision и Агент.
Вход
| Параметр | На холсте | Тип | Обязательный | Смысл |
|---|---|---|---|---|
fullPage | Вся страница | логическое | нет | Снять страницу целиком с прокруткой, а не только видимый кусок |
Выход
Те же поля, что у Открыть страницу, плюс:
| Параметр | Тип | Смысл |
|---|---|---|
screenshot | строка | Картинка data:image/png;base64,… |
Как взять селектор
- Откройте ту же страницу в своём браузере.
- Нажмите на элемент правой кнопкой → Просмотреть код.
- Ещё раз правой кнопкой по строке в коде → Копировать → Копировать селектор.
- Вставьте значение в Элемент.
Короткий селектор по идентификатору или имени поля (button#login, input[name='q']) переживает смену вёрстки лучше, чем длинная цепочка div > div:nth-child(3) > span.
Цепочка блоков на одной сессии
Вход одним блоком, заполнение формы вторым, чтение результата третьим — на одном живом браузере. Правило: у каждого блока кроме последнего включено «Держать браузер открытым», а каждый следующий получает sessionId предыдущего.
- Первый блок: укажите Адрес, включите Держать браузер открытым. В выходах появится
sessionId. - Следующие блоки: в Сессия вставьте
<browser1.sessionId>(подставьте имя своего блока). Адрес оставьте пустым, если нужно остаться на текущей странице. Если адрес всё же указан, браузер сначала перейдёт по нему. - Последний блок: Держать браузер открытым выключено. Браузер закроется,
sessionIdв ответе не будет.
Браузер 1 Ввести текст (логин) Адрес: https://portal.example/login Держать открытым: да
Браузер 2 Ввести текст (пароль) Сессия: <browser1.sessionId> Держать открытым: да
Браузер 3 Нажать «Войти» Сессия: <browser2.sessionId> Держать открытым: да
Браузер 4 Открыть страницу заказов Сессия: <browser3.sessionId> Держать открытым: нетЧто важно заранее:
- Открытый браузер не ждёт вечно. Если к нему не возвращаются 5 минут, он закрывается, и номер сессии перестаёт действовать. Отсчёт начинается заново после каждого использования.
- Одновременно ждут не больше 10 браузеров. Когда нужен одиннадцатый, закрывается тот, к которому дольше всех не заходили.
- Ошибка в действии закрывает браузер. Продолжать в нём нечего.
- Неизвестная или просроченная сессия — понятная ошибка: «браузер больше не открыт». Так же бывает после перезапуска приложения: список открытых браузеров живёт в памяти и перезапуск не переживает.
- Задание модели тоже умеет передать сессию следующему заданию — см. ниже про вход с подтверждением на телефоне.
Задание модели (browser_run_task)
Действие Выполнить задание (ИИ) работает наоборот: вы не перечисляете клики, а пишете цель. Модель читает каждую страницу, выбирает шаг и в конце отвечает словами. Один браузер живёт весь прогон: вход и работа за ним — один блок.
Ответ приходит на том языке, на котором написано Задание.
Пишите проверяемый результат, не сценарий кликов. В задании должны быть цель, входные данные и ограничения, какие изменения на сайте разрешены, по какому видимому признаку считать работу законченной, что вернуть и когда остановиться для человека. Стартовый адрес держите в Адрес, не копируйте его в текст. Не вставляйте пароли и токены буквально. Не придумывайте селекторы и имена внутренних действий — модель смотрит на открытую страницу сама.
Плохо: «Открой сайт, нажми первую кнопку, затем вторую и проверь заказ».
Хорошо: «Найди последний оплаченный заказ клиента <start.customerId>. Ничего не изменяй. Задача выполнена, когда на странице заказа видны номер, статус и дата оплаты. Верни эти три значения. Если нужен вход или подтверждение, которого нет в текущей сессии, остановись и запроси человека».
Вход
| Параметр | На холсте | Тип | Обязательный | Смысл |
|---|---|---|---|---|
task | Задание | текст | да | Цель обычными словами |
url | Адрес | строка | да, если нет сессии | С какой страницы начать |
sessionId | Сессия | строка | нет | Продолжить браузер предыдущего блока |
keepSession | Держать браузер открытым | логическое | нет | После задания оставить браузер открытым и отдать sessionId |
model | Модель | строка | нет | Какая модель ведёт браузер. Пусто — модель этой установки. В списке модели, которые платформа уже отдаёт в рабочем пространстве |
maxSteps | Предел шагов | число | нет | Сколько шагов можно сделать. По умолчанию 15, максимум 40 |
vision | Смотреть на экран | строка | нет | Снимки: По необходимости (auto, по умолчанию), Всегда, Никогда. «По необходимости» снимает экран, только когда модель застряла |
outputSchema | Формат ответа | JSON | нет | Схема ответа (текстовый формат обмена данными). Если задана, кроме текста заполняется выход data. Поле расширенного режима |
Поля Сессия и Держать браузер открытым нужны, только чтобы передать ту же страницу следующему блоку. Внутри одного задания браузер и так не закрывается между шагами. Поля Дождаться текста у задания нет.
Модель может открывать страницы, нажимать, вводить текст, заполнять форму, ждать, искать на странице, переключать вкладки, снять экран для себя, закончить работу или попросить человека. Произвольный код на странице и произвольные запросы от имени сессии она выполнить не может.
Выход
| Параметр | Тип | Смысл |
|---|---|---|
answer | строка | Ответ человеку, причина паузы или текст сбоя |
status | строка | Чем закончилось: done, needs_human, max_steps, timeout, error |
success | логическое | true только если модель сама объявила задание выполненным |
data | JSON | Структурный ответ по схеме — если схему задавали |
memory | строка | Что модель считала достигнутым к концу |
steps | JSON | Шаги: цель, действия и чем каждое кончилось. Смотрите в журнале прогона |
url | строка | Адрес страницы, на которой прогон остановился |
title | строка | Заголовок этой страницы |
screenshot | строка | Снимок — только при needs_human и error |
sessionId | строка | Номер оставленного открытым браузера — только при Держать браузер открытым |
При обычном успешном завершении снимка в выходах нет: картинка кабинета оседает в журнале, и блок отдаёт её только когда без неё не разобраться.
Если следующие блоки должны читать поля, а не разбирать текст, задайте Формат ответа:
{
"type": "object",
"properties": {
"order_number": { "type": "string" },
"status": { "type": "string" },
"delivery_date": { "type": "string" }
},
"required": ["order_number", "status"]
}Тогда придут и answer, и data с теми же значениями по полям.
Статусы задания
status | Что случилось | Что делать в сценарии |
|---|---|---|
done | Модель объявила работу законченной. Смотрите ещё success: false значит «закончила, но не добилась» | Читать answer и data |
needs_human | Встретилась капча (проверка «вы не робот»), код из СМС или вход по QR. Блок не обходит такие проверки | Оставьте браузер открытым, подтвердите вход сами, продолжите вторым заданием с тем же sessionId |
max_steps | Кончился предел шагов | Смотреть steps. Слепо поднимать предел редко помогает |
timeout | Кончилось общее время прогона | Разбить цель на несколько блоков или упростить задание |
error | Сбой: страница не открылась, действие окончательно не удалось, модель трижды повторила одно и то же | Ветка ошибок. В steps и screenshot видно, где остановилось |
Капчу, код из СМС и вход по QR блок не разгадывает. Это не недоделка: правильный ответ — пауза с человеком, а не обход.
Вход с подтверждением на телефоне
Одно задание не проходит экран «подтвердите в приложении»: оно останавливается со статусом needs_human. Страницу можно передать второму заданию.
- Задание 1 — «войти и остановиться на экране подтверждения». Включите Держать браузер открытым. В ответе будет
sessionId. - На телефоне примите вход. Успеть нужно за 5 минут простоя сессии.
- Задание 2 — вставьте этот
sessionIdв Сессия, Адрес оставьте пустым, в Задании опишите, что делать дальше.
Чего блок не делает
- Не открывает адреса с логином и паролем внутри URL (
https://user:pass@…). - Не ходит во внутреннюю сеть (
127.0.0.1,192.168.*, имена без точки). Нужен внутренний портал — это настройка всей установки, не поле блока. - Не выполняет произвольный код на странице и не шлёт произвольные запросы с cookie открытой сессии.
- Не помнит страницу после ошибки, после 5 минут простоя и после перезапуска приложения.
- Не даёт гарантии как у интеграции по API: сменилась вёрстка — селектор точного действия может сломаться. Задание модели обычно опирается на подписи кнопок, но и оно не контракт.
- Не подходит для длинного «покликай 40 раз»: предел шагов — потолок, не цель. На известной странице точные действия быстрее и предсказуемее. Прогон задания идёт минуты, не секунды.
Примеры
Прочитать публичную страницу
Старт → Браузер (Открыть страницу) → Агент (выбрать поля) → ОтветВойти и прочитать кабинет точными действиями
Браузер (ввод логина, держать открытым) → Браузер (ввод пароля, сессия) → Браузер (нажать «Войти», сессия) → АгентЦель словами, данные следующему блоку
Браузер (Выполнить задание, Формат ответа) → Условие по status → Функция или канал