Десктоп приложение (Python + PyQt6) за автоматично следене и събиране на информация за цени на продукти от различни онлайн магазини.
- Добавяне и управление на продукти - URL адрес + CSS селектор / XPath
- Автоматично събиране на данни - периодична проверка на цените във фонов режим
- Ръчно обновяване - опресняване на цените по желание
- Визуализация на данни - таблица с продукти + графика на ценовата история
- Известяване при промяна - Email и Discord известия при спад на цена
- Импорт/Експорт - CSV и JSON формат за данни и история
- Drag-and-drop - плъзгане на URL адреси директно в приложението
- Сигурност - поддръжка на Environment Variables за чувствителни данни
- Операционна система: Windows 10+, macOS 10.15+, или Linux
- Python: 3.10 или по-нова версия
- Браузър: Google Chrome (за Selenium функционалност)
python --versionАко Python не е инсталиран, изтеглете от: https://www.python.org/downloads/
git clone <repository-url>
cd ProjectWindows:
python -m venv venv
venv\Scripts\activateLinux/macOS:
python3 -m venv venv
source venv/bin/activateОсновни зависимости:
pip install -r requirements.txtЗа разработка (тестове, linting, type checking):
pip install -r requirements-dev.txtpip install --upgrade pip
pip install PyQt6WebDriver се изтегля автоматично чрез webdriver-manager. Уверете се, че имате интернет връзка.
pip install lxml
# или
pip install lxml --only-binary=:all:pip install certifiПриложението поддържа два начина за конфигуриране на чувствителни данни (като Discord Webhook):
-
Environment Variables (Препоръчително):
- Копирайте
.env.exampleв.env(ако ползвате python-dotenv) или задайте променливите в средата. DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
- Копирайте
-
Локален файл:
- Копирайте
data/settings.example.jsonвdata/settings.json. - Попълнете данните си там. Този файл е игнориран от git.
- Копирайте
python -m price_tracker.main
# (Уверете се, че сте в главната директория на проекта)- Кликнете "➕ Добави" в toolbar-а
- Въведете URL адреса на продукта
- Въведете CSS селектор за цената (вижте таблицата по-долу)
- Тествайте селектора с бутона "Тествай селектора"
- Запазете
| Магазин | CSS Селектор | Бележка |
|---|---|---|
| Ozone.bg | .regular-price |
Стандартна цена |
| Technopolis.bg | .price |
Изисква Selenium |
| Technomarket.bg | .bgn.eu |
Изисква Selenium |
| Amazon.com | #corePrice_feature_div .a-price .a-offscreen |
Основна цена |
| Amazon.com | .a-price .a-offscreen |
Алтернативен селектор |
- Кликнете "
▶️ Старт" за да активирате автоматичната проверка - Интервалът може да се конфигурира от Редакция → Настройки
Проектът има високо покритие на тестовете (94%), включващо всички основни модули (без GUI).
# Изпълняване на всички тестове
pytest tests/ -v
# Проверка на покритието
coverage run -m pytest tests/
coverage report -mProject/
├── price_tracker/ # Основен Python пакет
│ ├── models/ # Модели на данни (Product, PriceRecord)
│ ├── scraper/ # Scraping модули (HTTP + Selenium)
│ ├── storage/ # JSON/CSV съхранение и експорт
│ ├── notifications/ # Email/Discord известия
│ ├── scheduler/ # Фонова проверка (APScheduler)
│ └── gui/ # PyQt6 графичен интерфейс
├── tests/ # Unit тестове (139+ теста)
├── data/ # Локални данни (игнорирани от git)
│ └── settings.example.json # Примерни настройки
├── exports/ # Експортирани файлове (игнорирани)
├── requirements.txt # Зависимости
└── pyproject.toml # Конфигурация на проекта
MIT License