
Проблематика и решение
🎯 Бизнес-задача
Логистическая компания работает с крупным заводом по переработке металлолома, который использует веб-портал для управления отгрузками. Для планирования маршрутов необходимо заранее бронировать временные слоты на выгрузку через корпоративный портал предприятия.
Основная проблема: Свободные слоты появляются редко и разбираются буквально за секунды. Ручное бронирование неэффективно и неконкурентно — к моменту, когда логист обнаруживает свободный слот, его уже успевают забронировать конкуренты.
⚠️ Проблематика
Отрасль сталкивается с серьезными вызовами при работе с системами бронирования слотов. Главная сложность заключается в том, что свободные временные окна для выгрузки появляются непредсказуемо и очень быстро разбираются конкурентами. Доступны слоты только на ближайшие 5 дней, что создает дополнительное давление и требует постоянного мониторинга системы.
Человеческий фактор значительно ограничивает возможности логистических компаний. Логисты физически не могут мониторить портал круглосуточно, а задержка даже в несколько секунд приводит к потере желанного слота. Это создает высокую нагрузку на персонал и увеличивает риск пропуска критических временных окон.
Экономические последствия этих проблем проявляются в простоях транспорта, потере конкурентоспособности и неэффективном использовании ресурсов компании. Каждый пропущенный слот означает дополнительные расходы и снижение операционной эффективности.
✅ Решение
Разработана автоматизированная система, которая решает все выявленные проблемы комплексно. Система постоянно мониторит доступность слотов на 5 дней вперед, мгновенно бронирует появляющиеся свободные слоты и работает круглосуточно без участия человека. Интеллектуальные алгоритмы позволяют обходить блокировки сайта, а интеграция с Telegram обеспечивает оперативные уведомления о каждом успешном бронировании.

📊 Результаты
Внедрение системы принесло впечатляющие результаты, которые превзошли изначальные ожидания.
| Показатель | До внедрения | После внедрения | Улучшение |
|---|---|---|---|
| Скорость реакции на слот | 10–30 секунд | 0.5–2 секунды | до 60 раз быстрее |
| Успешность бронирования | ~10–15% | 60–80% | 4–6 раз выше |
| Время мониторинга | 8 часов/день | 24/7 | 3 раза больше охват |
| Загрузка персонала | Высокая | Минимальная | высвобождение времени |
Компания получила стабильное обеспечение слотов благодаря тому, что система гарантирует наличие забронированных временных окон. Это привело к существенному снижению простоев транспорта, так как водители теперь получают забронированные слоты своевременно. Конкурентоспособность значительно повысилась — компания получает слоты значительно быстрее конкурентов. Кроме того, логисты теперь могут фокусироваться на других важных задачах, что оптимизирует использование человеческих ресурсов.

⚙️ Особенности решения
Система работает в двух режимах для оптимизации ресурсов и эффективности. В обычном режиме система выполняет энергоэффективный фоновый мониторинг с интервалом проверки 10 секунд, который активен 82% времени. Турборежим активируется в критические моменты (57–7 минута каждого часа) и работает с интервалом 0.5 секунды, обеспечивая агрессивный мониторинг в периоды, когда вероятность появления свободных слотов максимальна.
Защита от блокировок реализована через специальный алгоритм, который разносит запросы разных потоков во времени, контролирует частоту обращений к серверу (до 33 запросов в минуту), автоматически восстанавливается после временных блокировок и минимизирует риск обнаружения через имитацию человеческого поведения.
Многопоточная архитектура позволяет системе одновременно мониторить несколько дат (до 5 потоков), что повышает вероятность успешного бронирования в 3–5 раз. Каждый поток работает независимо, что обеспечивает стабильность работы даже при выходе из строя отдельных компонентов.

