The missing high-precision registration tool
Легковесный и высокопроизводительный бот для регистрации на дисциплины в WSP (KBTU). Стандартная регистрация через браузер часто страдает от задержек, ошибок сети и неудобного интерфейса. Существующие монолитные скрипты на Selenium потребляют много ресурсов и сложны в поддержке.
WSP Sniper заполняет этот пробел: модульное, асинхронное решение на Python с разделением логики и представления. Настройте план через удобный Web UI, а выполняйте атаку через молниеносный CLI.
- Высокая скорость: Использует
aiohttpвместо медленных браузерных движков. - Два интерфейса: Web UI для удобства и CLI для производительности.
- Отказоустойчивость: Умная система ретраев при ошибках 500 и разрывах связи.
- Синхронизация: NTP-коррекция времени для точности до миллисекунд.
- Persistence: Единый файл конфигурации
saved_plan.jsonдля всех интерфейсов.
# MacOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"git clone https://github.com/I3eka/WSP-Sniper.git
cd WSP-Sniper
uv syncИдеально для первоначальной настройки и выбора предметов.
uv run streamlit run app.py- Авторизация: Введите данные WSP в сайдбаре.
- Выбор: Отметьте нужные лекции и практики (данные сохранятся автоматически).
- Запуск: Нажмите "START SNIPER ATTACK".
Идеально для запуска на серверах (VPS) или слабых машинах.
uv run main.pyБот автоматически подхватит saved_plan.json, созданный в Web-версии, синхронизирует время и перейдет в режим ожидания атаки.
При отсутствии файла .env, бот запустит интерактивный мастер настройки:
✨ Welcome to WSP-Sniper First Launch Setup! ✨
Please enter your KBTU WSP credentials below.
...
Параметры управляются через файл .env.
| Переменная | Описание | Дефолт |
|---|---|---|
WSP_USERNAME |
Логин пользователя | - |
WSP_PASSWORD |
Пароль пользователя | - |
WSP_DESIRED_TIME_LOCAL |
Время старта (локальное, формат HH:MM:SS) | 10:00:00 |
WSP_REQUEST_DELAY |
Задержка между запросами разных предметов (сек) | 0.5 |
WSP_RETRY_DELAY |
Интервал повтора при ошибке "Регистрация не началась" | 0.5 |
- Python 3.10+
- uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/I3eka/WSP-Sniper.git
cd WSP-Sniper
uv venv
source .venv/bin/activate
uv pip install -r requirements.txtwsp_sniper_cli/
├── config/ # Pydantic настройки
├── src/
│ ├── api/ # Сетевой слой (aiohttp)
│ ├── core/ # Логика снайпера и планировщик
│ ├── ui/
│ │ ├── cli/ # Консольный интерфейс
│ │ └── web/ # Streamlit интерфейс
│ └── utils/ # Общие утилиты
├── app.py # Точка входа Web
└── main.py # Точка входа CLI
Алгоритм регистрации построен для работы в условиях высокой нагрузки:
- Sync: Вычисляется смещение локальных часов относительно NTP пула.
- Wait: Бот переходит в режим ожидания до
WSP_DESIRED_TIME_LOCAL. - Stagger: Запросы на регистрацию отправляются каскадом с задержкой
0.5с(чтобы избежать бана по IP или ошибки 500). - Loop: Если сервер возвращает "Регистрация не началась", бот ждет
0.5си повторяет попытку для конкретного предмета.
Я написал этот код для демонстрации возможностей asyncio и современной архитектуры Python приложений. Используйте инструмент с осторожностью. Автор не несет ответственности за возможные последствия использования данного ПО в университетской среде.
MIT