Back to the BotGuard study
Study document · October 2026

Browser checks, October 19, 2026

Chrome settings, webdriver signal and controlled factorial matrix.

Powered by RESONEO

Automation signal and Chrome settings

In the controlled matrix, outcomes follow the native value of navigator.webdriver, independently of the presence of --enable-automation. This finding concerns the tested conditions, not a universal Google rule.

Factorial comparison

Chrome 153.0.8010.52, same binary and SHA-256, same VPS, unchanged IPv4 and IPv6 addresses, same query “musée du Louvre site officiel”, fr-FR/fr language, 1280 × 720 viewport. Each navigation uses a fresh profile. The getter remains native; its value is checked before and after navigation. CDP is connected in every cell.

The Blink AutomationControlled feature is disabled in all four combinations. The CDP command Emulation.setAutomationOverride controls the native signal independently of the flag. Two blocks each contain all four combinations in a randomised order fixed before execution (seed 20261019). Two ordinary controls, without feature disabling or the flag, bracket the trials.

--enable-automation flagNative webdriverOutcome
Absentfalse2 results out of 2
Presentfalse2 results out of 2
Absenttrue2 refusals out of 2
Presenttrue2 refusals out of 2

Both controls display results. All ten navigations are complete, without technical errors or changes to exit addresses. No independent flag effect is distinguishable in this matrix. The native-signal intervention supports a causal role in this environment; it does not reveal the server score or attribute the verdict to a particular VM read.

Launch-setting and browser-control checks

The browser and launch-setting comparison contains 37 navigations, separate from the factorial matrix. Options come from the Chrome process launched by Playwright 1.51, excluding the control channel, profile and starting URL.

ConfigurationObservation
Ordinary Chrome with a debugging port openResults, with or without Playwright attached
List of 17 disabled features3 results out of 3
Other 29 Playwright settings3 results out of 3
--enable-automation alone, without signal intervention1 refusal; webdriver=true
All 31 settings, without PlaywrightRefusal

The groups cover all 31 settings; combining the 30 settings without the flag was not tested. Refusals in this launch-setting comparison are measured only once per configuration. Flag and grouped-option controls also verify the IPv6 exit used by Chrome; the general Chrome/Camoufox and debugging-port comparisons check IPv4 only.

A JavaScript replacement getter returning false also receives a refusal, while the following native control displays results. This replacement is therefore not a neutral intervention and must be distinguished from the native control in the matrix.

Classification and scope

Accepted documents display Search results in HTTP 200 with #search. Refusals take the main document to /sorry, followed by a 429 response. Classification cross-checks navigation, content and screenshots; a background request to /sorry is not a main-document refusal. In the flag-only comparison, the verification page is followed by a reload about 0.2 seconds later.

Two repetitions per cell, one machine, network and query: these counts cannot estimate a generalisable detection rate. Fresh profiles are not bit-for-bit identical and server states are uncontrolled. Interventions remain browser commands in an environment where AutomationControlled is disabled. Neither the signal’s uniqueness in Google’s decision nor its sufficiency across all environments is established. No CAPTCHA is solved. Profiles, cookies, tokens and raw traces remain private.

Back to the BotGuard study