Загрузка данных
Ты работаешь в проекте:
/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.