ARMANOS

Возможность

Синхронизатор окон

Назначьте один открытый профиль ведущим. Всё, что вы нажимаете, печатаете и прокручиваете в его окне, повторяется в остальных окнах, пока вы работаете.
1
Ведущих окон
120 мс
Очередь вычерпывается раз в
500
Действий держит очередь в странице
5 уровней
Глубина пути к элементу

Одно окно ведёт, остальные повторяют

Синхронизатор живёт в программе, в разделе автоматизации. Вы выбираете один открытый профиль ведущим и отмечаете один или несколько открытых профилей ведомыми. С нажатия кнопки ваши нажатия, набор текста, прокрутка и смена адреса в ведущем окне повторяются в каждом ведомом.

Работу вы по-прежнему делаете своими руками. Программа только переносит сделанное в другие окна. Ничего не пишется заранее и ничего не выполняется без вас.

Нужны хотя бы два уже открытых профиля. Если их меньше, экран говорит об этом и ведёт к списку профилей. На тарифе с одним профилем сказано другое: там ссылка на тарифы, потому что открыть второй профиль попросту невозможно.

Одновременно идёт только один сеанс. Запуск нового останавливает прежний. Полоса состояния считает окна, которые сейчас идут за вами, и обновляется, когда ведомое окно закрывается.

  • Нажатия

    Элемент под указателем и точка попадания внутри окна.

  • Набор текста

    Текст, введённый в поле, у которого есть значение.

  • Прокрутка

    Положение страницы, не чаще одного раза в 120 мс.

  • Девять клавиш перехода

    Ввод, Tab, Backspace, Delete, Esc и четыре стрелки.

  • Смена адреса

    Переход в главном кадре ведущего окна.

Экран синхронизатора в программе ARMANOS с сообщением, что для работы нужно открыть хотя бы два профиля
Экран синхронизатора. Пока открыто меньше двух профилей, он честно отказывает и ведёт к списку профилей.

За ведущим окном следят изнутри страницы

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

На встроенном движке Chromium эти слушатели живут в предзагрузке профиля. Главный процесс взводит их одним сообщением и взводит заново после каждого перехода, потому что предзагрузка перезапускается на каждом принятом документе. Действие идёт по внутренней связи, и главный процесс принимает его, только если отправитель это окно самого ведущего.

У ARMANOS Browser 153.0.7978.0 нашей предзагрузки нет, поэтому те же слушатели внедряются в страницу по протоколу отладки. Они складывают действия в очередь внутри страницы, а главный процесс вычерпывает её раз в 120 мс. Опрос выбран нарочно: приём событий по протоколу требует Runtime.enable, а страница умеет распознать, что он включён.

Чтобы пережить переход, сборщик ещё и записан как сценарий для каждого нового документа. Такая запись срабатывает только при включённом разделе Page, и это выяснено замером на собранном движке, а не чтением руководства. Раздел включается на время сеанса и выключается, когда вы остановили работу.

Только то, что сделал человек

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

Действие едет с путём к элементу и парой долей

Снятое нажатие это не точка на экране. Сборщик строит короткий путь к элементу, по которому вы попали. Опознаватель элемента побеждает сразу. Иначе путь поднимается не выше пяти уровней, называя каждый шаг тегом и местом среди соседей того же тега, и обрывается на первом предке с опознавателем.

Кроме пути запоминается место нажатия внутри окна, двумя долями. Доля по горизонтали это ваша точка, делённая на внутреннюю ширину ведущего окна, по вертикали на внутреннюю высоту. Эти доли и есть запасная дорога, благодаря которой ведомое окно другого размера всё равно получает нажатие в разумном месте.

Набор текста запоминается как путь к элементу и всё текущее значение поля, а не как поток нажатий клавиш. Прокрутка запоминается точными числами. Клавиши перехода запоминаются по имени и переводятся в коды уже при повторе.

