Files
e2e_Pets/codegen.py
2026-09-03 15:40:00 +03:00

126 lines
4.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Инструмент запуска визуального рекордера 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()
# Если передан URL без схемы (например, paws.vet.goznak.ru) — добавляем https://
url = args.url
if not url.startswith("http://") and not url.startswith("https://"):
url = f"https://{url}"
# Определение режима 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(url)
print(f"\n{'=' * 70}")
print("ЗАПУСК ВИЗУАЛЬНОГО РЕКОРДЕРА PLAYWRIGHT")
print(f"Целевой URL: {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 GOST22 ({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(url)
except Exception as e:
print(f"Переход на {url}: {e}")
# page.pause() активирует панель рекордера/инспектора
page.pause()
context.close()
browser.close()
if __name__ == "__main__":
main()