Сборщик сценариев
Автоматизация без кода
- 19
- Видов шагов
- 4 уровня
- Глубина вложенности
- до 8 за прогон
- Профилей одновременно
- 100 на профиль за прогон
- Снимков экрана
Из чего состоит сценарий
У сценария есть имя, список шагов по порядку, свои переменные и выбранные профили. Всё это принадлежит самому сценарию, а выбор переживает перезапуск программы.
Сценарии лежат на вашем компьютере, в папке данных программы, и на macOS и Linux читать их может только ваша учётная запись. В шагах часто стоит логин или значение формы.
Видов шагов сегодня девятнадцать: тринадцать простых и шесть для работы посложнее. Посложнее это ветвление, обход списка, вкладки, куки, свой JavaScript и ожидание сетевого запроса.
| Шаг | Что делает |
|---|---|
| Перейти по URL | Открывает адрес в текущей вкладке |
| Ожидание | Ждёт заданное время или появления элемента |
| Клик | Подводит элемент к виду и нажимает его середину |
| Ввод текста | Ставит курсор в поле, чистит его и печатает значение |
| Набрать как человек | Печатает значение по буквам настоящими нажатиями клавиш, с паузами между ними и, если попросить, с опечатками, которые тут же стираются |
| Прокрутка | Прокручивает на столько-то точек или до элемента |
| Извлечь текст | Кладёт текст элемента в переменную |
| Снимок экрана | Сохраняет PNG страницы |
| Нажать клавишу | Посылает странице одно нажатие |
| Случайная задержка | Ждёт случайное время между двумя границами |
| Повтор | Выполняет своё тело заданное число раз |
| Профиль: заметка, теги, статус | Дописывает или заменяет заметку, добавляет или снимает теги, ставит статус профилю, на котором идёт проход |
| Записать в файл | Пишет строку прогона в файл TXT, CSV, XLSX или JSON в папке данных сценария |
| Если / иначе | Проверяет страницу или переменную и идёт одной из двух сторон |
| Для каждого элемента | Выполняет тело по разу на каждый найденный элемент |
| Управление вкладками | Открывает, переключает или закрывает вкладку того же профиля |
| Куки | Читает, пишет и удаляет куки этой сессии, чистит куки текущего адреса |
| Выполнить JavaScript | Выполняет ваш код в странице и кладёт результат в переменную |
| Ждать запрос | Ждёт, пока страница запросит названный вами адрес |