Техническая реализация
💡 Информация для разработчиков: Ниже подробное описание технической архитектуры и алгоритмов работы системы
🏗️ Архитектура системы
Решение построено по модульной архитектуре, что обеспечивает гибкость, масштабируемость и простоту поддержки. Система состоит из пяти основных компонентов: автоматизированный бот для мониторинга и бронирования, веб-админка для управления водителями и настройками, REST API для интеграции с внешними системами, база данных PostgreSQL для хранения всей информации и система уведомлений через Telegram для оперативного информирования.
Технологический стек
Технологический выбор определялся требованиями к производительности, надежности и простоте интеграции.
Backend-компоненты:
Python 3.9+ — основной язык разработки, выбран за богатую экосистему и удобство работы с веб-автоматизацией
Django — веб-фреймворк для админ-панели, обеспечивающий быструю разработку и встроенную админку
Flask — легковесный веб-сервер для управления водителями, минималистичный и быстрый
Selenium WebDriver — автоматизация браузера для работы с динамическим веб-интерфейсом портала завода
PostgreSQL — реляционная база данных с высокой производительностью и надежностью
Инфраструктурные решения:
Docker & Docker Compose — контейнеризация обеспечивает изолированность и простоту развертывания
Nginx — веб-сервер и reverse proxy для эффективной маршрутизации запросов
SSL-сертификаты — защищенное HTTPS-соединение для безопасности данных
Внешние интеграции:
Telegram Bot API — система уведомлений для оперативного информирования
Requests/HTTPX — HTTP-клиент для взаимодействия с внешними API
📦 Модульная структура
Система организована по принципу разделения ответственности, что упрощает разработку и поддержку. Модуль конфигурации содержит все настройки бота, включая интервалы, режимы работы, лимиты, а также селекторы CSS/XPath для элементов веб-интерфейса. Ядро системы включает управление жизненным циклом браузера, сервис авторизации, движок бронирования слотов и циклический мониторинг дат. Вспомогательные утилиты обеспечивают фильтрацию слотов, логирование операций и статистики, а также различные вспомогательные функции для работы с данными.
База данных хранит информацию о заявках на бронирование, данных водителей и их транспорта, а также настройки работы бота. Схема данных разработана с учетом необходимости быстрого доступа к информации и эффективного хранения исторических данных.
🔄 Алгоритм работы
Система работает по циклическому алгоритму, который начинается с инициализации потоков. Каждый поток получает уникального водителя из базы данных, для него устанавливается индивидуальная задержка для разнесения во времени, и создается отдельный экземпляр браузера. Это обеспечивает параллельную работу и независимость потоков друг от друга.
Мониторинг дат осуществляется циклически: потоки проверяют доступность слотов на 5 дней вперед, выполняя запросы к серверу веб-портала завода для каждой даты. Полученные списки слотов фильтруются по временным критериям — система ищет слоты, доступные более чем через 48 часов (настраиваемый параметр), которые помечены как доступные для бронирования.
При обнаружении подходящего слота запускается процесс бронирования: заполняется форма с данными водителя и транспорта, выбирается дата и время, подтверждается бронирование. После успешного бронирования результат обрабатывается — номер заявки сохраняется в базе данных, отправляется уведомление в Telegram, и операция логируется для последующего анализа.
Режимы работы
Система автоматически переключается между двумя режимами в зависимости от времени суток. Обычный режим работает 82% времени (8–56 минуты каждого часа) с интервалом проверки 10 секунд, создавая нагрузку около 6 запросов в минуту. Это обеспечивает энергоэффективный фоновый мониторинг.
Турборежим активируется с 57-й минуты каждого часа и длится 10 минут (до 7-й минуты следующего часа). Интервал проверки составляет 0.5 секунды, что создает нагрузку около 120 запросов в минуту — в 20 раз выше обычного режима. Такой подход позволяет экономить ресурсы при сохранении высокой эффективности, фокусируясь на критических временных окнах и снижая риск блокировок за счет умеренной нагрузки в обычном режиме.
🛡️ Механизмы защиты от блокировок
Основная проблема при работе нескольких потоков — синхронизация запросов, которая может привести к блокировке IP-адреса. Для решения этой проблемы реализована стратегия разнесения потоков: каждый поток использует уникальную задержку между циклами, которая рассчитывается с учетом номера потока, что предотвращает одновременные запросы от разных потоков.
| Поток | Задержка между циклами | Запросов/минуту |
|---|---|---|
| Поток 1 | 4.9 секунды | ~12 |
| Поток 2 | 5.6 секунды | ~11 |
| Поток 3 | 6.3 секунды | ~10 |
| Общая нагрузка | — | ~33 (безопасный уровень) |
Система тщательно контролирует частоту обращений к серверу веб-портала. Базовая задержка между запросами составляет 2.5 секунды, между циклами мониторинга — 4.875 секунды. При возникновении ошибок применяются адаптивные задержки, которые автоматически увеличиваются.
При обнаружении блокировки система переходит в защитный режим: автоматически увеличиваются задержки между запросами, система переходит в режим ожидания, через определенное время возобновляет работу с нормальными параметрами и логирует инцидент для последующего анализа.
⚡ Оптимизация производительности
Вместо фиксированных задержек используется умное ожидание элементов через WebDriverWait. Система динамически ждет появления слотов без лишних ожиданий, что уменьшило общее время бронирования на 2–2.5 секунды и значительно улучшило стабильность работы.
Проведена тщательная оптимизация временных параметров: убраны избыточные микрозадержки после закрытия попапов (0.02 секунды) и паузы после кликов (0.1 секунды). Оптимизированы ключевые настройки: задержка установки даты снижена с 0.5 до 0.3 секунды (-40%), клик по слоту — с 1.0 до 0.5 секунды (-50%), поиск кнопки подтверждения — с 1.0 до 0.3 секунды (-70%), клик подтверждения — с 1.0 до 0.5 секунды (-50%). В результате общее ускорение процесса бронирования составило 2.0–2.5 секунды.
💻 Веб-интерфейс управления
Веб-интерфейс предоставляет полнофункциональную админ-панель для управления всей системой. Через интерфейс можно управлять водителями (добавление, редактирование, удаление, управление данными транспорта, контроль статусов активности), просматривать все забронированные слоты с фильтрацией по датам и статусам, настраивать параметры работы бота (конфигурация режимов, управление параметрами мониторинга, настройка уведомлений) и отслеживать статистику (количество найденных и забронированных слотов, успешность бронирований, время работы системы, графики активности).
📝 Система логирования
Реализована многоуровневая система логирования для отслеживания всех операций. Основной лог содержит общую информацию о работе бота, успешные бронирования, ошибки и предупреждения. Отдельный лог успешных бронирований фиксирует только успешные операции с номерами заявок, датами и временем, что удобно для быстрого анализа результатов. Статистический лог собирает агрегированную статистику работы и периодические отчеты о производительности. При многопоточной работе ведутся отдельные логи для каждого потока, что значительно упрощает диагностику проблем.
🗄️ База данных
Система использует PostgreSQL для хранения всех данных. База данных организована по реляционной модели и хранит информацию о заявках на бронирование (связь с водителями, даты, статусы), данные водителей (контактная информация, данные транспорта, статусы активности) и настройки работы бота (параметры мониторинга, режимы работы, конфигурация потоков).
Для управления схемой базы данных используется Alembic, который обеспечивает версионирование схемы, отслеживание изменений структуры и безопасное применение обновлений. Это позволяет легко мигрировать базу данных при обновлениях системы без потери данных.
🚀 Развертывание и эксплуатация
Вся система развернута с использованием Docker, что обеспечивает изолированность компонентов, простоту развертывания, масштабируемость и воспроизводимость окружения. Основные контейнеры включают приложение (Django + Flask), базу данных PostgreSQL и веб-сервер Nginx.
Автоматизация развертывания осуществляется через специальный скрипт, который проверяет наличие Docker и Docker Compose, создает необходимые директории, настраивает переменные окружения, запускает контейнеры и проверяет работоспособность всех сервисов.
Для обеспечения стабильности работы реализованы механизмы проверки работоспособности: health check скрипт для проверки всех компонентов, автоматическая проверка доступности веб-портала завода, мониторинг состояния базы данных и проверка активности бота.
🔒 Безопасность
Все чувствительные данные хранятся в переменных окружения, включая учетные данные для авторизации на веб-портале завода, токены Telegram бота, пароли для базы данных и SSL-сертификаты. Это исключает риск случайного попадания секретов в систему контроля версий.
Веб-интерфейс защищен базовой HTTP-аутентификацией для доступа к админ-панели, HTTPS-соединением через Nginx и валидацией всех входящих данных для предотвращения атак через пользовательский ввод.
📈 Производительность и масштабируемость
Система поддерживает до 5 параллельных потоков мониторинга, способна обрабатывать до 100 слотов в минуту и реагирует на появление слота за 0.5–2 секунды. Оптимизация ресурсов достигается через несколько механизмов: headless-режим браузера снижает потребление памяти на 40–50%, автоматическое закрытие неиспользуемых вкладок освобождает память и ресурсы процессора, оптимизация базы данных через индексирование и оптимизацию запросов ускоряет операции в 2–3 раза, а умное кеширование часто используемых данных снижает нагрузку на базу данных.
🔌 Интеграции
Система интегрирована с Telegram для отправки уведомлений о каждом успешном бронировании с указанием номера заявки и деталей слота. Опционально настроены оповещения об ошибках для оперативного реагирования на проблемы.
REST API предоставляет возможности для управления водителями, получения информации о заявках и интеграции с внешними системами, что позволяет легко расширять функциональность и интегрировать систему с другими бизнес-процессами.
🔧 Особенности реализации
Веб-портал завода использует динамическую загрузку контента, что требует специальных подходов: ожидания загрузки элементов через WebDriverWait, обработки всплывающих окон и модальных диалогов, работы с JavaScript-элементами интерфейса.
Многоуровневая система обработки ошибок обеспечивает надежность работы: повторные попытки при временных сбоях, логирование всех ошибок для анализа, автоматическое восстановление после блокировок и graceful degradation при проблемах с отдельными компонентами.
📊 Метрики и аналитика
Система собирает и анализирует метрики в реальном времени по четырем категориям:
| Категория | Метрики | Назначение |
|---|---|---|
| Производительность | Количество проверенных дат, найденных слотов | Оценка эффективности мониторинга |
| Успешность | Количество успешных бронирований, процент успешности | Анализ результативности системы |
| Надежность | Время работы системы, количество ошибок по типам | Мониторинг стабильности |
| Ресурсы | Использование памяти, CPU, время отклика | Оптимизация производительности |
Все метрики логируются в отдельные файлы для последующего анализа и оптимизации, что позволяет постоянно улучшать работу системы.
✨ Заключение
Разработанная система автоматизации бронирования слотов полностью решила поставленную бизнес-задачу. Компания получила надежный инструмент, который работает круглосуточно, обеспечивая стабильное бронирование временных слотов и существенно повышая конкурентоспособность бизнеса.



