63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
# vendored from jiangchang-platform-kit; do not edit here, edit the kit.
|
|
"""统一 persistent context 启动封装。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from typing import TYPE_CHECKING
|
|
|
|
from ..runtime_env import find_chrome_executable
|
|
from .stealth import (
|
|
STEALTH_INIT_SCRIPT,
|
|
persistent_context_launch_parts,
|
|
stealth_enabled,
|
|
)
|
|
|
|
if TYPE_CHECKING:
|
|
from playwright.async_api import BrowserContext
|
|
|
|
|
|
async def launch_persistent_browser(
|
|
playwright,
|
|
*,
|
|
profile_dir: str,
|
|
channel: str = "chrome",
|
|
executable_path: str | None = None,
|
|
headless: bool | None = None,
|
|
extra_args: list[str] | None = None,
|
|
record_video_dir: str | None = None,
|
|
) -> "BrowserContext":
|
|
"""用 stealth 参数启动 persistent context + 注入 STEALTH_INIT_SCRIPT。
|
|
|
|
headless=None 时读 OPENCLAW_BROWSER_HEADLESS。
|
|
record_video_dir 非空则开录屏。
|
|
"""
|
|
if headless is None:
|
|
v = (os.environ.get("OPENCLAW_BROWSER_HEADLESS") or "0").strip().lower()
|
|
headless = v in ("1", "true", "yes", "on")
|
|
|
|
chrome = executable_path or find_chrome_executable()
|
|
if not chrome:
|
|
raise RuntimeError(
|
|
"ERROR:MISSING_BROWSER 未检测到 Chrome 或 Edge 浏览器,请安装后重试。"
|
|
)
|
|
|
|
args, ignore = persistent_context_launch_parts(extra_args=extra_args)
|
|
launch_kwargs: dict = dict(
|
|
user_data_dir=profile_dir,
|
|
headless=headless,
|
|
executable_path=chrome,
|
|
locale="zh-CN",
|
|
no_viewport=True,
|
|
args=args,
|
|
)
|
|
if ignore is not None:
|
|
launch_kwargs["ignore_default_args"] = ignore
|
|
if record_video_dir:
|
|
launch_kwargs["record_video_dir"] = record_video_dir
|
|
|
|
context = await playwright.chromium.launch_persistent_context(**launch_kwargs)
|
|
if stealth_enabled():
|
|
await context.add_init_script(STEALTH_INIT_SCRIPT)
|
|
return context
|