Шаги вы добавляете руками
Записи ваших действий здесь нет. Каждый шаг вы добавляете через форму: выбрать вид, заполнить нужные поля, сохранить.
Пока вы правите, вам сразу видно поломки, которые иначе вылезли бы посреди прогона на живом аккаунте. Клик без цели, ожидание без времени и без элемента, извлечение без переменной.
Каждое замечание называет номер шага, и ошибку вы отличите от предупреждения сразу. Сохранить можно и так: незаконченный сценарий это нормальная рабочая ситуация.
Что уезжает вместе со сценарием
Переменные под каждый профиль
В любое текстовое поле шага можно вписать {{имя}}. При запуске каждый профиль подставит туда своё значение, а неизвестное имя даст пустую строку, а не ошибку.
Каждый профиль набирает свои значения из трёх слоёв: значения самого сценария, встроенные поля профиля, ваши правки под выбранными профилями. Так один сценарий входит в двадцать аккаунтов, а не двадцать копий сценария.
Имя переменной вы пишете любым письмом, на всех 22 языках программы. Прочитанный со страницы текст тоже ложится в переменную, до 4000 знаков, а в журнале шаг ввода текста показывает точки вместо значения из переменной.
profile.name
Имя профиля, каким оно стоит в вашем списке.
profile.id
Номер профиля, тот же, что называет местный API.
profile.group
Группа, в которой лежит профиль.
profile.totp
Одноразовый код из собственного ключа профиля, вычисленный в миг подстановки, а не в начале прогона.
now
Дата и время с поясом этого компьютера, в миг подстановки.
Циклы и ветвления
Повтор выполняет своё тело от 1 до 1000 раз. В счёт идут сами шаги, а не обёртка вокруг них, поэтому полоса хода показывает настоящую работу.
Ветвление проверяет страницу или переменную и выполняет только победившую сторону. Какая сторона победит, заранее не знает никто, поэтому полоса хода досчитывает шаги по дороге и доходит до конца, а не встаёт раньше времени.
Обход списка берёт селектор и потолок проходов, по умолчанию десять, и на каждом проходе читает список заново. Вне цикла ссылка на текущий элемент ничего не находит: иначе нажатие ушло бы на то, чего вы не выбирали.
Много профилей одна очередь
Одновременность бывает 1, 2, 3, 5 или 8. Больше профилей разом, чем стоит в настройке «Браузеров одновременно» на экране «Движок», не пойдёт: число считано по памяти этой машины, и вы можете поставить своё.
Упёршись в предел, профиль ждёт свободного места, а не уходит в провал. Ждёт он до получаса, пробуя каждые пять секунд, и только потом вы увидите отказ.
Можно уйти на другой сценарий: прогон идёт дальше, а сверху едет полоска с кнопкой «Остановить». Нажмите её посреди цикла: прогон доделает текущий шаг и на нём остановится, а не оборвётся посреди действия.
- Одновременность
- 1, 2, 3, 5, 8
- Профилей открыто разом
- не больше, чем «Браузеров одновременно»
- Браузеров одновременно
- (память минус 3 ГБ) по гигабайту, снизу 4, сверху 32
- Ожидание места
- опрос каждые 5 с, до 30 мин
- Журнал шагов
- 600 строк хранится, в окно идут последние 400, видны последние 120
Эти числа сняты с работающей программы, а число «Браузеров одновременно» она считает по памяти вашей машины.
Когда шаг не удался
Упавший шаг вы увидите в журнале с ошибкой, и счёт провалов у профиля вырастет. Что профиль делает дальше, решает правило сценария, и строка прямо над кнопкой «Запустить сценарий» называет его у открытого сценария: новый сценарий останавливает этот профиль на упавшем шаге, а остальные профили идут дальше. Сценарий, сделанный в прежней версии ARMANOS, работает как работал, и профиль берётся за следующий шаг.
«Готово» значит «сделано то, что написано». Если у профиля провалился хоть один шаг, профиль помечен провалом с числом, а вместе с ним провален и весь прогон.
Это число честное и на длинном прогоне: журнал хранит только последние строки, а счёт провалов идёт отдельно от него. Знакомые ошибки вы прочитаете на своём языке, а всё прочее показано ровно так, как пришло.
Отладка, отмена и повтор
«Отладка отсюда» у шага запускает сценарий на одном профиле с этого шага, с кнопками «Пауза», «Один шаг» и «Продолжить». Упавший шаг останавливает отладку; поправьте его, и «Продолжить отсюда» пойдёт дальше на той же открытой странице с теми же переменными.
«Отменить» и «Повторить» над шагами возвращают любую правку сценария, до 100 шагов, привычными Cmd или Ctrl+Z. Выбор профилей не отменяется.
Чем сценарий правит браузером
ARMANOS Browser это отдельный процесс Chromium, и сценарий ведёт его по каналу отладки на петле. Встроенным движком сценарий правит через его собственное окно, но шаг вы пишете один раз: какой движок под ним, на шаге не сказывается.
Область, которую читает страница, не включается
Из протокола отладки ARMANOS не включает Runtime.enable: от неё движок ставит зацепки, которые код страницы способен заметить. Сценарию она и не нужна: готовность страницы он спрашивает сам, а не подписывается на события.
- Движок в этой таблице
- ARMANOS Browser 153.0.7978.0
- Runtime.enable
- не вызывается никогда
- Page.enable
- на время прогона сценария, на его вкладках, чтобы ответить на alert или confirm страницы; и на вкладках профиля, у которого место рядом с прокси или свои координаты, пока у движка нет своего поставщика места
- Network.enable
- с первого шага ожидания запроса, на вкладках профиля
- Заголовок Origin при рукопожатии
- не посылается
Зацепки Runtime.enable и ищут известные приёмы со временем разбора и с выводом в консоль. Заголовка Origin ARMANOS не посылает: за него движок потребовал бы лишний ключ в командной строке, а её видит любая программа машины.
Что это даёт и чего не даёт
Запуск по расписанию
Расписание принадлежит сценарию и называет профили, время и сколько профилей идут разом, до пяти. Ежедневно в такое-то время, по выбранным дням недели или каждые N часов.
Время местное, поэтому после перевода часов девять утра остаётся девятью утра. Пропущенные запуски вы увидите числом, и пачкой вдогонку они не пойдут.
Расписание срабатывает, только пока программа открыта, и окно говорит об этом прямо. Профиль, открытый прямо сейчас, оно не трогает.
Как поставить расписание
- 1
Выберите сценарий
Нажмите кнопку с часами в его строке списка.
- 2
Выберите время
Ежедневно, по дням недели или каждые N часов, по местному времени.
- 3
Выберите профили
Отметьте их и укажите, сколько идут одновременно.
- 4
Прочитайте итог
В строке видно последний прогон, его исход и число пропусков.
Чего это не делает
- Записи действий здесь нет. Программа не следит за вашими нажатиями и не превращает их в шаги, каждый шаг вы добавляете руками через форму.
- Сценарий это скрипт, а не человек. Он повторяет написанное с заданными паузами, а сайт, сменивший вёрстку, ломает селектор.
- Капчу не разгадывает, картинки не распознаёт, обучаемых шагов нет. Если сайт задаёт человеческий вопрос, сценарий на нём встанет.
- Расписание работает, только пока открыта программа. Служб в системе мы не ставим, закрытый ноутбук пропускает запуски, а пропущенное никогда не выполняется пачкой.
- Выключенные области отладки убирают одну примету. Это не утверждение об обнаружении вообще, и здесь ничто не обещает, что площадка примет ваш прогон за человека.
Как проверить
Каждое утверждение, файл, который его выполняет, и стенд, который его стережёт.
- Шаг перехода не пускает схемы вроде file и javascript, и адрес проверяется ещё раз при запуске, после подстановки переменных
- apps/desktop/src/lib/rpa.js · apps/desktop/test/rpa-reach.js
- Экран «Сценарии» называет поломки до прогона и никогда не запрещает сохранение
- apps/desktop/src/lib/flowCheck.js · apps/desktop/test/flow-check.js
- «Готово» значит, что шаги отработали: профиль с провалившимся шагом помечен провалом по счётчику, а не по обрезанному журналу
- apps/desktop/src/main/main.js · apps/desktop/test/run-result-honest.js
- Новый сценарий останавливает профиль на упавшем шаге, сценарий из прежней версии берётся за следующий, а строка над кнопкой «Запустить сценарий» называет правило
- apps/desktop/src/lib/исполнитель-графа.js · apps/desktop/test/граф-исполнитель.js · apps/desktop/test/сценарий-графом-в-окне.js
- Прогон, упёршийся в число «Браузеров одновременно», ждёт места, а не записывает профиль в провал
- apps/desktop/src/main/main.js · apps/desktop/test/сценарий-ждёт-места.js
- Сценарий вправду идёт на ARMANOS Browser по каналу отладки, и Runtime.enable не зовётся ни разу
- apps/desktop/src/lib/cdp.js · apps/desktop/src/lib/forkPage.js · apps/desktop/test/области-отладки.js
Вопросы
- Куда попадают снимки экрана?
- В папку внутри данных программы, созданную так, что на macOS и Linux читает её только ваша учётная запись, до 100 снимков на профиль за прогон. Кнопка в шапке карточки прогона открывает эту папку, поэтому файлы доступны и после перезапуска.
- Сколько сценариев и шагов помещается в файл?
- Двести сценариев, пятьсот шагов в одном списке и не больше четырёх уровней вложенности. Пределы стоят затем, чтобы правленный руками или привезённый файл не заставил программу считать бесконечно.
- Может ли мой код подвесить прогон?
- Нет. У шага со своим кодом стоит предел, по умолчанию шестьдесят секунд, поэтому неотвечающий код страницы кончается обычной ошибкой шага.
- Работает ли сценарий на мобильном профиле?
- Да. На мобильном профиле шаг клика посылает касание, а не нажатие мыши, и это замерено на живом окне, а не предположено.
- Что будет с расписанием, приехавшим из аккаунта?
- На этой машине оно ложится выключенным, чтобы две открытые копии программы не запустили один сценарий дважды. Включите его одной кнопкой в списке расписаний.
Рядом
Расписание
Ежедневные, недельные и почасовые запуски по местному времени, без догона пропущенного.
Локальный API
Список сценариев и запуск прогона из вашей собственной программы на этой машине.
Синхронизатор
Повтор ваших действий из одного открытого профиля в остальных, вживую и без скрипта.
Куки-робот
Сценарий, который выдаёт каждому профилю свой порядок обхода сайтов.
Соберите один сценарий и запустите его на десяти профилях
Экран «Сценарии», журнал шагов и расписание живут в самой программе. Ничто из сценария не покидает ваш компьютер, пока вы не выгрузите его сами или не отправите в аккаунт.