Files
any-auto-register/core/browser_runtime.py
2026-04-03 23:14:03 +08:00

65 lines
1.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.
"""Browser runtime helpers for headless/headed resolution."""
from __future__ import annotations
import logging
import os
import sys
from typing import Iterable
logger = logging.getLogger(__name__)
_TRUE_VALUES = {"1", "true", "yes", "on"}
_FALSE_VALUES = {"0", "false", "no", "off"}
def parse_env_bool(name: str) -> bool | None:
raw = os.getenv(name)
if raw is None:
return None
value = str(raw).strip().lower()
if not value:
return None
if value in _TRUE_VALUES:
return True
if value in _FALSE_VALUES:
return False
logger.warning("忽略无效布尔环境变量 %s=%r", name, raw)
return None
def resolve_browser_headless(
requested_headless: bool | None,
*,
default_headless: bool = True,
override_env_names: Iterable[str] = ("PLAYWRIGHT_HEADLESS", "REGISTER_HEADLESS"),
) -> tuple[bool, str]:
for env_name in override_env_names:
override = parse_env_bool(env_name)
if override is not None:
return override, f"env:{env_name}={str(override).lower()}"
if requested_headless is not None:
return bool(
requested_headless
), f"requested:{str(bool(requested_headless)).lower()}"
return bool(default_headless), f"default:{str(bool(default_headless)).lower()}"
def ensure_browser_display_available(headless: bool) -> None:
if headless:
return
if not sys.platform.startswith("linux"):
return
if os.getenv("DISPLAY"):
return
raise RuntimeError(
"当前为 Linux 有头浏览器模式,但未检测到 DISPLAY。"
"Docker 内请启用 Xvfb本地 Linux 请先启动图形环境或改用无头模式。"
)