From fbeeceae991dd01aff0cd498b9dd480b8e930bfc Mon Sep 17 00:00:00 2001 From: chinbor Date: Sun, 15 Nov 2026 20:33:40 +0800 Subject: [PATCH] fix(captcha): use empty placeholder for recaptcha render and support browser_headless --- src/core/config.py | 5 +++++ src/services/browser_captcha.py | 16 ++++++++++------ src/services/recaptcha_runtime.py | 7 +++++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/core/config.py b/src/core/config.py index f4d368cb..aeb83368 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -427,6 +427,11 @@ def browser_launch_background(self) -> bool: """有头浏览器打码是否默认后台启动,避免抢占前台窗口。""" return self._config.get("captcha", {}).get("browser_launch_background", True) + @property + def browser_headless(self) -> bool: + """browser 模式是否启用无头模式(--headless=new / channel=chromium)。""" + return bool(self._config.get("captcha", {}).get("browser_headless", False)) + def set_browser_launch_background(self, enabled: bool): """设置有头浏览器打码是否后台启动。""" if "captcha" not in self._config: diff --git a/src/services/browser_captcha.py b/src/services/browser_captcha.py index 35950368..59f2ad16 100644 --- a/src/services/browser_captcha.py +++ b/src/services/browser_captcha.py @@ -1620,12 +1620,16 @@ async def _create_browser( f"[BrowserCaptcha] Token-{self.token_id} using custom browser executable: {browser_executable_path}" ) - browser = await playwright.chromium.launch( - headless=False, - executable_path=browser_executable_path, - proxy=proxy_option, - args=browser_args, - ) + use_headless = bool(getattr(config, "browser_headless", False)) + launch_kwargs = { + "headless": use_headless, + "executable_path": browser_executable_path, + "proxy": proxy_option, + "args": browser_args, + } + if use_headless and not browser_executable_path: + launch_kwargs["channel"] = "chromium" + browser = await playwright.chromium.launch(**launch_kwargs) context = await browser.new_context( viewport=viewport, locale="en-US", diff --git a/src/services/recaptcha_runtime.py b/src/services/recaptcha_runtime.py index 1bf9cf3f..ae77f052 100644 --- a/src/services/recaptcha_runtime.py +++ b/src/services/recaptcha_runtime.py @@ -109,10 +109,13 @@ typeof window.grecaptcha.enterprise.render === 'function' && window.__flow2apiRecaptchaClientId === undefined ) { + const holder = document.createElement('div'); + holder.style.display = 'none'; + (document.body || document.documentElement).appendChild(holder); window.__flow2apiRecaptchaClientId = window.grecaptcha.enterprise.render( - document.documentElement, - { sitekey: siteKey, action: requestedAction } + holder, + { sitekey: siteKey, size: 'invisible', action: requestedAction } ); } if (window.__flow2apiRecaptchaClientId !== undefined) {