Загрузка данных


Ты работаешь в проекте:

/home/sigma.sbrf.ru@23865613/home/work/skil-scrap/adt-markdownify-meta

Проблема:
Обычный browser mode запускает SberBrowser и пытается создать новую страницу.
В корпоративной среде SberBrowser при старте может показывать окно выбора сертификата/авторизации и не создаёт страницу, поэтому скрипт падает:

SberBrowser не создал страницу за 120 сек.

Нужно добавить режим подключения к уже открытому SberBrowser, чтобы пользователь сам открыл вкладку META, а скрипт только подключился к ней и выгрузил HTML.

Задача:
Добавить режим cdp_existing через Playwright connect_over_cdp.

Важно:
- Не удаляй текущий browser mode.
- Не удаляй текущий scrape_meta.py.
- Не добавляй API.
- Не добавляй endpoint-ы.
- Не добавляй requests/httpx/aiohttp/urllib.
- Не добавляй token, cookie, login, password.
- Скрипт не должен сохранять cookie/token.
- Скрипт должен только читать HTML уже открытой вкладки.
- Не запускай полный проект автоматически.
- Сначала только правки кода и конфига.

Нужно изменить:

1. meta_exporter.yaml.example

Добавить режим:

mode: "cdp_existing" # browser или cdp_existing

Добавить блок:

cdp:
  endpoint_url: "http://127.0.0.1:9222"
  target_url_contains: "meta.sberbank.ru"
  fallback_title: "META page"

Оставить текущие настройки browser/sberbrowser как есть.

2. scripts/scrape_meta.py

Добавить новую функцию:

export_meta_from_existing_browser(config: dict)

Логика функции:

- прочитать из config:
  cdp.endpoint_url
  cdp.target_url_contains
  cdp.fallback_title
  output_dir
  temp_html_dir

- подключиться к открытому браузеру:

with sync_playwright() as pw:
    browser = pw.chromium.connect_over_cdp(endpoint_url)

- получить contexts:
    browser.contexts

- пройти по всем context.pages

- найти страницу, где:
    target_url_contains in page.url

- если страница не найдена:
    вывести понятную ошибку:
    "Не найдена открытая вкладка META. Откройте страницу META в SberBrowser, запущенном с --remote-debugging-port=9222"
    и завершить без падения

- если страница найдена:
    получить url = page.url
    получить title = page.title()
    если title пустой, использовать fallback_title
    получить html = page.content()
    сохранить HTML через save_html(temp_html_dir, title, html)
    конвертировать через build_meta_markdown(html, url)
    сохранить Markdown через write_markdown(output_dir, title, url, markdown)
    создать README.md через write_index(output_dir, exported_files)
    вывести путь к созданному Markdown

- browser.close() не вызывать, потому что это внешний пользовательский браузер.
  Можно вызвать browser.disconnect(), если доступно.
  Если disconnect недоступен, просто выйти из контекста.

3. run_exporter.py

Изменить запуск так, чтобы он поддерживал mode:

- загрузить config через get_config()
- mode = config.get("mode", "browser")

Если mode == "browser":
    from scripts.scrape_meta import export_meta
    export_meta(config)

Если mode == "cdp_existing":
    from scripts.scrape_meta import export_meta_from_existing_browser
    export_meta_from_existing_browser(config)

Если mode неизвестный:
    raise ValueError(f"Неизвестный mode: {mode}")

Важно:
Импорт из scripts.scrape_meta можно оставить, потому что playwright теперь установлен.
Но лучше оставить логику простой.

4. README.md

Добавить раздел:

## Режим cdp_existing: выгрузка уже открытой вкладки META

Инструкция:

1. Закройте все окна SberBrowser или используйте отдельный профиль.
2. Запустите SberBrowser с remote debugging:

/opt/Sberbrowser/sberbrowser/sberbrowser \
  --remote-debugging-port=9222 \
  --user-data-dir=/tmp/sberbrowser-meta-profile \
  --no-sandbox \
  --disable-setuid-sandbox \
  --disable-dev-shm-usage

3. В открывшемся браузере вручную откройте нужную страницу META.
4. Выберите сертификат/выполните вход.
5. Убедитесь, что вкладка с META открыта.
6. В meta_exporter.yaml укажите:

mode: "cdp_existing"

cdp:
  endpoint_url: "http://127.0.0.1:9222"
  target_url_contains: "meta.sberbank.ru"
  fallback_title: "META page"

7. Запустите:

source .venv/bin/activate
export PLAYWRIGHT_NODEJS_PATH=/usr/bin/node
python run_exporter.py

5. Проверка

После правок выполни только:

python -m py_compile run_exporter.py scripts/config_loader.py scripts/scrape_meta.py scripts/html_to_markdown.py scripts/markdown_writer.py

Не запускай python run_exporter.py автоматически.

В конце покажи:
1. полный фрагмент meta_exporter.yaml.example с mode и cdp;
2. полный код новой функции export_meta_from_existing_browser;
3. полный код run_exporter.py;
4. инструкцию, как запустить SberBrowser с remote-debugging-port.