68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
# 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"]
|