ЧтоЧто снимаетсяКак повторяется
НажатиеПуть к элементу, доли по горизонтали и вертикали от окна ведущегоЭлемент ищется по пути и нажимается, иначе нажатие мышью в тех же долях окна ведомого
Набор текстаПуть к элементу и всё значение поляЗначение ставится полю, посылается одно событие ввода
ПрокруткаСмещение страницы по обеим осямПрокрутка к тем же числам
КлавишаИмя клавиши из списка девятиНажатие и отпускание на странице ведомого
ПереходНовый адрес ведущегоОткрывается у ведомого, если он не там же

Повтор целится в элемент, а точка это запасная дорога

У каждого ведомого нажатие сначала пробуется по пути к элементу. Элемент подводится к середине видимой части и нажимается. Именно эта дорога выдерживает ведомое окно другого размера, съехавшую вёрстку или объявление, которое сдвинуло всё вниз.

Если по пути ничего не нашлось, в дело идут доли. Их разворачивают по внутренней ширине и высоте самого ведомого, а не по рамке его окна: у ведущего они снимались именно так. В полученную точку уходят движение мыши, нажатие и отпускание.

На ARMANOS Browser эти события ввода едут по протоколу отладки. У профиля, одетого телефоном, нажатие и отпускание уходят касанием. Движок на таком профиле превращает мышь в касание, а настоящий телефон событий мыши не шлёт вовсе.

Ведомый, только что ушедший на другой адрес, действие просто пропустит. Повторов и накопления нет: придержанное действие попало бы на страницу, с которой вы уже ушли.

Ведёт та вкладка, на которую вы смотрите

Профиль обычно открывается двумя вкладками. Первой идёт стартовая страница ARMANOS, второй заданный вами адрес, и работать вы уходите во вторую.

До 29 августа синхронизатор брал первую вкладку по порядку появления, то есть стартовую страницу. Живой замер на собранном движке показал итог прямо: ведущий нажал дважды и прокрутился до 600, у ведомого ноль и ноль. Теперь вкладка выбирается вопросом к самим страницам, какая из них на виду.

Выбор делается один раз, при запуске, и запоминается и для ведущего, и для каждого ведомого. Пересчёт на каждое действие грозил бы тем, что половина действий уйдёт в одну вкладку, а половина в другую.

Переходы переносятся своей дорогой. На встроенном движке об этом сообщает само окно ведущего. На ARMANOS Browser тот же цикл в 120 мс сверяет адрес ведущего с прошлым. Пустые страницы, страницы ошибок и адреса отладчика не передаются никогда.

  1. 1

    Находится видимая вкладка ведущего

    Каждую его страницу спрашивают, она ли на виду, и отвечает движок, а не наша догадка о порядке появления.

  2. 2

    Тот же вопрос уходит каждому ведомому

    Ведомый, которому нечем ответить, отсеивается до начала сеанса. Если не осталось ни одного, запуск отказывает и говорит об этом.

  3. 3

    Сборщик взводится только у ведущего

    Если взвести не удалось, сеанс не начинается. Наполовину начатый сеанс выглядел бы работающим и не повторял бы ничего.

  4. 4

    Выбранные вкладки запоминаются

    Все дальнейшие действия идут именно в них и уходят в другую вкладку, только если выбранной больше нет.

  5. 5

    Полоса состояния начинает считать

    Она показывает, сколько окон идёт следом, и уменьшает счёт по мере закрытия ведомых окон.

Окна можно разложить, чтобы видеть их разом

Повтор полезен, только если вы видите итог. В программе есть кнопка раскладки окон, и она появляется, как только открыто больше одного профиля.

Сетка строится на том экране, где стоит ваш указатель, внутри его рабочей области. Столбцов берётся квадратный корень из числа окон с округлением вверх, строки считаются следом. Между клетками зазор в шесть точек. Если клетка вышла бы меньше 420 на 320, программа отказывает и объясняет причину, вместо раскладки, в которой ничего не разобрать.

Окна встроенного движка двигает оболочка. Окна ARMANOS Browser это отдельные процессы, оболочке они не поддаются, поэтому их двигает протокол отладки: для него окно браузера это объект. Свёрнутое или развёрнутое окно сначала возвращают в обычное состояние, иначе движок молча отказывает в новом размере.

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

Открыто окон
6
Столбцов и строк
3 на 2
Рабочая область экрана
2560 на 1440
Зазор между клетками
6
Итоговая клетка
845 на 711

