
Отслеживать доступность сайтов — стандартная задача любого веб-мастера, который обязательно устанавливает такие «мониторы» на свои ресурсы. Он проверяет, какой контент возвращается по запросу: стандартная веб-страница или сообщение об ошибке. Логично поставить такую проверку в ежеминутном режиме с подачей громкого уведомления в случае инцидента (если сайт недоступен).
По сути, проверка доступности ресурса и мониторинг изменений на странице — это одно и то же. Ведь если произошло какое-то изменение — это значит, что ранее недоступный ресурс стал доступным, или наоборот.
Но если мониторинг сайтов сделать удобным и простым, то открываются десятки новых, полезных вариантов использования для обычного человека: отслеживание цен, распродаж, покупка товаров на скидках, бронирование билетов и талонов в поликлинику, появление на Хабре статьи по ключевому слову, мониторинг изменений в файлах PDF, поисковой выдаче Google и многое другое...
Некоторые идеи:
Мониторинг цен или скидок на избранные товары в гипермаркетах, интернет-магазинах и проч. С помощью такого мониторинга легко автоматизировать сигналы на покупку нужных товаров по минимальным ценам. Если есть статистика по цене на товар за несколько месяцев или лет, то можно установить триггер на покупку, как только цена по скидке опустится, например, до 90% от минимальной за указанный период. Или ниже конкретного предела.
Ожидание события, когда появится нужный объект. Например, билеты на концерт или хоккейный матч плей-офф раскупаются в течение нескольких часов после появления в продаже. Поэтому критически важно получить уведомление сразу в момент начала продаж. То же самое касается других дефицитных вещей, так как арендные квартиры по низкой цене в нужном районе или сверхдешёвые товары на «Авито», где продавец не понимает, сколько на самом деле стоит его вещь.
Появление ключевых слов в соцсетях или поиске (фамилии, названия фирм).
Запись в очередь, например, к врачу или в посольство. Талоны на запись тоже появляются в непредсказуемые интервалы времени, так что желательно настроить скрипт на автоматическое бронирование записи или прислать уведомление через ChangeDetection.
Поиск работы, уведомления о новых вакансиях на сайте порталов по поиску работы и конкретных компаний.
Научные расследования: учёные, студенты и школьники, да и любые заинтересованные лица могут отслеживать изменения на избранных страницах Википедии (например, научные статьи или страницы, посвящённые конкретной компании/человеку/стране или событию) — и отслеживать появление новых фактов на интересующую его тему.
Отслеживание изменений в файлах (например, PDF, юридических документах, законах), отслеживание новых версий ПО, изменений в ответах JSON API.
В общем, применение таких «мониторов» — это пример интеллектуального и грамотного использования информационных ресурсов интернета, из которого становится всё сложнее извлечь крупицы полезной информации.
Свой сервер вместо сторонней услуги
Разработчики сервиса ChangeDetection зарабатывают на платной услуге: у них на сайте можно заказать мониторинг любых страниц с получением уведомлений за $8,99, есть расширение для Chrome, которое работает с этим SaaS.
С другой стороны, оказывать такую услугу способен любой владелец VPS. Программное обеспечение опубликовано в открытом доступе — никто не мешает установить его у себя. После этого мы можем предоставлять услуги неограниченному кругу пользователей или применять инструмент для собственных нужд.
Вероятно, это одна из множества ненужных платных услуг, за которые платят обыватели (музыка, кинофильмы, облачное хранилище файлов и т. д.), и которыми бесплатно наслаждается каждый обладатель своего сервера, домашнего ПК или VPS.
Хотя в интернете можно найти бесплатные сервисы и расширения к браузеру для мониторинга сайтов, свой сервер всё-таки лучше.
Функции ChangeDetection
Сервис рассчитан на самых неискушённых пользователей. Например, есть визуальный инструмент для выделения области, за которой нужно установить мониторинг. Она работает примерно так же, как выделение элементов в блокировщике рекламы uBlock Origin:

Например, мы хотим отслеживать изменение температуры на странице с погодными условиями:

