Загрузка данных
Ты работаешь в проекте:
/Users/23865613/IdeaProjects/untitled/zadanie2/source_project
Контекст:
Проект уже умеет выгружать META в Markdown и создавать структурированную архитектуру в:
projects/SNL/meta
Также уже создан модуль:
scripts/structured_meta_writer.py
Но есть две проблемы:
1. META — это SPA-интерфейс. Часть данных на странице может быть свернута или не подгружена, пока пользователь не нажмет на раскрывающиеся блоки, вкладки, строки таблиц или не прокрутит страницу.
2. Markdown-файлы сейчас нужно сделать более читаемыми для наставника: меньше технического мусора, больше структурированных разделов, таблиц и понятных заголовков.
Задача:
Доработать проект так, чтобы перед сохранением HTML скрипт максимально раскрывал страницу META и сохранял более полный HTML, а итоговые Markdown-файлы были удобны для чтения.
Важно:
- Не переписывай проект с нуля.
- Не ломай текущую выгрузку output/*.md.
- Не ломай структурированную выгрузку projects/SNL/meta.
- Не используй API META.
- Не используй requests/httpx/aiohttp/urllib для обращения к META.
- Не добавляй token/cookie/login/password.
- Не сохраняй cookies/sessionStorage/localStorage.
- Авторизация только вручную через SberBrowser.
- Skill остается read-only.
- Не создавай, не редактируй и не удаляй объекты META.
- Не нажимай кнопку "Создать".
- Не выполняй write-операции в META.
---
# Часть 1. Добавить раскрытие страницы перед сохранением HTML
Нужно доработать scripts/scrape_meta.py.
Перед вызовом page.content() нужно выполнить функцию, которая максимально раскрывает страницу:
expand_meta_page(page)
Создай эту функцию в scripts/scrape_meta.py или отдельном файле scripts/meta_page_expander.py.
Функция должна быть безопасной и read-only.
Что должна делать функция:
1. Дождаться загрузки страницы:
- page.wait_for_load_state("domcontentloaded")
- небольшая пауза 2-3 секунды для SPA-рендера.
2. Прокрутить страницу вниз и вверх:
- несколько раз window.scrollTo(0, document.body.scrollHeight)
- затем window.scrollTo(0, 0)
- между прокрутками делать короткую паузу.
3. Попробовать раскрыть свернутые блоки:
Нужно искать и нажимать только безопасные элементы, которые НЕ создают и НЕ изменяют данные.
Безопасные тексты/селекторы для клика:
- "Показать еще"
- "Показать всё"
- "Раскрыть"
- "Развернуть"
- "Еще"
- "Все"
- стрелки раскрытия таблиц/аккордеонов
- элементы с aria-expanded="false"
- кнопки/элементы раскрытия внутри таблиц
Нельзя нажимать:
- "Создать"
- "Сохранить"
- "Удалить"
- "Редактировать"
- "Добавить"
- "Заполнить с AI"
- "Отправить"
- "Согласовать"
- "Опубликовать"
- любые кнопки write-операций.
Сделай deny-list текстов:
CREATE / SAVE / DELETE / EDIT / ADD / SUBMIT / AI / WRITE
и русские аналоги:
Создать
Сохранить
Удалить
Редактировать
Добавить
Заполнить
Заполнить с AI
Отправить
Согласовать
Опубликовать
Если текст кнопки содержит слово из deny-list — не нажимать.
4. Раскрыть таблицы:
Если на странице есть таблица, попробовать:
- прокрутить таблицу горизонтально вправо;
- прокрутить таблицу вниз;
- раскрыть строки, если у строк есть стрелка/chevron.
5. После раскрытия снова прокрутить страницу вниз и вверх.
6. Если на каком-то клике ошибка — не падать, а логировать warning и продолжать.
7. В логах явно выводить:
- сколько элементов пытались раскрыть;
- сколько успешно раскрыто;
- сколько пропущено из-за deny-list;
- сколько ошибок при раскрытии.
Пример логов:
EXPAND START
EXPAND scroll page
EXPAND clicked: ...
EXPAND skipped unsafe button: Создать
EXPAND DONE clicked=12 skipped=3 errors=1
---
# Часть 2. Добавить настройку в конфиг
В meta_exporter.yaml.example добавь:
page_expansion:
enabled: true
scroll_rounds: 5
click_expandable: true
max_clicks: 80
wait_after_click_ms: 300
Если в meta_exporter.yaml такой секции нет, использовать дефолты.
---
# Часть 3. Улучшить читаемость Markdown
Нужно доработать scripts/html_to_markdown.py и/или scripts/markdown_writer.py так, чтобы Markdown был читаемым.
Общие правила:
1. Удалять навигационный мусор:
- верхнее меню META;
- повторяющиеся breadcrumb-строки;
- пустые ссылки;
- системные кнопки;
- лишние повторяющиеся статусы;
- слишком длинные неструктурированные строки без смысла.
2. Сохранять полезные данные:
- название объекта;
- тип объекта;
- код объекта;
- статус ЖЦ;
- владелец;
- родитель;
- связанные объекты;
- таблицы;
- ссылки на связанные объекты;
- атрибуты.
3. Для каждого итогового Markdown-файла должна быть понятная структура:
# Название объекта или раздела
## Источник
URL страницы META.
## Тип объекта
АС / ФП / Модуль / Подмодуль / Технический компонент / Точка взаимодействия / Интеграционное взаимодействие / Стенд.
## Основная информация
Таблица:
| Поле | Значение |
|---|---|
## Атрибуты
Таблица, если найдена.
## Связанные объекты
Список или таблица.
## Исходные данные
Краткий очищенный фрагмент данных, если структурный парсинг не смог всё распознать.
4. Для output/*.md:
- HIERARCHY.md должен быть кратким и структурированным.
- INTERACTION_POINTS.md должен содержать список/таблицу точек взаимодействия.
- INTEGRATION_INTERACTIONS.md должен содержать таблицу/список интеграционных взаимодействий.
- STANDS.md должен содержать таблицу стендов.
- TECH_RESOURCES.md должен содержать список технических компонентов.
- ATTRIBUTES.md должен содержать атрибуты в таблицах.
- EXPORT_REPORT.md должен быть отчетом о запуске, а не сырой выгрузкой.
5. Для projects/SNL/meta/**/*.md:
Каждый README.md должен быть читаемым:
# Название
## Тип объекта
## Родитель
## Источник META
## Основная информация
## Атрибуты
## Связанные объекты
## Ограничения выгрузки
Если данных нет, писать честно:
"Данные не найдены в текущей выгрузке."
Не выдумывать значения.
---
# Часть 4. Добавить отдельный отчет качества Markdown
Создай новый файл после запуска:
output/MARKDOWN_QUALITY_REPORT.md
В нем должно быть:
# Отчет качества Markdown
## Проверенные файлы
Таблица:
| Файл | Размер | Есть заголовок | Есть источник | Есть структурные разделы | Статус |
|---|---:|---|---|---|---|
Проверить основные файлы:
- output/HIERARCHY.md
- output/INTERACTION_POINTS.md
- output/INTEGRATION_INTERACTIONS.md
- output/STANDS.md
- output/TECH_RESOURCES.md
- output/INTERACTIONS.md
- output/ATTRIBUTES.md
- output/EXPORT_REPORT.md
- output/TASK_COVERAGE.md
Статусы:
- OK
- PARTIAL
- EMPTY
- NEEDS_REVIEW
Также проверить несколько файлов из projects/SNL/meta.
---
# Часть 5. Не ломать текущую структуру
После доработки должны по-прежнему создаваться:
output/*.md
temp_html/*.html
projects/SNL/meta/**/*.md
---
# Часть 6. Проверка
Выполни:
python -m py_compile run_exporter.py scripts/*.py
Потом тестовый запуск:
source .venv/bin/activate
python run_exporter.py
После запуска проверь:
find output -maxdepth 1 -type f | sort
find projects/SNL/meta -maxdepth 6 -type f | sort
ls -lh output/*.md
Также покажи первые 80 строк файлов:
head -80 output/HIERARCHY.md
head -80 output/INTERACTION_POINTS.md
head -80 output/INTEGRATION_INTERACTIONS.md
head -80 output/STANDS.md
head -80 output/TECH_RESOURCES.md
head -80 output/MARKDOWN_QUALITY_REPORT.md
---
# Финальный отчет
В конце покажи:
# Этап 3 — полное раскрытие страниц и читаемый Markdown
## 1. Что изменено
## 2. Как теперь раскрывается META-страница перед сохранением HTML
## 3. Какие unsafe-кнопки не нажимаются
## 4. Какие Markdown-файлы стали читаемее
## 5. Какие файлы добавлены
## 6. Какие файлы изменены
## 7. Где лежит структурированная архитектура
projects/SNL/meta
## 8. Результат py_compile
## 9. Результат тестового запуска
- всего URL;
- успешно;
- ошибок;
- сколько файлов output создано;
- сколько файлов projects/SNL/meta создано.
## 10. Ограничения
Честно указать:
- если данные скрыты внутри карточек, которые открываются только отдельным кликом по объекту, их нужно выгружать через отдельный URL карточки;
- если таблица виртуализированная, могут быть видны только строки, которые META отрендерила в DOM;
- write-операции не выполняются.
Главная цель:
Сделать так, чтобы skill выгружал максимально полный HTML из META, раскрывал свернутые read-only блоки и формировал читаемые Markdown-файлы для демонстрации наставнику.