Посчитано по той же формуле, что и в коде. Ниже 420 на 320 на клетку ответом будет отказ, а не сетка.

Сеанс заканчивается чисто

Если закрылось окно ведущего, сеанс прекращается целиком. Если пропало окно ведомого, он выбывает из набора и счёт уменьшается. Когда исчез последний ведомый, сеанс завершается сам, а не повторяет действия в пустоту.

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

Ничего не записывается. От сеанса не остаётся ни записи, ни списка перенесённых действий, ни того, что можно было бы проиграть позже.

Синхронизатор для прохода руками, сценарий для рутины

Синхронизатор нужен там, где вы и так работаете, один раз и глядя на экран. Принять одно и то же уведомление о печеньях в восьми учётных записях. Заполнить одну и ту же анкету. Довести одинаковый заказ до одного и того же шага. Ваше решение остаётся в деле, и вы видите каждое окно по ходу.

Сценарий в RPA Plus нужен там, где работу повторят снова. У него есть шаги, условия, переменные, таблица значений по профилям, расписание и журнал прогонов. Он идёт без вас. Написать его дороже, повторить намного дешевле.

Простое правило: если делать больше двух раз, пишите сценарий. Если один раз на пять учётных записей, ведите окно.

  • Один и тот же проход, несколько учётных записей, прямо сейчас

    Синхронизатор. Ничего не надо писать заранее и ничего не остаётся после.

  • Тот же проход, много учётных записей, и снова через неделю

    Сценарий в RPA Plus, с переменными и расписанием.

  • В каждой учётной записи своя работа

    Ни то, ни другое. Откройте профили и работайте в них по отдельности.

Экран RPA Plus в программе ARMANOS с предложением создать первый сценарий, загрузить сценарий из файла или обновить сценарии из учётной записи
RPA Plus это отдельный экран. Сценарий пишут один раз и запускают снова, а это обратный размен по сравнению с ведением окна руками.

Из ведущего окна уезжает всё

То, что вы печатаете у ведущего, попадает к ведомым текстом, включая поле пароля. Ведите окно только на тех сайтах и в тех учётных записях, которые вы намеренно трогаете вместе.

Чего это не делает

  • Едут только нажатия, набор текста, прокрутка, девять клавиш перехода и переход в главном кадре. Перетаскивание, наведение, правая кнопка, выбор файла, сочетания клавиш и действия внутри встроенного кадра не едут.
  • Повтор нацелен, но не проверен. Если у ведомого другая вёрстка, другой язык или страница без входа, нажатие уйдёт мимо или в пустоту, и вам об этом никто не скажет.
  • Набор текста повторяется установкой значения поля и одним событием ввода. Поля, следящие за каждым нажатием клавиши, и редакторы, устроенные не как обычное поле, могут за этим не пойти.
  • Один сеанс за раз и один ведущий. Запуск другого сеанса останавливает идущий.
  • Ничего не записывается. Сеанс нельзя выгрузить, проиграть позже или превратить в сценарий.

Как проверить

Каждое утверждение ниже указывает на файл, который его исполняет, и на стенд, который его сторожит.

Действия ведущего действительно доезжают до окна ведомого и не доезжают до запуска
apps/desktop/src/lib/forkPage.js · apps/desktop/test/синхронизатор-живьём.js
Ведёт видимая вкладка, и выбранные при запуске вкладки служат весь сеанс
apps/desktop/src/main/main.js · apps/desktop/test/синхронизатор-берёт-видимую-вкладку.js
Сборщик на встроенном движке переносит только события, сделанные человеком
apps/desktop/src/main/browser-preload.js · apps/desktop/test/page-ipc-trust.js
Окна ARMANOS Browser действительно переезжают в сетку, и это измерено изнутри страниц
apps/desktop/src/main/main.js · apps/desktop/test/раскладка-живьём.js
Сетка считается сразу для обоих движков и отказывает при слишком мелкой клетке
apps/desktop/src/main/main.js · apps/desktop/test/window-places.js

Попробуйте на двух профилях

Откройте два профиля, выберите ведущего, отметьте второй и запустите. Остановка в одно нажатие.