Уведомления
В случае обнаружения изменения на сайте поддерживается рассылка уведомлений буквально по любым каналам: Discord, Slack, Telegram, Rocket.Chat, Matrix, NTFY, электронная почта Office 365, вебхуки, различные региональные SMS-гейты и т. д. Подробнее см. в разделе об интеграции уведомлений.
Поддерживаются действия по условию. Например, действие в случае, если цена упадёт ниже определённого уровня или на странице появится определённое слово. В программе есть специальный шаблон 'Re-stock & Price detection for single product pages', чтобы отслеживать все метатеги, связанные с изменением цен и появлением товара, на HTML-странице по указанному URL.
Если вернуться к примеру с текущей температурой, то после выбора этого значения на странице с помощью визуального выделения переходим на вкладку 'Conditions', в котором указываем необходимые условия для срабатывания действия (минимальная и максимальная температура):

Дополнительную информацию и примеры использования см. в справочных статьях и руководствах. Там подробно указано, как проверить последние изменения на сайте, появление в продаже товара определённого размера или цвета, начало распродажи с примерами на конкретных магазинах, мониторинг по ключевым словам, какие прокси-серверы выбрать для обхода ограничений на доступ к сайту и т. д.
Интерактивные действия
Поддерживаются различные действия на сайте (раздел 'Browser Steps'): ввод пароля, вход в учётную запись, выполнение поисковых запросов, нажатие кнопок на сайте, добавление продукта в корзину, согласие на приём куков, ввод дат и проч.

Есть возможность генерировать вызовы API в ответ на уведомление (если какой-то текст появился на странице), связывать между собой разные API, генерировать RSS в зависимости от контента.
Отображение различий
Сервис визуально отображает изменения: новые/удалённые строки, слова и символы:

Расписание проверок
Расписание проверок по дням недели с поддержкой разных часовых поясов:

Установка ChangeDetection
В руководствах проекта чаще всего упоминается установка на Debian 11, так что такой VPS лучше всего выбирать, если мы собираемся устанавливать все программы вручную через pip. Отсутствие среды виртуализации сэкономит ресурсы, обеспечит лучшее быстродействие за меньшие деньги (сервер можно взять дешевле). Если же в приоритете время, то сразу берём образ Docker CE от RUVDS, чтобы упростить дальнейшие манипуляции:

После заказа VPS и установки ОС получаем готовую и настроенную систему с выделенным IP-адресом 194.87.144.196:

Подключаемся к ней по SSH, обновляем пакеты (apt update && sudo apt upgrade -y), а потом запускаем контейнер ChangeDetection одной командой, загрузив его из репозитория:
$ docker run -d --restart always -p "194.87.144.196:5000:5000" -v datastore-volume:/datastore --name changedetection.io dgtlmoon/changedetection.io

Альтернативная установка через менеджер пакетов pip:
$ pip3 install changedetection.io
$ changedetection.io -d /path/to/empty/data/dir -p 5000
После этого интерфейс сервиса на нашем VPS доступен по адресу http://194.87.144.196:5000/:

