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

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

  • мониторинг новостей по ключевым словам

  • проверка организаций в открытых реестрах

  • мониторинг цен и скидок

  • отслеживание авиабилетов

  • мониторинг появления новых объявлений и вакансий, и т.п.

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

Браузерное расширение

Чтобы мониторинг работал круглосуточно, не мешая мне пользоваться основным ПК, было решено установить расширение в браузере на отдельном виртуальном сервере (VPS).

Для комфортной работы был арендован VPS с 2 ядрами, 4GB RAM и операционной системой Ubuntu 24.04. По умолчанию сервер выдается с root доступом и без графического интерфейса, поэтому первым делом создадим нового пользователя (например myrobot) с надежным паролем и установим рабочий стол:

root@vps:~# adduser myrobot
root@vps:~# apt update && apt install ubuntu-desktop-minimal -y

Чтобы к рабочему столу виртуального сервера можно было подключиться удаленно, установим пакет XRDP:

root@vps:~# apt install xrdp -y

Теперь на наш сервер можно заходить используя штатное "Подключение к удаленному рабочему столу" в Windows, или же с помощью любого XRDP-клиента для Linux, например Remmina (в десктопном Ubuntu установлен по умолчанию).

Подключаемся, вводим имя пользователя и пароль:

Запускаем браузер FireFox и устанавливаем расширение Automa напрямую из каталога аддонов, или загрузив его с GitHub. То же самое можно сделать и для браузера Google Chrome, если вы предпочитаете его.

Работа с Automa предельно проста – все действия моделируются с помощью блоков действий, соединяемых стрелками. В качестве примера попробуем создать простого робота, который будет ежедневно мониторить мою карму на Habr и отправит сообщение в Telegram, когда она вырастет. Смотрим:

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

Настройка мониторинга кармы в Automa

Шаг 1. Настройка расписания запуска
Запускаем в браузере плагин Automa, создаем новое задание, и в блоке "Trigger" настраиваем его ежедневный старт.

Шаг 2. Создаем новую вкладку и открываем страницу пользователя
Для открытия страницы в новой вкладке находим слева блок "New Tab" и перетаскиваем его в созданный нами проект. В настройках блока указываем URL страницы пользователя, где будем смотреть карму.

Шаг 3. Добавляем условие для проверки уровня кармы
Используя блок "Conditions" и встроенный селектор элементов, получаем значение кармы со страницы пользователя, а также задаем условие для дальнейшей отправки уведомления (если карма >30).

