Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/core/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
16 changes: 10 additions & 6 deletions src/services/browser_captcha.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
7 changes: 5 additions & 2 deletions src/services/recaptcha_runtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down