Skip to main content

UC Mode launches Chromium with stealth flags and applies JavaScript evasions that mask navigator.webdriver, plugins, WebGL, and other fingerprints. Removing the automation markers from the chromedriver binary itself is a separate step that you run yourself (below).

Info

What you will learn

  • How to enable UC mode.
  • How binary patching removes injected markers.
  • How engine spoofing args hide additional automation signals.
  • What to do if a site still detects the browser.

Quick enable#

Set the driver mode to Uc in BrowserConfig:

BrowserConfig::default() is headless.

Warning

UC mode needs Chrome, Chromium or Edge.

Binary patching#

Even in UC mode, a stock chromedriver may inject cdc_ variables into every page.

Warning

UC mode does not patch the driver for you.

Patch the executable before launch to strip those signatures:

See Binary Patching for the full API, backup/restore, and safety notes.

Engine spoofing arguments#

The engine_spoofing_args() helper returns Chromium flags that disable automation features such as --disable-blink-features=AutomationControlled. Pass them through BrowserConfig or StealthOptions:

Still detected?#

If a site still flags the browser:

Patch chromedriver

Patch chromedriver and verify needs_patch() returns false.

Add the spoofing arguments

Add engine_spoofing_args() to the launch flags.

Use a coherent fingerprint

Use a Fingerprint with consistent user agent, platform, screen size, WebGL vendor, and geolocation.

Run headful

Run headful (with_headless(false)). A headless session already starts Chrome with --headless=new, so there is no newer headless mode to switch to.

Align the egress IP

Align egress IP with the spoofed geolocation and timezone.

Try the pure CDP engine

Try the pure CDP engine, which needs no chromedriver.

Troubleshooting#

Detection after patching

Likely cause: Missing engine args.

Fix: Add engine_spoofing_args() to launch flags.

Detection only in headless

Likely cause: Headless artifacts.

Fix: Run headful with with_headless(false) (or sbrs --headed).

Inconsistent signals

Likely cause: Fingerprint values mismatch.

Fix: Validate with Fingerprint::validate().

Next steps#