# vendored from jiangchang-platform-kit; do not edit here, edit the kit. """淡化 Playwright 自动化指纹,降低 baxia/x5sec 风控命中率。 关闭:环境变量 OPENCLAW_PLAYWRIGHT_STEALTH=0(或 false/off/no)。 """ from __future__ import annotations import os STEALTH_INIT_SCRIPT = """ (() => { try { Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); } catch (e) {} try { window.chrome = window.chrome || {}; window.chrome.runtime = window.chrome.runtime || {}; } catch (e) {} try { const orig = navigator.permissions && navigator.permissions.query; if (orig) { navigator.permissions.query = (p) => p && p.name === 'notifications' ? Promise.resolve({ state: Notification.permission }) : orig(p); } } catch (e) {} try { Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5] }); } catch (e) {} try { Object.defineProperty(navigator, 'languages', { get: () => ['zh-CN', 'zh'] }); } catch (e) {} try { Object.defineProperty(navigator, 'hardwareConcurrency', { get: () => 8 }); } catch (e) {} try { Object.defineProperty(navigator, 'deviceMemory', { get: () => 8 }); } catch (e) {} try { const getParameter = WebGLRenderingContext.prototype.getParameter; WebGLRenderingContext.prototype.getParameter = function (p) { if (p === 37445) return 'Intel Inc.'; if (p === 37446) return 'Intel Iris OpenGL Engine'; return getParameter.call(this, p); }; } catch (e) {} })(); """ def stealth_enabled() -> bool: v = (os.environ.get("OPENCLAW_PLAYWRIGHT_STEALTH") or "1").strip().lower() return v not in ("0", "false", "no", "off") def persistent_context_launch_parts( *, extra_args: list[str] | None = None ) -> tuple[list[str], list[str] | None]: """返回 (args, ignore_default_args)。ignore_default_args 为 None 时不要传给 launch。""" args = ["--start-maximized"] if extra_args: args = args + list(extra_args) if not stealth_enabled(): return args, None if "--disable-blink-features=AutomationControlled" not in args: args.append("--disable-blink-features=AutomationControlled") return args, ["--enable-automation"]