mirror of
https://github.com/zc-zhangchen/any-auto-register.git
synced 2026-05-08 00:04:07 +08:00
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
"""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 请先启动图形环境或改用无头模式。"
|
||
)
|