Всё началось с обычной задачи: мне нужно было обработать множество карточек в проекте «Активного гражданина» на mos.ru, страница https://ag.mos.ru/novelties. Карточки появлялись постоянно, и ручная работа занимала слишком много времени. Я думал, что пойду проверю их по факту появлений, но потом решил: лучше автоматизировать процесс.
Наша цель была проста:
- открывать список актуальных карточек;
- по очереди заходить в каждую;
- находить кнопку рейтинга с надписью «Хорошо»;
- кликать по ней;
- закрывать появившиеся модальные окна;
- и, в конце концов, получить точное количество обработанных карточек.
Первый вопрос: как это сделать? Я перебирал доступные инструменты автоматизации браузера — от простых скриптов на Python до более сложных решений вроде Selenium. Но всё было либо слишком громоздко, либо неудобно для повседневной работы.
Нашёл UI Vision
После небольшого поиска я наткнулся на инструмент UI Vision (в частности, расширение для браузера с макросами UI Vision RPA). Идея была привлекательна: записывать свои действия в браузере как макрос, а затем запускать его многократно. Всё это — без необходимости писать код вручную.
Я быстро освоил базовые команды:
- open — открыть страницу;
- waitForElementPresent — ждать появления элемента;
- storeXpathCount — посчитать элементы по XPath;
- click — клик по элементу;
- if_v2, while_v2 — условия и циклы;
- storeAttribute — получить атрибут элемента (например, href);
- echo — вывести сообщение в лог.
С их помощью я написал макрос, который:
- Запускается по бесконечному циклу while_v2 с ограничением на 9999 проходов.
- Каждый проход открывает страницу:
https://ag.mos.ru/novelties?filters=active - Ждёт появления списка карточек (//ag-cards-list-container//a).
- Считает количество карточек через storeXpathCount.
- Если карточек нет — ставит переменную finished = 1 и выходит из цикла.
- Берёт первую карточку, получает её href и сохраняет в currentUrl.
- Если currentUrl совпадает с lastUrl — значит, мы уже обрабатывали эту карточку, и цикл тоже завершается.
- Клик по первой карточке, переход внутрь.
- Ждёт появления кнопки рейтинга с надписью «Хорошо».
- Если кнопка не найдена — цикл завершается.
- Клик по кнопке «Хорошо».
- Пауза 200 мс.
- Проверка, появилось ли модальное окно (ag-modal/div[2]), и если есть — клик для закрытия.
- Увеличение счётчика обработанных карточек doneCount.
- Вывод в лог: Обработано: ${doneCount}.
В конце макрос проверял finished и выводил итог:
Работа завершена. Обработано карточек: ${doneCount}.
Возникла проблема: счётчик не работал
Всё было почти готово, но тут появилась критическая проблема: счётчик doneCount не увеличивался. В логе я видел:
textОбработано: javascript{Number(storedVars.doneCount) + 1}
То есть вместо числа — текст. А в первой попытке выполнения макроса UI Vision вообще выдавал ошибку:
textError in executeScript code: storedVars is not defined
Я долго искал, что не так. В скрипте использовалась команда:
json{
"Command": "store",
"Target": "javascript{Number(storedVars.doneCount) + 1}",
"Value": "doneCount"
}
Это старый синтаксис из storeEval, где для доступа к переменным использовался объект storedVars. В новых версиях UI Vision (RPA v7+) команда executeScript уже не работает с storedVars. Переменные доступны напрямую, и их нужно подставлять через ${varName}.
Правильный подход оказался таким:
json{
"Command": "executeScript",
"Target": "return Number(${doneCount}) + 1;",
"Value": "doneCount"
}
Ключевые моменты:
- используем executeScript, а не store ... javascript{...};
- внутри кода variables подставляются как ${doneCount};
- возвращаем новое значение через return.
После этой замены счётчик стал работать: в логе появился нормальный числовой результат:
textОбработано: 1
Обработано: 2
Об_processed: 3
...
Работа завершена. Обработано карточек: 57
Что я получил в итоге
С этим макросом я:
- автоматизировал полную обработку карточек в «Активном гражданине»;
- избавился от ручного клика по каждой карточке;
- получил точный итоговый счётчик обработанных карточек;
- сэкономил огромное количество времени.
Макрос теперь можно запускать:
- вручную, когда нужно быстро обработать новые карточки;
- периодически, по расписанию, чтобы не пропускать появившиеся проекты.
Кому это может быть полезно
- Тем, кто работает с сайтами «Активного гражданина» и mos.ru, копит баллы для обмена на ценные призы и регулярно сталкивается с большими списками карточек.
- Тем, кто хочет автоматизировать повторяющиеся действия в браузере, но не хочет писать код на Python/JS.
- Тем, кто уже использует UI Vision, но столкнулся с проблемами старого синтаксиса storedVars и storeEval.
Итог
Эта задача показала, как один инструмент — UI Vision — может превратить утомительную ручную работу в полностью автоматический процесс. Главное — не бояться экспериментировать с командами, читать документацию и, конечно, правильно использовать новые версии синтаксиса.
Если вы тоже столкнулись с проблемой storedVars is not defined или счётчик не увеличивается — попробуйте заменить старую команду store ... javascript{...} на executeScript с return Number(${var}) + 1;. Это простое изменение спасает макрос от краха и делает его стабильным.
Где скачать расширение
UI Vision — это бесплатное расширение для браузера, которое можно установить в один клик:
- Google Chrome:https://chromewebstore.google.com/detail/uivision/gcbalfbdmfieckjlnblleoemohcganoc
Нажмите «Добавить в Chrome» → «Добавить расширение». - Microsoft Edge:На странице https://ui.vision нажмите «for Edge» и добавьте расширение из магазина Edge.
- Mozilla Firefox:https://addons.mozilla.org/ru/firefox/addon/rpa/
Нажмите «Добавить в Firefox» → «Добавить».
После установки в правом верхнем углу браузера появится значок UI.Vision RPA (иконка с камерой/роботом).
Как использовать скрипт в UI Vision
1. Откройте интерфейс макросов
- Нажмите на значок UI.Vision RPA в панели браузера.
- Откроется окно расширения. В левом нижнем углу убедитесь, что выбран режим Macro (не Vision).
- В списке макросов вы увидите пустой список или встроенные примеры.
2. Создайте новый макрос
- Нажмите кнопку + Macro (или иконку «плюс»).
- Введите имя макроса, например: New.
- Нажмите Confirm.
3. Вставьте наш JSON-скрипт
У вас есть два варианта:
Вариант A: Импорт через Source
- В окне макроса перейдите во вкладку Source (источник).
- Сотрите всё содержание поля.
- Вставьте весь JSON-код скрипта, который я дал выше (от { до }).
- Нажмите Save (или кнопку дискеты).
Вариант B: Ручной ввод (если импорт не работает)
Если импорт JSON не работает, можно создать макрос вручную, добавляя команды по одной:
- В панели макроса нажмите + Add command.
- Для каждой строки скрипта выберите:
Command — тип команды (например, store, while_v2, open, click, executeScript);
Target — целевое значение (XPath, JavaScript, URL и т.д.);
Value — значение переменной (если нужно). - После ввода всех команд нажмите Save.
Но для вашего случая удобнее именно импорт через Source — так вы сразу получите полный рабочий макрос.
4. Запустите макрос
- Убедитесь, что макрос выбран в списке.
- Нажмите кнопку Play (треугольник) в верхнем меню расширения.
- Макрос начнёт выполнение:
откроет https://ag.mos.ru/novelties?filters=active;
начнёт проходить по карточкам;
кликать «Хорошо», закрывать модальные окна;
выводить в лог:
Текущая карточка: /novelties/24522
Обработано: 1
Обработано: 2
и т.д.
5. Отслеживайте прогресс
- В окне UI Vision вы увидите лог выполнения с командами:
[info] Executing: ...
[echo] Текущая карточка: ...
[echo] Обработано: ... - Если всё работает корректно, в конце вы увидите:textРабота завершена. Обработано карточек: 57(или другое число, в зависимости от количества карточек).
Скачать макрос можно по ссылке
Это простой текстовый файл
Перед запуском убедитесь, что:
вы авторизованы в «Активном гражданине» (вошли в свой аккаунт);
в браузере нет блокировщиков, которые мешают работе скрипта.
- Если макрос работает слишком быстро, добавьте pause в нужные места (например, pause | 500 вместо 200).
- Если элементы не находятся, возможно, структура страницы изменилась — тогда нужно исправить XPath-выражения в командах waitForElementPresent, storeXpathCount, click.
Всем удачных самоделок и мирного неба над головой!