Перейти к содержимому

Автоматизация

Расписания и запуск без окна

ARMANOS запускает сценарий по расписанию на выбранных профилях и умеет открывать профиль без окна. И то и другое держится на одном правиле: прогон идёт на вашем компьютере, а пропущенное не догоняется втихую.
Каждый день, по выбранным дням, каждые 1 до 24 часов
Как часто
Раз в 30 секунд, внутри программы
Опрос расписаний
30 минут запаса, дальше слот считается пропущенным
Опоздание
--headless=new, и без --disable-gpu рядом
Довод движку

Из чего состоит расписание

В каждом расписании вы указываете один сценарий и профили, по которым он пойдёт. Без сценария расписания не бывает, поэтому правила «просто открыть пять профилей в девять и оставить их так» здесь нет.

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

  • Сценарий

    Что запускать. Расписание без него было бы будильником, который звонит в пустоту.

  • Профили

    Те, по которым пойдёт сценарий, и все они из вашего пространства.

  • Как часто

    Каждый день, по выбранным дням недели или каждые 1 до 24 часов.

  • Во сколько

    Час и минуты в виде ЧЧ:ММ, по вашему местному времени.

  • Одновременно

    От 1 до 5 профилей разом, поэтому тридцать профилей это очередь, а не тридцать входов в одну минуту.

  • Пауза

    «Пауза» и «Продолжить» без потери настроек.

Экран «Сценарии» в ARMANOS, список сценариев ещё пуст
Расписание всегда принадлежит сценарию, поэтому живёт на этом экране. У этой учётной записи сценариев пока нет.

Прогон идёт у вас

У программы свои часы: раз в 30 секунд она смотрит, каким расписаниям пора, и запускает их. Ваш аккаунт расписания только хранит, чтобы они переезжали между вашими машинами, и сам их не исполняет.

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

Что программа говорит дословно

Расписание работает, пока открыта ARMANOS. Служб в системе мы не ставим, поэтому на выключенном ноутбуке запуск не состоится.

Время местное и остаётся местным

«Каждый день в 9:00» это девять утра там, где вы сидите. Девять утра останутся девятью и после перевода часов, потому что дважды в год сутки длятся не двадцать четыре часа.

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

Пропущенное не догоняется залпом

Допустим, компьютер спал трое суток и три срока не состоялись. Сейчас вы их не получите, и это самое сознательное решение во всей этой части продукта.

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

Тридцать минут запаса

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

  1. 1

    Вы открыли крышку

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

  2. 2

    Просроченные сроки уходят вперёд

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

  3. 3

    Вам говорят о потерянном

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

  4. 4

    Дальше как обычно

    Ближайший срок сработает в своё время, без очереди позади.

Почему прогон пропущен

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

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

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

Где хранятся расписания

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

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

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

Профиль без окна

Работа без окна это галочка «Запускать без окна (для автоматизации)» в настройках профиля, а не галочка, повторённая в четырёх окнах. Браузер работает как обычно, профиль всё так же виден открытым, и кнопка «Остановить» его останавливает.

Галочку вы ставите один раз, и её слушается кнопка «Запустить», групповой запуск, сценарий и расписание. Программа на этом же компьютере может через локальный API попросить спрятать окно на один прогон: запуск эту просьбу послушает, а раскладка окон и подстановка пароля по-прежнему смотрят на галочку в профиле.

  • Вторые окна наследуют решение

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

  • Раскладка их пропускает

    «Разложить окна» не берёт скрытые профили в сетку, вместо того чтобы оставлять в ней дыру.

  • Подстановка пароля молчит

    На встроенном движке логин и пароль подставит программа, и скрытое окно на передний план не выскочит. На ARMANOS Browser подстановки нет.

  • Копии остаются скрытыми

    Копия ночного профиля тоже ночная, и заготовки для пакетного создания эту галочку сохраняют.

  • Без фоновой экономии

    Скрытое окно не душат, поэтому сценарий внутри него не ползёт.

О чём просят движок

ARMANOS Browser запускается с доводом --headless=new. Прежний режим убран из самого Chromium и в этой сборке просто не включается.

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

Та же машина с окном и без

