
В данной статье напишем нехитрый макрос, который позволит собирать товарные позиции из мобильного приложения в виде скриншотов и сохранять их прямо на телефоне. Далее полученные скриншоты из галереи телефона можно будет использовать, например, чтобы извлекать цены и/или товарные позиции.
Введение. Зачем это вообще нужно.
Вопрос мониторинга цен конкурентов не теряет свою актуальность годами. Компании тратят средства и время, чтобы узнать, что йогурт у соседа на 10 копеек дешевле. Далее полученная информация запускает цепочку событий по формированию собственной цены на товар.
Поэтому давно не секрет, что компании используют как ручной труд своих работников, посещающих конкурентов на регулярной основе, так и труд автоматизированный. В последнем случае используются парсеры, собирающие информацию с сайтов. Так как цены от региона к региону отличаются, то и парсеры должны это учитывать. Учитывать, как многое и другое: капчи, проверку по ip, timeoutы и т.д.
Противостояние парсеров и средств защиты от них приобретает некоторую иронию в эпоху динамично развивающегося ИИ, где с одной и с противоположной стороны роботы.
Здесь мы рассмотрим еще один подход, который не претендует на промышленные масштабы, но позволит выполнять необходимые задачи эффективно. Скорость сбора информации в данном случае не в приоритете.
Хорошо забытое старое.
Переходя к сути, можно назвать скрытой рекламой упоминание достаточно старого приложения — macrodroid.
В свое время он активно помогал при автоматизации и интеграции с умным домом, пока это еще не стало мэйнстримом. Например, переключал 4g на wifi по геолокации при прибытии в родные пенаты, дабы траффик экономить и прочая.
Удивительно, что это приложение прошло сквозь года, продержалось так долго и разработчики его не забросили.
Функционал данного приложения будет использоваться при написании макроса, который, в свою очередь, будет запускаться и работать на мобильном телефоне.
Установка, запуск macrodroid, разрешения приложению.
Проблем вызвать не должна. Подразумевается, что работать будем под ОС android.
На мобильном нужно включить режим разработчика, чтобы оттуда попасть в нужные меню. На каждом телефоне он включается по-разному, не будем заострять здесь внимание. Как это сделать можно легко найти в сети.

Перейдя в параметры разработчика, необходимо включить «место касания», чтобы телефон отображал координаты того места, где будет нажатие пальцем:

После этого сверху на экране появится характерная полоска на которой будут видно координаты нажатия (x,y), а при нажатии на экране будет видно характерное перекрестие:

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

Запуск marcodroid, макросы.
При запуске приложения с непривычки можно потеряться в настройках. Возможно, что приложение не торопится приобретать широкую аудиторию.
Однако, благо, что практически все локализовано и почти интуитивно понятно. Почти, потому что даже не с первого раза понимаешь, чем отличается «протестировать действия» от «запустить макрос». Тем не менее к работе с macrodroid можно привыкнуть.
Еще одно пояснение необходимое перед работой с приложением. Так как оно фактически эмулирует действия пользователя на телефоне по типу selenium (для тех, кто знаком с программированием), то любые запущенные макросы при сбое могут понажимать случайные иконки в интерфейсе телефона так же, как это сделал бы сам пользователь в возрасте 3х лет.
Если что-то пошло не так при работе макроса, не нужно паниковать и торопиться закрывать macrodroid, так как все написанное в макросе может не сохраниться. Достаточно будет просто выключить макрос, не закрывая приложение macrodroid:

Создаем макрос.
Ремарка. Чтобы макрос по ценам отрабатывал более-менее корректно, желательно предварительно зайти в приложение «конкурента» и выбрать адрес магазина, на который мы «заказываем» товары. Лучше выбирать магазины близкие по геопозиции к центру населенного пункта, товарная номенклатура там будет, очевидно, шире, чем у магазина на окраине города.
Запустив приложение, переходим на вкладку макросы внизу экрана, нажимаем большой "+".

Выбираем «действия», там будем выбирать, что macrodroid будет эмулировать. Также на выбор есть «триггеры» и «ограничения».

Первые нужны, чтобы макрос срабатывал при каком-либо событии, например, при загрузке устройства. Вторые сходны с триггерами, только запрещают срабатывать макросу при определенных условиях.
Сосредоточимся на «действиях».
Добавление действий — дело нехитрое. Главное — это запомнить, где какое действие расположено.
В целом наш макрос будет выглядеть примерно так:

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

Дальнейшие действия будут строиться исходя из координат клика на телефоне. Здесь-то и пригодится ранее включенная в настройках разработчика подсветка координат при клике.
Добавить клик просто. Это будет «взаимодействие с интерфейсом»->«нажать»->«позиция x,y»:



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

Действия можно менять местами, если нажать на соответствующий значок. Далее они станут доступными для перетаскивания:

Также очень удобно копировать действия, сохраняя их во временный буфер.
Нажав на действие, выбираем «копировать»:

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

Небольшие сложности на первых этапах вызывают циклы.
Допустим наш нехитрый макрос работает так. «Прокликал» три товара в ряд, сделал свайп(пролистывание страницы вниз). Опять «прокликал» и так далее.
Чтобы не плодить однотипные действия, в macrodroid есть циклы. Для этого нужно просто ряд определенных действий, которые следует повторить, «завернуть» в цикл.
Это не сложно сделать.
Выбираем циклы среди действий -> количество повторений -> ставим сам цикл «вокруг действий к повторению»:


*здесь в один цикл вложено два других цикла.
О минусах подхода работы с marcodroid.
Несмотря на легкую составляющую программирования макросов в marcodroid по типу блоков scratch, иногда сложно добиться «идеального свайпа» по товарным позициям и клик производится в пустоту или хуже того, добавляет в корзину покупок товар и начинается неразбериха. Все-таки не хватает проверки на предмет того, произошел ли переход в экран с товаром, а не в корзину. Здесь помог бы еще «клик по области», как это, по сути делает пользователем пальцем. Согласитесь, пока нет пальца размером 1px.
Второй минус — медленная работа.
До обновления версии android приложение marcodroid позволяло сделать скриншот экрана мобильного без его постдемонстрации пользователю(«показывать интерфейс скриншота») перед сохранением в галерею изображений. Это здорово экономило время. Теперь же постдемонстрация требует целых 6-8 сек паузы перед продолжением действий в макросе.

Третий минус — нет ocr (оптическое распознавание текста) для русского языка. Да и в целом с ocr что-то странное творится. Несмотря на его корректное добавление, он приводит к зависанию макроса. Поэтому для целей ocr текста требуется что-то отдельное.

Четвертый минус заключается в том, что все-таки для овладения макросами требуется какое-то время и новая версия android может принести неприятности как, например, связанные с созданием скриншотов.
Напоследок, о том как временно выключить одно из действий без его удаления из состава макроса. Достаточно нажать на само действие и выбрать выключить.

На этом все, один макрос прилагается для тестов мобильного приложения воображаемого «конкурента».
rutube
youtube
*любые совпадения в названии макросов случайны, автор не несет ответственности за действия макроса на устройствах конечных пользователей.
макрос