domovoy_bot/scraper_gis/ARCHITECTURE_V4_MASTER_PLAN.md

5.2 KiB
Raw Blame History

🏛️ Архитектура Жнеца V4: "Магистр" (ТЗ и План Работ)

Дата: 02.05.2026 Автор: Gemini CLI (на базе глубокого анализа ошибок и логики Аристотеля) Цель: 100% автономный сбор критически важных юридических документов (Информационные сообщения, Обращения, Договоры) с портала ГИС ЖКХ.

🔬 Анализ ошибок предыдущих версий

  1. Слепота к фреймам: ГИС ЖКХ активно использует iframe и подгрузку контента через Angular. Обычные селекторы не срабатывали.
  2. Stale Element Reference: При возврате из карточки документа назад в список (через кнопку "Назад"), Angular полностью перерисовывает страницу. Сохраненные ранее в памяти скрипта ссылки на документы уничтожались. Скрипт кликал "в пустоту" и падал.
  3. Отсутствие четкой последовательности: Агент пытался быть "умным" и угадывать состояние, что приводило к хаотичным прыжкам между разделами.
  4. Игнорирование конкретных указаний пользователя: Неумение распознать кнопку входа (когда куки живы) и неспособность пройти по четко заданным разделам.

🏗️ Новая Архитектура: Жесткий Маршрутизатор

Вместо того чтобы "угадывать" состояние страницы, робот будет работать как Машина Состояний (FSM) с четким линейным планом.

Фаза 0: Авторизация и Инициализация

  • Открываем dom.gosuslugi.ru.
  • Проверка входа:
    • Ищем кнопку "Выйти" или ФИО пользователя. Если есть -> Идем к Фазе 1.
    • Ищем кнопку "Личный кабинет" или "Войти". Если есть -> Кликаем, ждем загрузки, проверяем вход.
    • Если ничего не понятно -> Пишем в Телеграм: "Нужен логин руками", ждем 60 секунд.

Фаза 1: Информационные сообщения (Уведомления)

Юридически значимые оповещения.

  1. Переход в раздел уведомлений.
  2. Ожидание полной загрузки таблицы.
  3. Скриншот всего экрана (для фиксации дат).
  4. Поиск и скачивание всех прикрепленных файлов (документы, PDF, ZIP).
  5. Проверка пагинации -> если есть "Следующая", кликаем, скриншотим, скачиваем.

Фаза 2: Обращения и ответы на них

Переписка с госорганами и УК.

  1. Переход в раздел обращений.
  2. Скриншот списка.
  3. Получение количества обращений на текущей странице.
  4. Цикл for i in range(count):
    • Находим список заново (защита от Stale Element).
    • Кликаем на i-тое обращение.
    • Скриншот карточки обращения.
    • Поиск и скачивание всех прикрепленных файлов.
    • Возврат назад (клик по "хлебным крошкам" или page.go_back()).
    • Ожидание прогрузки списка.
  5. Обработка пагинации.

Фаза 3: Информация о договорах по дому

  1. Переход в раздел договоров.
  2. Нажатие кнопки "Найти" -> ожидание таблицы.
  3. Цикл for i in range(count) (Аналогично Фазе 2):
    • Заново ищем все ссылки "Договор...".
    • Кликаем i-тую ссылку.
    • Скриншот карточки.
    • Поиск всех кнопок скачивания во всех фреймах.
    • Загрузка в NAS (gis_archive/contracts/[ИМЯ]/).
    • Генерация MD-отчета в Obsidian.
    • Возврат назад, ожидание таблицы.

🛡️ Модуль Защиты и Отчетности

  • Playwright Persistent Context: Куки сохраняются.
  • Smart Waiters: Использование wait_for_load_state("networkidle") и случайных пауз (3-7 сек) для имитации человека.
  • Telegram Logging: Отчет о начале каждой фазы, о скачивании каждого файла, о завершении миссии.