Привычный спутник --disable-gpu мы нарочно не ставим: он убирает WebGL целиком, а браузер без WebGL это примета громче, чем браузер без окна. Скрытый профиль открывается на одном адресе, а остальные ваши адреса встают вкладками, когда браузер уже поднялся.

Замерено на
Собранном движке Windows 153.0.7978.0, 4 сентября
Новый режим, без нашего User agent
Страница читает HeadlessChrome/153.0.0.0
Новый режим, User agent из отпечатка
Страница читает собственный браузер профиля
Два адреса разом
Движок отказывает и выходит с кодом 13

С окном и без окна страница читает один и тот же компьютер: тот же профиль открыт дважды и сверен поле за полем.

Замерено, а не предположено

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

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

  • Пока ARMANOS закрыта или спит, не работает ничего: служб в системе нет и запуска в облаке нет, поэтому закрытый ноутбук свой срок пропускает. Выход из аккаунта часы не останавливает, и расписания идут дальше на бесплатной норме, пока программа открыта.
  • Пропущенные сроки не догоняются никогда. Вы получаете число и предупреждение, а не сами прогоны.
  • Правила повтора жёсткие: каждый день, выбранные дни недели или каждые 1 до 24 часов. Ни выражений cron, ни разового запуска по дате, ни промежутка короче часа.
  • Расписанию всегда нужен сценарий, а разводит запуски только поле «Одновременно». Расписания, которое просто открывает профили, нет, и случайной паузы между ними тоже нет.
  • Запуск без окна убирает окно, а не приметы. Браузер по-прежнему занимает память, по-прежнему считается в пределе открытых профилей и по-прежнему судится по отпечатку.

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

За каждым утверждением выше стоит строка кода и стенд. Откройте файл, потом прогоните стенд.

Опрос, дележ квоты и причины пропуска работают внутри настольной программы
apps/desktop/src/main/main.js · apps/desktop/test/schedule-runs.js
Местное время переживает перевод часов, а пропущенные сроки считаются, но не догоняются
apps/desktop/src/lib/schedules.js · apps/desktop/test/schedule-runs.js
Сервер хранит расписания на пространство и никогда их не исполняет
apps/server/src/schedules/schedules.service.ts · apps/server/test/schedules-shared.js
Приехавшее из аккаунта расписание ложится выключенным, и его есть чем включить здесь
apps/desktop/src/lib/schedules.js · apps/desktop/test/расписание-включается-здесь.js
Запуск без окна просит --headless=new, сохраняет подмену User agent и не добавляет --disable-gpu
apps/desktop/src/lib/forkEngine.js · apps/desktop/test/скрытый-режим.js · apps/desktop/test/скрытое-окно-не-душат-живьём.js

Вопросы

Что будет, когда подписка подходит к концу?
У подписки есть 3 дня отсрочки после даты продления, а без связи с аккаунтом программа работает до 24 часов. Дальше наступившие сроки проходят мимо, и ничего не копится на потом.
Могут ли два моих компьютера сработать по одному расписанию?
Только если вы сами включите его на обеих. На вторую машину расписание приезжает с пометкой «не на этой машине» и кнопкой «Включить здесь», и эта отметка живёт на машине, а не в аккаунте: две сессии одного аккаунта из двух мест это ровно та примета, от которой продукт и защищает.
Двигает ли «Запустить сейчас» ближайший срок?
Нет. Оно запускает сценарий тут же и расписание не трогает, поэтому нажатие в восемь утра не отменяет прогон в девять.
Что записывается после прогона?
Итог одним знаком: ok, stopped или error:2/5, а словами вы читаете его на своём языке. Сценарий по двадцати профилям идёт часами, поэтому настоящий исход вы увидите в конце.
Может ли скрипт спрятать профиль на один запуск?
Да. Запуск без окна можно попросить и в теле запроса, и в его строке, а значения 0, false и пустое означают «нет», поэтому ночной скрипт скроет профиль, которым днём вы работаете с окном.
Когда окно лучше оставить на экране?
На первый вход и на всё, где возможны код, капча или подтверждение, а также пока вы собираете сценарий.

Поставьте ночной прогон на часы

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