From 89503e145183edcf0c884651c09e9387e20d1dd8 Mon Sep 17 00:00:00 2001 From: Milofax <2537423+Milofax@users.noreply.github.com> Date: Fri, 13 Feb 2026 03:16:28 +0100 Subject: [PATCH] fix(browser): hide navigator.webdriver from reCAPTCHA v3 detection (openclaw#10735) thanks @Milofax Verified: - pnpm install --frozen-lockfile - pnpm build - pnpm check - pnpm test Co-authored-by: Milofax <2537423+Milofax@users.noreply.github.com> Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> --- CHANGELOG.md | 1 + src/browser/chrome.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3244bb8f6b..b939b40936d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ Docs: https://docs.openclaw.ai - Discord: process DM reactions instead of silently dropping them. (#10418) Thanks @mcaxtr. - Discord: treat Administrator as full permissions in channel permission checks. Thanks @thewilloftheshadow. - Discord: respect replyToMode in threads. (#11062) Thanks @cordx56. +- Browser: add Chrome launch flag `--disable-blink-features=AutomationControlled` to reduce `navigator.webdriver` automation detection issues on reCAPTCHA-protected sites. (#10735) Thanks @Milofax. - Heartbeat: filter noise-only system events so scheduled reminder notifications do not fire when cron runs carry only heartbeat markers. (#13317) Thanks @pvtclawn. - Signal: render mention placeholders as `@uuid`/`@phone` so mention gating and Clawdbot targeting work. (#2013) Thanks @alexgleason. - Discord: omit empty content fields for media-only messages while preserving caption whitespace. (#9507) Thanks @leszekszpunar. diff --git a/src/browser/chrome.ts b/src/browser/chrome.ts index f30d4e6e96e..8c854caece8 100644 --- a/src/browser/chrome.ts +++ b/src/browser/chrome.ts @@ -214,6 +214,9 @@ export async function launchOpenClawChrome( args.push("--disable-dev-shm-usage"); } + // Stealth: hide navigator.webdriver from automation detection (#80) + args.push("--disable-blink-features=AutomationControlled"); + // Always open a blank tab to ensure a target exists. args.push("about:blank");