Шаг 4. Настраиваем отправку сообщения в Телеграм
Этот шаг наиболее трудоемкий, поскольку предполагает создание собственного телеграм бота для отправки сообщений через API с помощью блока "HTTP request".

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

  1. Запустите BotFather в своем Telegram и, чтобы создать бота, введите команду /newbot

  2. Дайте название своему боту и подберите для него имя пользователя. Имя должно заканчиваться на "bot", оно будет использоваться в Телеграм как юзернейм бота (@ИМЯ), а также в ссылке для быстрого доступа к нему: https://t.me/ИМЯbot
    Если вы получите сообщение об ошибке, выберите другое имя, так как большинство имен уже занято.

  3. BotFather пришлет сообщение о создании бота со ссылкой на него и секретным токеном.

  4. Откройте в браузере ссылку https://api.telegram.org/botXXX:YYYY/getUpdates, где вместо XXX:YYYY укажите секретный токен созданного бота. В ответ вы увидите что-то вроде: {"ok":true, "result":[]}

  5. Добавьте созданного бота в свой Телеграм, перейдя по ссылке https://t.me/ИМЯbot, и напишите ему любое сообщение, например "Hello!"

  6. Еще раз откройте (или обновите) ссылку из пункта 4, и в новом полученном ответе найдите идентификатор чата. Он должен быть здесь: "chat":{"id":xxxxxxxxxx,

  7. Теперь, чтобы отправить сообщение в Телеграм, нам достаточно подставить свой секретный токен и идентификатор чата в ссылку: https://api.telegram.org/botXXX:YYYY/sendMessage?chat_id=xxxxxxxxxx&text=Karma is more than 30. Congratulations!

    В нашем проекте эту ссылку следует вставить в блок "HTTP request", указав метод запроса как "GET".

Шаг 5. После каждого запуска вкладку браузера будем закрывать
Добавим в проект блок "Close tab" и свяжем с ним двумя стрелками блок "Conditions", проверяющий уровень кармы. Теперь после каждой проверки, независимо от значения кармы, вкладка браузера будет закрываться.

Шаг 6. Добавим переменную, чтобы остановить проверки после отправленного уведомления
Как только карма достигнет 30, мы получим сообщение об этом. Но если не остановить задание, сообщения продолжат отправляться ежедневно.
Чтобы этого избежать, введем дополнительную переменную $$karma_checker_stopped, и будем проверять ее при каждом запуске задания.
По умолчанию, значение переменной установим как 0, а когда сообщение будет отправлено, оно измениться на 1.

Шаг 7. Тестируем: для нашего пользователя, и другого, у которого карма >30
Сначала вручную запустим задание для нашего пользователя (kaspra), но ввиду низкого уровня кармы уведомление не отправляется. В тестовых целях заменим пользователя на случайного, с кармой выше 30 (writer), и снова запустим задачу. Как видим, сообщение успешно доставлено.

Преимущества Automa:

  • бесплатное и удобное ПО с открытым исходным кодом

  • используется свой чистый IP, что позволит избежать появления капч и срабатывания антиботов

  • можно использовать не только для мониторинга, но и для эмуляции часто повторяющихся действий в браузере

  • встроенный планировщик заданий, интеграция с сервисами Google, блок Javascript для вставки произвольного кода, и многое другое
     

Недостатки:

  • для постоянного мониторинга требуется держать компьютер включенным. Это решается заказом недорогого виртуального сервера

  • нужно немного времени, чтобы посмотреть как организована работа с хранением данных (переменные и таблицы) и "набить руку" с синтаксисом их написания. Для этого есть большая база знаний

  • в данный момент замечена нестабильная работа режима записи действий (значок ⦿ в меню расширения). О баге уже сообщили разработчикам

Облачный сервис

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

В результате, при каком-либо (любом) изменении значения кармы, мы получим уведомление по электронной почте.

Преимущества:

  • простой и понятный

  • бесплатный для небольшого числа проверок

  • интеграции с Google Sheets, Zapier, Webhooks и др.

  • доступ через API
     

Недостатки:

  • ограниченный функционал, в основном предназначенный для отслеживания изменений и извлечения данных

  • созданные задачи запускаются на серверах Browse AI, сетевые адреса которых могут быть хорошо знакомы антироботам. У меня, например, возникла сложность с загрузкой сайта Skyscanner

Вывод

Хотя оба рассмотренных решения хороши, я отдаю предпочтение браузерному расширению, которое успешно решает все поставленные задачи. Что касается Browse AI, то даже в рассмотренном примере мониторинга кармы, у меня не вышло реализовать такую же логику ее проверки и отправки уведомлений в Telegram, как в Automa.

Комментарии (6)


  1. Furriest
    15.08.2024 12:48
    +1

    В наш питоновый век эта задача решается скриптом на 62 (специально посмотрел, и это левой задней ногой написано, можно ужать вполовину) строки. У меня такой скрипт мониторит появление билетов на концерты определенных авторов.

    Логика простейшая — дергаем страницу через requests, опционально выбираем в ней нужное через beautifulsoup4, считаем хэш результата через hashlib, если изменился относительно предыдущего (который храним в базе) — рассылаем в телеграм уведомление всем подписавшимся через тот же requests и обновляем хэш в базе. Запускаем кроном в нужный интервал.

    Если не нужно множества подписчиков и получатель известен заранее - можно исключить СУБД и хранить хэш в обычных текстовых файлах или в json-упакованном словаре.


    1. 0xC0CAC01A
      15.08.2024 12:48

      Да, только обычно на этой странице есть ещё ссылки на новости, реклама и прочий меняющийся мусорный контент, вот тут-то и начинаются пляски с бубном. Или будет "мы на вас обиделись, вот вам каптча"


      1. Furriest
        15.08.2024 12:48

        Мусор хорошо отфильтровывается через тот же beautifulsoup. А с капчей - да, больно, но боюсь, что описанные сервисы с ней тоже не очень-то умеют справляться.


    1. 9982th
      15.08.2024 12:48

      В наш век SPA на странице, которую вы выдернете requests, полезная информация может полностью отсутствовать, и доставать ее придется из API-эндпоинтов, которые, естественно, защищены заголовками, вычисляемыми где-то в глубинах мегабайт джаваскрипта, которые выполняет страница чтобы отобразить то, что вы видите в браузере. Плюс ненулевая вероятность встретить при входе на сайт Cloudflare challenge.

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


      1. Furriest
        15.08.2024 12:48

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


        1. kaspra Автор
          15.08.2024 12:48

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

          Еще, в расширении кроме основных заданий можно с легкостью настроить еще парочку для "прокачивания" recaptcha score и ему подобных - например раз в день искать что-то рандомное в гугле и делать переход на пару-тройку сайтов в результатах поиска