You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RedditVideoMakerBot/utils/browser_backend.py

47 lines
1.4 KiB

"""Optional browser backend adapter for Playwright-compatible browsers."""
from contextlib import contextmanager
from typing import Iterator
from playwright.sync_api import Browser, sync_playwright
from utils import settings
def _configured_backend() -> str:
config = settings.config if isinstance(settings.config, dict) else {}
browser_config = config.get("settings", {}).get("browser", {})
return str(browser_config.get("backend", "playwright")).casefold()
@contextmanager
def launch_browser(headless: bool = True) -> Iterator[Browser]:
"""Launch the configured browser backend.
Defaults to stock Playwright. CloakBrowser is opt-in via
settings.browser.backend = "cloakbrowser" and returns a Playwright-compatible
Browser object, preserving browser.new_context(...) call sites.
"""
backend = _configured_backend()
if backend == "cloakbrowser":
import cloakbrowser
browser = cloakbrowser.launch(headless=headless, humanize=True)
try:
yield browser
finally:
browser.close()
return
if backend != "playwright":
raise ValueError(
f"Unsupported browser backend '{backend}'. Use 'playwright' or 'cloakbrowser'."
)
with sync_playwright() as playwright:
browser = playwright.chromium.launch(headless=headless)
try:
yield browser
finally:
browser.close()