Установка Playwright и Browserless
Некоторые функции, такие как визуальное выделение области страниц для выборочного скачивания и мониторинга, доступны только после установки фетчера Playwright, который использует Browserless.
Playwright с Browserless — это быстрый и многофункциональный бэкенд, который устанавливается через пакетный менеджер pip или в контейнере Docker.
Установка докер-контейнера Browserless:
docker run -d --name browserless \
-e "DEFAULT_LAUNCH_ARGS=[\"--window-size=1920,1080\"]" \
--rm -p 3000:3000 \
--shm-size="2g" \
dgtlmoon/sockpuppetbrowser:latest
После этого можно проверить доступность сервиса, открыв документацию по адресу http://localhost:3000/docs на локальном ПК или http://194.87.144.196:3000/docs в случае VPS.
Об установленных переменных в команде выше подробнее изложено здесь. Дополнительно потом нужно будет настроить Playwright на вызов Browserless. Например, вот соответствующий код Javascript для Playwright:
const express = require('express');
const playwright = require('playwright');
const app = express();
app.get('/image', async (req, res) => {
const browser = await playwright.chromium.connectOverCDP('ws://localhost:3000?token=6R0W53R135510');
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('http://www.example.com/');
await new Promise((resolve) => setTimeout(resolve, 5000));
const data = await page.screenshot({ type: 'png' });
await browser.close();
return res.end(data, 'binary');
});
app.listen(8080);
При установке СhangeDetection и Playwright через pip предполагается, что они устанавливаются и запускаются на одном сервере. Если он на другом сервере, то нужно соответствующим образом изменить переменные и убедиться, что порты открыты. Приведённый ниже процесс установки протестирован для Debian 11.
Установка репозитория nodejs 16:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
Установка зависимостей:
sudo apt install python3-dev python3-pip nodejs build-essential ca-certificates curl dumb-init ffmpeg fontconfig fonts-freefont-ttf fonts-gfs-neohellenic fonts-indic fonts-ipafont-gothic fonts-kacst fonts-liberation fonts-noto-cjk fonts-noto-color-emoji fonts-roboto fonts-thai-tlwg fonts-ubuntu fonts-wqy-zenhei gconf-service git libappindicator1 libappindicator3-1 libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm-dev libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 locales lsb-release msttcorefonts pdftk unzip wget xdg-utils xvfb
Установка playwright через pip:
python3 -m pip install playwright
Клонируем git-репозиторий в произвольную папку (например, /opt/):
git clone https://github.com/browserless/chrome /opt/browserless
Переходим в эту папку и запускаем сборку:
npm install
npm run build
npm prune production
Конфигурационные файлы systemd должны быть размещены в каталоге /etc/systemd/system/.
Пример сервиса Browserless:
[Unit]
Description=browserless service
After=network.target
[Service]
Environment=APP_DIR=/opt/browserless
Environment=PLAYWRIGHT_BROWSERS_PATH=/opt/browserless
Environment=CONNECTION_TIMEOUT=60000
Environment=HOST=127.0.0.1
Environment=LANG="C.UTF-8"
Environment=NODE_ENV=production
Environment=PORT=3000
Environment=WORKSPACE_DIR=/opt/browserless/workspace
WorkingDirectory=/opt/browserless
ExecStart=/opt/browserless/start.sh
SyslogIdentifier=browserless
[Install]
WantedBy=default.target
Пример сервиса ChangeDetection:
[Unit]
Description=changedetection.io service
After=network.target browserless.service
Wants=browserless.service
[Service]
Environment=PLAYWRIGHT_DRIVER_URL=ws://127.0.0.1:3000/?stealth=1&--disable-web-security=true
ExecStart=/usr/local/bin/changedetection.io -d /opt/change-detection -p 80
SyslogIdentifier=change-detection
[Install]
WantedBy=default.target
Включение сервисов:
systemctl enable browserless.service
systemctl enable changedetection.service
Контроль вручную:
systemctl start [service]
systemctl stop [service]
Дополнительно можно настроить прокси для доступа к сайтам, на которые нельзя напрямую попасть по прямому каналу с VPS.
Локальная версия мониторинга на своём сервере незаменима в том случае, если у нас конфиденциальный список URL для мониторинга. Ну и полный контроль над системой, отсутствие абонентской платы — это тоже важно.
Примечание: в документации упоминается незакрытый баг с утечкой памяти, так что сервис мониторинга требуется периодически перезапускать. Это можно делать автоматически через отдельный демон, который проверяет потребление памяти.
Планы на будущее: интеграция с LLM
Поскольку сейчас многие пользователи работают с LLM, то в будущем было бы интересно настроить уведомления на такое взаимодействие. Хотелось бы отслеживать изменения в важных для нас параметрах базовой модели, то есть в её памяти и векторном пространстве. Например, что она наконец-то узнала об определённых фактах, именах, событиях, которые нас интересуют, что она изменила своё «мнение» по важной теме и т. д. Но таких сервисов мониторинга пока не изобрели.
Хотя уже есть услуги по добавлению в ChatGPT и другие LLM нужных фактов и ответов по желанию заказчика («отравление модели»): достаточно создать в интернете несколько сотен страниц по определённому шаблону — и модель сделает, что вам надо, по установленному триггеру.
© 2025 ООО «МТ ФИНАНС»