""" Инструмент запуска визуального рекордера Playwright Codegen с автоматической поддержкой Стандартного и ГОСТ TLS. Использование: .\\venv\\Scripts\\python.exe codegen.py [URL] [опции] Примеры: # Автоопределение TLS для URL из .env (по умолчанию): .\\venv\\Scripts\\python.exe codegen.py # Запуск для конкретного URL: .\\venv\\Scripts\\python.exe codegen.py https://vet.goznak.ru # Принудительно через Chromium-GOST: .\\venv\\Scripts\\python.exe codegen.py --gost # Принудительно через стандартный Chromium: .\\venv\\Scripts\\python.exe codegen.py --standard """ import argparse import os import sys # pyrefly: ignore [missing-import] from dotenv import load_dotenv # pyrefly: ignore [missing-import] from playwright.sync_api import sync_playwright from tests.utils.tls import detect_tls_mode, find_gost_browser_executable load_dotenv() DEFAULT_URL = os.getenv("BASE_URL", "https://vet.goznak.ru") def main(): parser = argparse.ArgumentParser( description="Визуальный рекордер Playwright с поддержкой Chromium-GOST и стандартного Chromium." ) parser.add_argument( "url", nargs="?", default=DEFAULT_URL, help=f"Целевой URL портала (по умолчанию из .env: {DEFAULT_URL})", ) parser.add_argument( "--gost", action="store_true", help="Принудительно запустить рекордер через Chromium-GOST", ) parser.add_argument( "--standard", action="store_true", help="Принудительно запустить рекордер через встроенный Chromium Playwright", ) args = parser.parse_args() # Определение режима TLS if args.gost: is_gost = True tls_desc = "Принудительно (ГОСТ TLS)" elif args.standard: is_gost = False tls_desc = "Принудительно (Стандартный TLS)" else: is_gost, tls_desc = detect_tls_mode(args.url) print(f"\n{'=' * 70}") print("ЗАПУСК ВИЗУАЛЬНОГО РЕКОРДЕРА PLAYWRIGHT") print(f"Целевой URL: {args.url}") print(f"Режим TLS: {tls_desc}") # Включаем режим отладчика/инспектора Playwright os.environ["PWDEBUG"] = "1" with sync_playwright() as playwright: if is_gost: gost_path = find_gost_browser_executable() if not gost_path or not os.path.exists(gost_path): print("\n[ОШИБКА] Chromium-GOST не найден в системе!") print("Скачайте его с https://github.com/deemru/chromium-gost/releases") print("и распакуйте в %LOCALAPPDATA%\\Chromium-Gost,") print("либо укажите путь в .env: CHROMIUM_GOST_PATH=...") sys.exit(1) print(f"Браузер: Chromium GOST ({gost_path})") browser = playwright.chromium.launch( executable_path=gost_path, headless=False, ) else: print("Браузер: Chromium (Playwright)") browser = playwright.chromium.launch(headless=False) context = browser.new_context( ignore_https_errors=True, viewport={"width": 1920, "height": 1080}, ) page = context.new_page() print(f"{'=' * 70}") print("1. Открылись окна: Браузер и Playwright Inspector.") print("2. В окне инспектора нажмите кнопку записи (красный кружок 'Record').") print("3. Кликайте и заполняйте формы — код генерируется в окне инспектора.") print("4. Для завершения просто закройте окно браузера.") print(f"{'=' * 70}\n") try: page.goto(args.url) except Exception as e: print(f"Переход на {args.url}: {e}") # page.pause() активирует панель рекордера/инспектора page.pause() context.close() browser.close() if __name__ == "__main__": main()