Разработка локального приложения с графическим интерфейсом для автоматизации процесса скачивания 63 должностных инструкций с сайта Consultant.ru и сохранения их в соответствующие папки Google Drive.
- Backend: Python 3.12
- GUI Framework: PyQt6/PySide6 для современного интерфейса (с fallback на Tkinter)
- Web Automation: Selenium WebDriver с Chrome/ChromeDriver + поддержка Firefox/Edge
- Cloud Storage APIs: google-api-python-client, OneDrive API, Dropbox API, Яндекс.Диск API
- Конфигурация: JSON/YAML файлы для настроек + база данных SQLite для метаданных
- Логирование: Python logging module + structured logging (JSON)
- Парсинг: BeautifulSoup4, lxml, requests для дополнительной обработки
- Универсальность: Pluggable architecture для поддержки различных источников
job_instruction_downloader/
├── src/
│ ├── __init__.py
│ ├── main.py # Точка входа приложения
│ ├── gui/
│ │ ├── __init__.py
│ │ ├── main_window.py # Главное окно приложения
│ │ ├── progress_dialog.py # Диалог прогресса
│ │ └── settings_dialog.py # Настройки приложения
│ ├── core/
│ │ ├── __init__.py
│ │ ├── downloader.py # Основная логика скачивания
│ │ ├── validator.py # Валидация файлов
│ │ ├── cloud_manager.py # Универсальное управление облачными сервисами
│ │ ├── site_parser.py # Универсальный парсер сайтов
│ │ └── parsers/ # Специализированные парсеры
│ │ ├── __init__.py
│ │ ├── base_parser.py # Базовый класс парсера
│ │ ├── consultant_parser.py # Парсер Consultant.ru
│ │ ├── garant_parser.py # Парсер Garant.ru
│ │ ├── kodeks_parser.py # Парсер Kodeks.ru
│ │ └── custom_parser.py # Настраиваемый парсер
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── config.py # Управление конфигурацией
│ │ ├── logger.py # Настройка логирования
│ │ └── helpers.py # Вспомогательные функции
│ └── models/
│ ├── __init__.py
│ ├── job_instruction.py # Модель должностной инструкции
│ └── department.py # Модель отдела
├── config/
│ ├── settings.json # Основные настройки
│ ├── sites/ # Конфигурации сайтов
│ │ ├── consultant_ru.json # Настройки для Consultant.ru
│ │ ├── garant_ru.json # Настройки для Garant.ru
│ │ ├── kodeks_ru.json # Настройки для Kodeks.ru
│ │ └── custom_site.json # Шаблон для пользовательских сайтов
│ ├── departments.json # Конфигурация отделов
│ ├── credentials.json # Учетные данные облачных сервисов
│ └── parsers/ # Конфигурации парсеров
│ ├── default_parser.json
│ └── custom_parsers/
├── logs/ # Логи приложения
├── downloads/ # Временные загрузки
├── tests/ # Тесты
├── requirements.txt # Зависимости Python
├── setup.py # Установка пакета
└── README.md # Документация
- Правовые системы: Consultant.ru, Garant.ru, Kodeks.ru, Система ГАРАНТ
- Корпоративные порталы: SharePoint, Confluence, внутренние системы документооборота
- Образовательные платформы: Coursera, edX, корпоративные LMS системы
- Государственные ресурсы: Официальные сайты министерств, ведомств
- Библиотечные системы: Электронные библиотеки, репозитории документов
- Пользовательские сайты: Любые веб-ресурсы с настраиваемыми парсерами
# Базовый интерфейс для всех источников данных
class BaseResourceAdapter:
def authenticate(self, credentials): pass
def get_document_list(self, filters): pass
def download_document(self, document_id): pass
def validate_document(self, file_path): pass
def get_metadata(self, document_id): pass
# Специализированные адаптеры
class ConsultantAdapter(BaseResourceAdapter): pass
class GarantAdapter(BaseResourceAdapter): pass
class SharePointAdapter(BaseResourceAdapter): pass
class CustomWebAdapter(BaseResourceAdapter): pass{
"site_config": {
"name": "Consultant.ru",
"base_url": "https://cloud.consultant.ru",
"type": "legal_system",
"authentication": {
"method": "session_cookies",
"login_url": "/login",
"credentials_required": false
},
"navigation": {
"document_list_selector": "[devinid]",
"pagination": {
"enabled": false,
"next_button_selector": ".next-page"
}
},
"document_extraction": {
"title_selector": "h1, .document-title",
"download_button_selector": "[devinid='14']",
"download_method": "click_and_wait",
"file_validation": {
"min_size_bytes": 30000,
"expected_extensions": [".docx", ".pdf", ".doc"]
}
},
"rate_limiting": {
"requests_per_minute": 20,
"delay_between_requests": 3,
"delay_between_sections": 10
},
"error_handling": {
"retry_attempts": 3,
"retry_delay": 5,
"refresh_page_on_error": true
}
}
}{
"parser_config": {
"name": "consultant_parser",
"selectors": {
"department_sections": ".department-section",
"document_links": "[devinid]",
"document_title": ".job-title, h1",
"export_button": "[devinid='14']",
"download_link": "a[href*='download']"
},
"extraction_rules": {
"title_cleanup": {
"remove_prefixes": ["Должностная инструкция"],
"remove_suffixes": ["(профессиональный стандарт)"],
"max_length": 100
},
"department_mapping": {
"ПЛАНОВО-ЭКОНОМИЧЕСКИЙ ОТДЕЛ": "planning_economic",
"ФИНАНСОВЫЙ ОТДЕЛ": "financial"
}
},
"custom_scripts": {
"pre_download": "scripts/consultant_pre_download.py",
"post_download": "scripts/consultant_post_download.py"
}
}
}┌─────────────────────────────────────────────────────────────────────────────┐
│ Добавление нового ресурса [Шаг 1/6]│
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─ Основная информация ──────────────────────────────────────────────────┐ │
│ │ Название ресурса: [Мой корпоративный портал] │ │
│ │ Базовый URL: [https://portal.company.com] │ │
│ │ Тип ресурса: [Корпоративный портал ▼] │ │
│ │ ├ Правовая система │ │
│ │ ├ Корпоративный портал │ │
│ │ ├ Образовательная платформа │ │
│ │ ├ Государственный ресурс │ │
│ │ └ Пользовательский сайт │ │
│ │ │ │
│ │ Описание: [Внутренний портал с должностными инструкциями] │ │
│ │ │ │
│ │ ☑ Требуется аутентификация │ │
│ │ ☐ Использовать прокси │ │
│ │ ☑ Поддержка JavaScript │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ [< Назад] [Отмена] [Далее >] [Готово] │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Настройка селекторов элементов [Шаг 3/6]│
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─ Селекторы для извлечения данных ──────────────────────────────────────┐ │
│ │ │ │
│ │ Список документов: [.document-item, .doc-link] │ │
│ │ Заголовок документа: [h1, .title, .document-name] │ │
│ │ Кнопка скачивания: [.download-btn, .export-word] │ │
│ │ Ссылка на документ: [a[href*='download'], .doc-url] │ │
│ │ │ │
│ │ ┌─ Предварительный просмотр ─────────────────────────────────────────┐ │ │
│ │ │ URL для тестирования: [https://portal.company.com/docs] │ │ │
│ │ │ [Загрузить страницу] [Выделить элементы] │ │ │
│ │ │ │ │ │
│ │ │ Найденные элементы: │ │ │
│ │ │ ✓ Список документов: 15 элементов найдено │ │ │
│ │ │ ✓ Заголовки: 15 элементов найдено │ │ │
│ │ │ ⚠ Кнопки скачивания: 12 элементов найдено (3 отсутствуют) │ │ │
│ │ └───────────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─ Дополнительные настройки ─────────────────────────────────────────┐ │ │
│ │ │ ☑ Ожидать загрузки JavaScript │ │ │
│ │ │ ☐ Прокручивать страницу для загрузки контента │ │ │
│ │ │ ☑ Обрабатывать пагинацию │ │ │
│ │ │ Селектор "Следующая страница": [.next, .pagination-next] │ │ │
│ │ └───────────────────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ [< Назад] [Тест селекторов] [Далее >] [Готово] │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Настройка облачного хранилища [Шаг 5/6]│
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─ Выбор облачного сервиса ──────────────────────────────────────────────┐ │
│ │ ● Google Drive ○ OneDrive ○ Dropbox │ │
│ │ ○ Яндекс.Диск ○ Локальная папка ○ FTP/SFTP сервер │ │
│ │ ○ SharePoint ○ Amazon S3 ○ Пользовательский API │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Настройки Google Drive ───────────────────────────────────────────────┐ │
│ │ Файл учетных данных: [credentials.json] [Выбрать...] │ │
│ │ Корневая папка: [Документы/Мой корпоративный портал] │ │
│ │ │ │
│ │ Структура папок: ● По отделам ○ По типам ○ По датам │ │
│ │ ○ Плоская структура │ │
│ │ │ │
│ │ Именование файлов: [Должностная инструкция {title}.{ext}] │ │
│ │ Переменные: {title}, {department}, {date}, {index} │ │
│ │ │ │
│ │ ☑ Создавать папки автоматически │ │
│ │ ☑ Проверять дубликаты перед загрузкой │ │
│ │ ☐ Сжимать файлы перед загрузкой │ │
│ │ │ │
│ │ Статус: ● Подключено (user@company.com) [Переподключиться] │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Дополнительные хранилища (резервные копии) ──────────────────────────┐ │
│ │ ☑ OneDrive (backup@company.com) │ │
│ │ ☐ Локальная папка (/backup/documents) │ │
│ │ ☐ FTP сервер (ftp.company.com) │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ [< Назад] [Тест подключения] [Далее >] [Готово] │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Universal Document Downloader v2.0 [_][□][×]│
├─────────────────────────────────────────────────────────────────────────────┤
│ Файл Ресурсы Настройки Инструменты Справка │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─ Источники данных ──────────────────┐ ┌─ Управление процессом ──────────┐ │
│ │ ▼ Consultant.ru (63 документа) │ │ [ Старт ] [ Пауза ] [Стоп] │ │
│ │ ☑ ПЛАНОВО-ЭКОНОМИЧЕСКИЙ (15) │ │ [Настройки] [Отчеты] [Справка] │ │
│ │ ☑ ФИНАНСОВЫЙ ОТДЕЛ (10) │ │ │ │
│ │ ☑ КОНТРАКТНАЯ СЛУЖБА (7) │ │ Общий прогресс: │ │
│ │ ☑ ОТДЕЛ ОРГАНИЗАЦИИ (14) │ │ ████████░░░░░░░░░░ 40% (89/223) │ │
│ │ ☑ ОХРАНА ТРУДА (17) │ │ │ │
│ │ │ │ Текущий ресурс: │ │
│ │ ▼ Корпоративный портал (45 док.) │ │ Garant.ru │ │
│ │ ☑ HR отдел (12) │ │ ██████░░░░░░░░░░░░ 30% (18/60) │ │
│ │ ☑ IT отдел (15) │ │ │ │
│ │ ☑ Юридический отдел (18) │ │ Скорость: 2.1 файла/мин │ │
│ │ │ │ Осталось: ~64 минуты │ │
│ │ ▼ Garant.ru (60 документов) │ └────────────────────────────────┘ │
│ │ ☑ Трудовое право (25) │ │
│ │ ☑ Налоговое право (20) │ ┌─ Активные ресурсы ─────────────┐ │
│ │ ☑ Корпоративное право (15) │ │ ● Consultant.ru (обработка) │ │
│ │ │ │ ⏸ Корп. портал (ожидание) │ │
│ │ ▼ Пользовательские ресурсы │ │ ● Garant.ru (активен) │ │
│ │ ☑ Сайт министерства (55) │ │ ○ Сайт мин-ва (не запущен) │ │
│ │ │ │ [Добавить ресурс] │ │
│ │ [Добавить ресурс] [Настроить] │ └────────────────────────────────┘ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Job Instruction Downloader v1.0 [_][□][×]│
├─────────────────────────────────────────────────────────────────────────────┤
│ Файл Настройки Инструменты Справка │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─ Выбор отделов ─────────────────┐ ┌─ Управление процессом ──────────────┐ │
│ │ ☑ ПЛАНОВО-ЭКОНОМИЧЕСКИЙ ОТДЕЛ │ │ [ Старт ] [ Пауза ] [ Стоп ] │ │
│ │ (15 файлов) │ │ [Настройки] [Отчеты ] [Справка ] │ │
│ │ ☑ ФИНАНСОВЫЙ ОТДЕЛ │ │ │ │
│ │ (10 файлов) │ │ Общий прогресс: │ │
│ │ ☑ КОНТРАКТНАЯ СЛУЖБА │ │ ████████░░░░░░░░░░ 40% (25/63) │ │
│ │ (7 файлов) │ │ │ │
│ │ ☑ ОТДЕЛ ОРГАНИЗАЦИИ И ОПЛАТЫ │ │ Текущий отдел: │ │
│ │ ТРУДА (14 файлов) │ │ ФИНАНСОВЫЙ ОТДЕЛ │ │
│ │ ☑ ОХРАНА ТРУДА (17 файлов) │ │ ██████░░░░░░░░░░░░ 30% (3/10) │ │
│ │ │ │ │ │
│ │ [Выбрать все] [Снять все] │ │ Скорость: 1.2 файла/мин │ │
│ └─────────────────────────────────┘ │ Осталось: ~32 минуты │ │
│ └───────────────────────────────────┘ │
│ ┌─ Статистика ────────────────────────────────────────────────────────────┐ │
│ │ Успешно: 23 Ошибки: 2 Пропущено: 0 Время работы: 19:34 │ │
│ │ Последний файл: Должностная инструкция главного экономиста.docx │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ ┌─ Логи ──────────────────────────────────────────────────────────────────┐ │
│ │ [12:45:23] INFO: Начало обработки ФИНАНСОВЫЙ ОТДЕЛ │ │
│ │ [12:45:25] INFO: Скачивание: главного экономиста │ │
│ │ [12:45:28] SUCCESS: Файл валиден (38,456 bytes) │ │
│ │ [12:45:30] INFO: Загружено в Google Drive │ │
│ │ [12:45:32] WARNING: Повторная попытка для экономиста-аналитика │ │
│ │ [Очистить] [Сохранить в файл] [Автопрокрутка: ☑] │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Настройки приложения [Сохранить]│
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─ Общие настройки ──────────────────────────────────────────────────────┐ │
│ │ Язык интерфейса: [Русский ▼] │ │
│ │ Тема оформления: [Светлая ▼] [Темная] [Системная] │ │
│ │ Автосохранение: ☑ Каждые [5] минут │ │
│ │ Звуковые уведомления: ☑ При завершении ☑ При ошибках │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Настройки браузера ───────────────────────────────────────────────────┐ │
│ │ Путь к ChromeDriver: [/usr/bin/chromedriver] [Обзор...] │ │
│ │ Режим браузера: ○ Видимый ● Скрытый (headless) │ │
│ │ Размер окна: [1920] x [1080] пикселей │ │
│ │ User-Agent: [По умолчанию ▼] │ │
│ │ Прокси: ☐ Использовать [Настроить...] │ │
│ │ Таймауты: │ │
│ │ Загрузка страницы: [20] секунд │ │
│ │ Ожидание элемента: [10] секунд │ │
│ │ Скачивание файла: [30] секунд │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Настройки скачивания ─────────────────────────────────────────────────┐ │
│ │ Задержка между файлами: [3] секунд │ │
│ │ Задержка между отделами: [10] секунд │ │
│ │ Количество попыток: [3] раза │ │
│ │ Минимальный размер файла: [30000] байт │ │
│ │ Папка загрузок: [~/Downloads] [Изменить...] │ │
│ │ Действие при ошибке: ○ Пропустить ● Повторить ○ Остановить │ │
│ │ Обновлять страницу: ☑ При ошибках скачивания │ │
│ │ Очищать загрузки: ☑ После успешной обработки │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Google Drive ─────────────────────────────────────────────────────────┐ │
│ │ Файл credentials: [credentials.json] [Выбрать...] │ │
│ │ Корневая папка: [ДОЛЖНОСТНЫЕ ИНСТРУКЦИИ] │ │
│ │ Создавать папки: ☑ Автоматически │ │
│ │ Проверять дубликаты: ☑ Перед загрузкой │ │
│ │ Действие при дубликате: [Пропустить ▼] [Перезаписать] [Переименовать] │ │
│ │ Batch загрузка: ☑ До [5] файлов одновременно │ │
│ │ Статус подключения: ● Подключено (user@gmail.com) │ │
│ │ [Переподключиться] [Тест соединения] │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Логирование ──────────────────────────────────────────────────────────┐ │
│ │ Уровень логирования: [INFO ▼] [DEBUG] [WARNING] [ERROR] │ │
│ │ Файл логов: [logs/downloader.log] [Изменить...] │ │
│ │ Максимальный размер: [10] МБ │ │
│ │ Количество файлов: [5] штук │ │
│ │ Логировать в консоль: ☑ Включено │ │
│ │ Детальные логи: ☑ HTTP запросы ☑ Selenium действия │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Уведомления ──────────────────────────────────────────────────────────┐ │
│ │ Email уведомления: ☑ При завершении ☑ При критических ошибках │ │
│ │ Email адрес: [user@example.com] │ │
│ │ SMTP сервер: [smtp.gmail.com:587] [Настроить...] │ │
│ │ Telegram бот: ☐ Включить [Настроить...] │ │
│ │ Desktop уведомления: ☑ Системные уведомления │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ [Сбросить по умолчанию] [Экспорт настроек] [Импорт настроек] [Отмена] [OK] │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Детальный прогресс выполнения [Скрыть]│
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─ ПЛАНОВО-ЭКОНОМИЧЕСКИЙ ОТДЕЛ ──────────────────────────────────────────┐ │
│ │ ████████████████████ 100% (15/15) ✓ Завершен │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ ┌─ ФИНАНСОВЫЙ ОТДЕЛ ─────────────────────────────────────────────────────┐ │
│ │ ██████░░░░░░░░░░░░░░░░ 30% (3/10) ⚠ В процессе │ │
│ │ ✓ главного экономиста │ │
│ │ ✓ экономиста по планированию │ │
│ │ ✓ экономиста-аналитика │ │
│ │ ⏳ экономиста по ценообразованию (попытка 2/3) │ │
│ │ ⏸ экономиста по бюджетированию │ │
│ │ ⏸ финансового аналитика │ │
│ │ ⏸ специалиста по финансовому планированию │ │
│ │ ⏸ казначея │ │
│ │ ⏸ контролера │ │
│ │ ⏸ аудитора │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ ┌─ КОНТРАКТНАЯ СЛУЖБА ───────────────────────────────────────────────────┐ │
│ │ ░░░░░░░░░░░░░░░░░░░░ 0% (0/7) ⏸ Ожидание │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ ┌─ ОТДЕЛ ОРГАНИЗАЦИИ И ОПЛАТЫ ТРУДА ─────────────────────────────────────┐ │
│ │ ░░░░░░░░░░░░░░░░░░░░ 0% (0/14) ⏸ Ожидание │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ ┌─ ОХРАНА ТРУДА ─────────────────────────────────────────────────────────┐ │
│ │ ░░░░░░░░░░░░░░░░░░░░ 0% (0/17) ⏸ Ожидание │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Текущая операция ─────────────────────────────────────────────────────┐ │
│ │ Отдел: ФИНАНСОВЫЙ ОТДЕЛ │ │
│ │ Файл: экономиста по ценообразованию │ │
│ │ Действие: Повторная попытка скачивания (2/3) │ │
│ │ Статус: Обновление страницы... │ │
│ │ ████████░░░░░░░░░░░░░░░░░░░░ 32% │ │
│ │ Время: 00:02:15 / ~00:07:00 │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ [Пропустить текущий] [Пропустить отдел] [Приостановить] [Возобновить] │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Отчеты и статистика [Закрыть]│
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─ Сводка выполнения ────────────────────────────────────────────────────┐ │
│ │ Дата запуска: 11.07.2025 12:30:15 │ │
│ │ Время выполнения: 1 час 23 минуты │ │
│ │ Всего файлов: 63 │ │
│ │ Успешно обработано: 58 (92.1%) │ │
│ │ Ошибки: 3 (4.8%) │ │
│ │ Пропущено: 2 (3.2%) │ │
│ │ Средняя скорость: 0.7 файла/минуту │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Статистика по отделам ────────────────────────────────────────────────┐ │
│ │ Отдел │ Всего │ Успешно │ Ошибки │ Время │ │
│ │─────────────────────────────────┼───────┼─────────┼────────┼────────────│ │
│ │ ПЛАНОВО-ЭКОНОМИЧЕСКИЙ ОТДЕЛ │ 15 │ 15 │ 0 │ 18:34 │ │
│ │ ФИНАНСОВЫЙ ОТДЕЛ │ 10 │ 9 │ 1 │ 15:22 │ │
│ │ КОНТРАКТНАЯ СЛУЖБА │ 7 │ 7 │ 0 │ 12:45 │ │
│ │ ОТДЕЛ ОРГАНИЗАЦИИ И ОПЛАТЫ ТРУДА│ 14 │ 13 │ 1 │ 21:18 │ │
│ │ ОХРАНА ТРУДА │ 17 │ 14 │ 1 │ 25:43 │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Проблемные файлы ─────────────────────────────────────────────────────┐ │
│ │ devinid │ Название должности │ Отдел │ Ошибка │ │
│ │─────────┼─────────────────────────────────┼────────────────┼─────────────│ │
│ │ 136 │ бизнес-менеджера │ ПЛАНОВО-ЭК. │ Файл 103б │ │
│ │ 137 │ ведущего бизнес-аналитика │ ПЛАНОВО-ЭК. │ Файл 103б │ │
│ │ 152 │ финансового контролера │ ФИНАНСОВЫЙ │ Таймаут │ │
│ │ [Повторить выбранные] [Экспорт списка] [Ручная обработка] │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ График производительности ────────────────────────────────────────────┐ │
│ │ Файлов/час │ │
│ │ 60 ┤ │ │
│ │ 50 ┤ ●●● │ │
│ │ 40 ┤ ●● ●● │ │
│ │ 30 ┤ ●● ●●● │ │
│ │ 20 ┤● ●●● │ │
│ │ 10 ┤ ●●● │ │
│ │ 0 └───────────────────────────────────────────────────────────────── │ │
│ │ 12:30 13:00 13:30 14:00 14:30 15:00 15:30 16:00 │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ [Экспорт в CSV] [Экспорт в JSON] [Печать отчета] [Сохранить график] │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Добро пожаловать в Job Instruction Downloader! [Шаг 1/5]│
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─ Настройка браузера ───────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Для работы приложения необходим ChromeDriver. │ │
│ │ │ │
│ │ ○ Автоматически скачать ChromeDriver (рекомендуется) │ │
│ │ ● Указать путь к существующему ChromeDriver │ │
│ │ │ │
│ │ Путь: [/usr/bin/chromedriver] [Обзор...] │ │
│ │ │ │
│ │ [Проверить] Статус: ✓ ChromeDriver найден (версия 91.0.4472.101) │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────────┘ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ [< Назад] [Пропустить] [Далее >]│
└─────────────────────────────────────────────────────────────────────────────┘
-
Парсинг Consultant.ru:
- Автоматическое извлечение всех ссылок по отделам
- Определение структуры отделов
- Обработка динамических devinid
-
Процесс скачивания:
- Последовательная обработка ссылок с настраиваемыми задержками
- Автоматическое извлечение названий должностей
- Клик по кнопке "Экспорт в Word"
- Валидация скачанных файлов
- Механизм повторных попыток с обновлением страницы
-
Проверка файлов:
- Размер файла (>30KB = валидный, ≤1000 bytes = поврежденный)
- Проверка формата Word документа
- Тестовое открытие файла
-
Обработка ошибок:
- Автоматическое обновление страницы при ошибках
- Повторные попытки скачивания (до 3 раз)
- Логирование проблемных ссылок
- Возможность ручного вмешательства
-
Управление папками:
- Автоматическое создание структуры папок по отделам
- Проверка существования папок перед загрузкой
- Организация файлов согласно структуре Consultant.ru
-
Загрузка файлов:
- Переименование файлов по названию должности
- Проверка дубликатов
- Batch загрузка для оптимизации
class JobInstructionDownloader:
def __init__(self, config):
self.config = config
self.driver = None
self.gdrive_manager = None
self.validator = None
def start_download_process(self, selected_departments):
# Основной процесс скачивания
def download_single_instruction(self, link_info):
# Скачивание одной инструкции с валидацией
def validate_and_retry(self, file_path, max_attempts=3):
# Валидация с повторными попыткамиclass MainWindow:
def __init__(self):
self.setup_ui()
self.downloader = None
self.progress_tracker = None
def setup_ui(self):
# Создание интерфейса
def start_download(self):
# Запуск процесса в отдельном потоке
def update_progress(self, progress_data):
# Обновление прогресса в реальном времениclass FileValidator:
@staticmethod
def is_valid_word_file(file_path):
# Проверка валидности Word файла
@staticmethod
def check_file_size(file_path, min_size=30000):
# Проверка размера файла
def validate_content(self, file_path):
# Проверка содержимого документа{
"application": {
"version": "2.0.0",
"language": "ru",
"theme": "light",
"auto_save_interval": 300
},
"selenium": {
"browser": "chrome",
"driver_path": "auto",
"headless": false,
"window_size": [1920, 1080],
"user_agent": "default",
"timeouts": {
"page_load": 30,
"element_wait": 10,
"download": 60
}
},
"download": {
"retry_attempts": 3,
"delay_between_requests": 3,
"delay_between_sections": 10,
"min_file_size": 30000,
"temp_directory": "downloads/temp",
"cleanup_after_upload": true
},
"cloud_storage": {
"primary_service": "google_drive",
"backup_services": ["onedrive"],
"create_missing_folders": true,
"check_duplicates": true,
"compression": false
},
"logging": {
"level": "INFO",
"file_path": "logs/downloader.log",
"max_file_size": "10MB",
"backup_count": 5,
"structured_logging": true
},
"performance": {
"parallel_downloads": 1,
"parallel_uploads": 3,
"cache_enabled": true,
"cache_size_mb": 100
}
}{
"resources": [
{
"id": "consultant_ru",
"name": "Consultant.ru",
"enabled": true,
"config_file": "sites/consultant_ru.json",
"parser": "consultant_parser",
"priority": 1,
"departments": [
{
"name": "ПЛАНОВО-ЭКОНОМИЧЕСКИЙ ОТДЕЛ",
"selector_range": "[devinid='131']-[devinid='145']",
"total_files": 15,
"cloud_folder": "ПЛАНОВО-ЭКОНОМИЧЕСКИЙ ОТДЕЛ"
},
{
"name": "ФИНАНСОВЫЙ ОТДЕЛ",
"selector_range": "[devinid='146']-[devinid='155']",
"total_files": 10,
"cloud_folder": "ФИНАНСОВЫЙ ОТДЕЛ"
}
]
},
{
"id": "garant_ru",
"name": "Garant.ru",
"enabled": false,
"config_file": "sites/garant_ru.json",
"parser": "garant_parser",
"priority": 2,
"departments": [
{
"name": "Трудовое право",
"url_pattern": "/labor-law/",
"total_files": 25,
"cloud_folder": "Трудовое право"
}
]
},
{
"id": "corporate_portal",
"name": "Корпоративный портал",
"enabled": true,
"config_file": "sites/corporate_portal.json",
"parser": "custom_parser",
"priority": 3,
"authentication": {
"required": true,
"method": "form_login",
"credentials_key": "corporate_portal_creds"
}
}
]
}{
"site_info": {
"name": "Consultant.ru",
"base_url": "https://cloud.consultant.ru",
"type": "legal_system",
"encoding": "utf-8",
"language": "ru"
},
"authentication": {
"required": false,
"method": "none"
},
"navigation": {
"start_url": "/cloud/cgi/online.cgi?req=doc&base=PKV&n=1034",
"document_list_selector": "[devinid]",
"pagination": {
"enabled": false
}
},
"extraction": {
"selectors": {
"document_links": "[devinid]",
"document_title": "h1, .document-title",
"export_button": "[devinid='14']",
"department_sections": ".department-section"
},
"title_processing": {
"remove_prefixes": ["Должностная инструкция", "Форма:"],
"remove_suffixes": ["(профессиональный стандарт)", "(Подготовлен для системы КонсультантПлюс)"],
"max_length": 100,
"cleanup_regex": "\\s+",
"replacement": " "
}
},
"download": {
"method": "click_button",
"button_selector": "[devinid='14']",
"wait_after_click": 5,
"expected_file_types": [".docx", ".doc"],
"validation": {
"min_size": 30000,
"max_size": 10485760,
"check_content": true
}
},
"rate_limiting": {
"requests_per_minute": 20,
"delay_between_requests": 3,
"delay_between_departments": 10,
"respect_robots_txt": true
},
"error_handling": {
"retry_attempts": 3,
"retry_delay": 5,
"exponential_backoff": true,
"refresh_page_on_error": true,
"skip_on_repeated_failure": true
},
"custom_scripts": {
"pre_download": null,
"post_download": null,
"validation": null
}
}- Общий прогресс по всем отделам
- Детальный прогресс по текущему отделу
- Индикатор текущей операции (навигация, скачивание, валидация, загрузка)
- Статистика в реальном времени
- Детальные логи всех операций
- Отчет об успешных/неудачных загрузках
- Экспорт отчета в JSON/CSV
- Возможность возобновления с места остановки
- Сетевые ошибки (таймауты, недоступность сайта)
- Ошибки валидации файлов (поврежденные загрузки)
- Ошибки Google Drive API
- Ошибки Selenium (элементы не найдены)
- Автоматические повторные попытки с экспоненциальной задержкой
- Обновление страницы при проблемах с загрузкой
- Пропуск проблемных файлов с возможностью ручной обработки
- Сохранение состояния для возобновления работы
- Тестирование валидации файлов
- Тестирование парсинга Consultant.ru
- Тестирование Google Drive операций
- Мокирование Selenium для тестов
- Полный цикл скачивания одного файла
- Тестирование обработки ошибок
- Тестирование восстановления после сбоев
- PyInstaller для создания исполняемого файла
- Включение всех зависимостей
- Автоматическая загрузка ChromeDriver
- Пошаговый мастер первоначальной настройки
- Автоматическая проверка зависимостей
- Настройка Google Drive API credentials
- Кэширование структуры отделов
- Batch операции для Google Drive
- Оптимизация Selenium (отключение изображений, CSS)
- Параллельная валидация файлов
- Отслеживание времени выполнения операций
- Статистика скорости скачивания
- Анализ узких мест в процессе
- Настройка проекта и структуры
- Базовый GUI с Tkinter
- Основной модуль скачивания
- Простая валидация файлов
- Интеграция с Google Drive API
- Улучшенная обработка ошибок
- Система логирования
- Конфигурационные файлы
- Комплексное тестирование
- Улучшение UI/UX
- Оптимизация производительности
- Документация пользователя
- Упаковка приложения
- Создание установщика
- Финальное тестирование
- Подготовка релиза
-
Предиктивная аналитика:
- Прогнозирование времени выполнения на основе исторических данных
- Определение оптимальных задержек для разных типов страниц
- Автоматическая адаптация стратегии повторных попыток
-
Анализ паттернов ошибок:
- Классификация типов ошибок и их причин
- Автоматическое определение проблемных ссылок
- Рекомендации по оптимизации настроек
-
Интеллектуальная валидация:
- OCR для проверки содержимого документов
- Семантический анализ названий должностей
- Автоматическое исправление опечаток в именах файлов
-
Динамическая настройка задержек:
- Мониторинг времени отклика сайта
- Автоматическое увеличение/уменьшение пауз
- Адаптация к нагрузке на сервер Consultant.ru
-
Умное планирование:
- Оптимальное время запуска (низкая нагрузка на сайт)
- Приоритизация файлов по важности
- Балансировка нагрузки между отделами
-
Множественные хранилища:
- Поддержка OneDrive, Dropbox, Яндекс.Диск
- Синхронизация между несколькими облачными сервисами
- Резервное копирование в разные хранилища
-
Облачная обработка:
- Загрузка задач в облачные очереди
- Распределенная обработка файлов
- Облачные уведомления и мониторинг
-
Корпоративные системы:
- Интеграция с 1С, SAP, Oracle HCM
- Автоматическое обновление кадровых систем
- Синхронизация с базами данных сотрудников
-
Системы документооборота:
- Интеграция с SharePoint, Confluence
- Автоматическое создание задач в Jira
- Уведомления в Slack, Microsoft Teams
-
Адаптивный интерфейс:
- Поддержка высоких разрешений (4K, 8K)
- Масштабирование для разных размеров экранов
- Темная/светлая тема с автопереключением
-
Анимации и переходы:
- Плавные анимации прогресса
- Визуальная обратная связь для действий пользователя
- Микроанимации для улучшения UX
-
Интерактивные графики:
- Детальная статистика производительности
- Тепловые карты активности по времени
- Сравнительные диаграммы между сессиями
-
3D визуализация:
- Трехмерное представление структуры отделов
- Интерактивная навигация по иерархии файлов
- Визуализация потоков данных
-
Расписание выполнения:
- Ежедневные, еженедельные, ежемесячные запуски
- Условное выполнение (при обновлении сайта)
- Интеграция с системным планировщиком (cron, Task Scheduler)
-
Триггеры событий:
- Автозапуск при изменениях на Consultant.ru
- Реакция на обновления структуры отделов
- Автоматическая обработка новых должностных инструкций
-
Проактивный мониторинг:
- Отслеживание доступности Consultant.ru
- Мониторинг изменений в структуре сайта
- Проверка актуальности должностных инструкций
-
Система алертов:
- Критические ошибки с немедленным уведомлением
- Еженедельные отчеты о состоянии системы
- Предупреждения о необходимости обновления
-
Шифрование данных:
- Шифрование локальных файлов конфигурации
- Безопасное хранение учетных данных
- Шифрование передачи данных в облако
-
Аудит и логирование:
- Детальные логи всех операций
- Цифровые подписи для файлов
- Отслеживание изменений в документах
-
GDPR и персональные данные:
- Анонимизация логов
- Право на удаление данных
- Согласие на обработку персональных данных
-
Корпоративные стандарты:
- Соответствие ISO 27001
- Интеграция с корпоративными политиками безопасности
- Аудиторские отчеты
-
Кроссплатформенная разработка:
- React Native или Flutter
- Синхронизация с десктопной версией
- Мобильные уведомления
-
Мобильные функции:
- Просмотр прогресса в реальном времени
- Управление задачами
- Быстрый доступ к отчетам
-
Браузерная версия:
- Полнофункциональный веб-интерфейс
- Поддержка всех современных браузеров
- Прогрессивное веб-приложение (PWA)
-
Удаленное управление:
- Запуск задач через веб-интерфейс
- Мониторинг выполнения из любой точки мира
- Совместная работа нескольких пользователей
-
API для разработчиков:
- Открытый API для создания адаптеров новых сайтов
- Базовые классы для быстрой разработки парсеров
- Документация и примеры кода для различных типов ресурсов
- Магазин плагинов с готовыми адаптерами
-
Готовые плагины:
- Адаптеры для популярных правовых систем (Техэксперт, Кодекс)
- Интеграция с корпоративными системами (SharePoint, Confluence)
- Поддержка государственных порталов и библиотек
- Адаптеры для образовательных платформ
-
Пользовательские парсеры:
- Визуальный конструктор парсеров без программирования
- Поддержка Python скриптов для сложной логики
- Пользовательские фильтры и валидаторы
- Кастомные форматы отчетов
-
Адаптивные шаблоны:
- Шаблоны конфигураций для типовых сайтов
- Автоматическое определение структуры сайта
- Машинное обучение для улучшения парсинга
- Поддержка пользовательских тем и локализации
┌─────────────────────────────────────────────────────────────────────────────┐
│ Визуальный конструктор парсеров [Сохранить]│
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─ Предварительный просмотр сайта ───────────────────────────────────────┐ │
│ │ URL: [https://example.com/documents] [Загрузить] │ │
│ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ [Веб-страница с выделенными элементами] │ │ │
│ │ │ ┌─ Документ 1 ────────────────┐ ← [Выделить как: Список документов] │ │ │
│ │ │ │ ● Название документа │ │ │ │
│ │ │ │ ● [Скачать] │ ← [Выделить как: Кнопка скачивания] │ │ │
│ │ │ └─────────────────────────────┘ │ │ │
│ │ │ ┌─ Документ 2 ────────────────┐ │ │ │
│ │ │ │ ● Название документа │ ← [Выделить как: Заголовок] │ │ │
│ │ │ │ ● [Скачать] │ │ │ │
│ │ │ └─────────────────────────────┘ │ │ │
│ │ └─────────────────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Автоматически определенные селекторы ─────────────────────────────────┐ │
│ │ Список документов: .document-item (15 элементов) │ │
│ │ Заголовки документов: .doc-title (15 элементов) │ │
│ │ Кнопки скачивания: .download-btn (15 элементов) │ │
│ │ Пагинация: .pagination .next (1 элемент) │ │
│ │ │ │
│ │ [Проверить селекторы] [Тест скачивания] [Экспорт конфигурации] │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Дополнительная логика ─────────────────────────────────────────────────┐ │
│ │ ☑ Требуется авторизация │ │
│ │ ☑ Обрабатывать JavaScript │ │
│ │ ☑ Ожидать загрузки контента (5 секунд) │ │
│ │ ☐ Прокручивать страницу для подгрузки │ │
│ │ │ │
│ │ Пользовательский код (Python): │ │
│ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │
│ │ │ def custom_processing(driver, document_element): │ │ │
│ │ │ # Дополнительная обработка элемента │ │ │
│ │ │ title = document_element.find_element(By.CLASS, "title").text │ │ │
│ │ │ return title.strip() │ │ │
│ │ └─────────────────────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ [Отмена] [Тест парсера] [Сохранить как шаблон] [Применить] │
└─────────────────────────────────────────────────────────────────────────────┘
-
Многопоточность:
- Параллельная обработка файлов
- Асинхронные операции с облачными сервисами
- Оптимизация использования ресурсов
-
Кэширование:
- Кэширование метаданных файлов
- Локальное кэширование часто используемых данных
- Интеллектуальная предзагрузка
-
Корпоративное развертывание:
- Поддержка множественных экземпляров
- Централизованное управление настройками
- Балансировка нагрузки
-
Облачная архитектура:
- Микросервисная архитектура
- Контейнеризация (Docker, Kubernetes)
- Автоматическое масштабирование
-
Дашборды:
- Интерактивные панели управления
- Настраиваемые виджеты
- Экспорт в популярные BI системы
-
Прогнозирование:
- Анализ трендов использования
- Прогнозирование потребностей в ресурсах
- Оптимизация процессов на основе данных
- Подключение к аналитическим платформам:
- Power BI, Tableau, QlikView
- Автоматическая отправка данных
- Настраиваемые метрики и KPI
-
Диагностические инструменты:
- Проверка целостности системы
- Анализ производительности
- Автоматическое исправление проблем
-
Инструменты миграции:
- Перенос данных между версиями
- Импорт/экспорт конфигураций
- Резервное копирование и восстановление
-
SDK для интеграции:
- Библиотеки для популярных языков программирования
- REST API с полной документацией
- Примеры интеграции
-
Инструменты тестирования:
- Автоматизированное тестирование интеграций
- Симуляция различных сценариев
- Нагрузочное тестирование
-
Компьютерное зрение:
- Автоматическое распознавание структуры документов
- Извлечение ключевой информации из PDF/Word файлов
- Проверка качества сканированных документов
-
Обработка естественного языка:
- Автоматическая категоризация должностей
- Извлечение ключевых навыков и требований
- Генерация сводок и аннотаций
- Неизменяемые записи:
- Блокчейн для отслеживания версий документов
- Криптографические подписи для верификации
- Децентрализованное хранение метаданных
- Квантовая криптография:
- Подготовка к квантово-устойчивому шифрованию
- Исследование квантовых алгоритмов оптимизации
- Универсальность: Поддержка любых веб-ресурсов с документами через настраиваемые парсеры
- Полная автоматизация: Скачивание документов с множественных источников одновременно
- Интеллектуальная обработка: ИИ для валидации, анализа и оптимизации процессов
- Современный интерфейс: Адаптивный GUI с поддержкой множественных ресурсов
- Производительность: 3-5 файлов в минуту с параллельной обработкой
- Надежность: Устойчивость к сетевым проблемам и изменениям структуры сайтов
- Масштабируемость: Корпоративное развертывание с централизованным управлением
- Безопасность: Соответствие международным стандартам и корпоративным политикам
- Правовые системы: Consultant.ru, Garant.ru, Kodeks.ru, Техэксперт
- Корпоративные порталы: SharePoint, Confluence, внутренние системы
- Государственные ресурсы: Официальные сайты министерств и ведомств
- Образовательные платформы: LMS системы, онлайн-курсы
- Пользовательские сайты: Любые веб-ресурсы через визуальный конструктор
- Множественные хранилища: Google Drive, OneDrive, Dropbox, Яндекс.Диск
- Резервное копирование: Автоматическое дублирование в несколько облачных сервисов
- Синхронизация: Централизованное управление документами
- Система плагинов: Открытая архитектура для создания новых адаптеров
- Визуальный конструктор: Создание парсеров без программирования
- Предиктивная аналитика: Машинное обучение для оптимизации процессов
- Мобильная поддержка: Приложения для iOS/Android и веб-интерфейс
- API интеграция: Подключение к корпоративным системам и BI платформам
- Простота настройки: Пошаговые мастера для добавления новых ресурсов
- Детальная отчетность: Расширенная аналитика и визуализация данных
- Гибкая кастомизация: Настройка под специфические потребности организации
- Многоязычность: Поддержка различных языков и региональных настроек