Pailot

Браузер (Browser)

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

br

Блок Браузер (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,…

Как взять селектор

  1. Откройте ту же страницу в своём браузере.
  2. Нажмите на элемент правой кнопкой → Просмотреть код.
  3. Ещё раз правой кнопкой по строке в коде → Копировать → Копировать селектор.
  4. Вставьте значение в Элемент.

Короткий селектор по идентификатору или имени поля (button#login, input[name='q']) переживает смену вёрстки лучше, чем длинная цепочка div > div:nth-child(3) > span.

Цепочка блоков на одной сессии

Вход одним блоком, заполнение формы вторым, чтение результата третьим — на одном живом браузере. Правило: у каждого блока кроме последнего включено «Держать браузер открытым», а каждый следующий получает sessionId предыдущего.

  1. Первый блок: укажите Адрес, включите Держать браузер открытым. В выходах появится sessionId.
  2. Следующие блоки: в Сессия вставьте <browser1.sessionId> (подставьте имя своего блока). Адрес оставьте пустым, если нужно остаться на текущей странице. Если адрес всё же указан, браузер сначала перейдёт по нему.
  3. Последний блок: Держать браузер открытым выключено. Браузер закроется, 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 только если модель сама объявила задание выполненным
dataJSONСтруктурный ответ по схеме — если схему задавали
memoryстрокаЧто модель считала достигнутым к концу
stepsJSONШаги: цель, действия и чем каждое кончилось. Смотрите в журнале прогона
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. Задание 1 — «войти и остановиться на экране подтверждения». Включите Держать браузер открытым. В ответе будет sessionId.
  2. На телефоне примите вход. Успеть нужно за 5 минут простоя сессии.
  3. Задание 2 — вставьте этот sessionId в Сессия, Адрес оставьте пустым, в Задании опишите, что делать дальше.

Чего блок не делает

  • Не открывает адреса с логином и паролем внутри URL (https://user:pass@…).
  • Не ходит во внутреннюю сеть (127.0.0.1, 192.168.*, имена без точки). Нужен внутренний портал — это настройка всей установки, не поле блока.
  • Не выполняет произвольный код на странице и не шлёт произвольные запросы с cookie открытой сессии.
  • Не помнит страницу после ошибки, после 5 минут простоя и после перезапуска приложения.
  • Не даёт гарантии как у интеграции по API: сменилась вёрстка — селектор точного действия может сломаться. Задание модели обычно опирается на подписи кнопок, но и оно не контракт.
  • Не подходит для длинного «покликай 40 раз»: предел шагов — потолок, не цель. На известной странице точные действия быстрее и предсказуемее. Прогон задания идёт минуты, не секунды.

Примеры

Прочитать публичную страницу

Старт → Браузер (Открыть страницу) → Агент (выбрать поля) → Ответ

Войти и прочитать кабинет точными действиями

Браузер (ввод логина, держать открытым) → Браузер (ввод пароля, сессия) → Браузер (нажать «Войти», сессия) → Агент

Цель словами, данные следующему блоку

Браузер (Выполнить задание, Формат ответа) → Условие по status → Функция или канал
На этой странице

На этой странице

Получить доступ
Копилот собирает процесс. Менеджер запускает сам. Можно поставить в контур компании.
Получить доступ