Anti-Bot

What Is Browser Fingerprinting Evasion?

What Is Browser Fingerprinting Evasion? — conceptual illustration
On this page

Browser fingerprinting evasion is the practice of configuring an automated browser so that the combined fingerprint it presents — canvas, WebGL, audio, fonts, navigator probes, TLS — is statistically indistinguishable from real users. The goal is not to send a "no fingerprint" (that itself is unique) but to send a plausible, internally consistent fingerprint that matches a real device profile and rotates appropriately across sessions.

Quick facts

Surfaces to handleCanvas, WebGL, audio, fonts, navigator, screen, timezone, TLS, HTTP/2
Hardest constraintCross-surface consistency (Mac UA + Linux fonts = block)
Recommended toolsCamoufox, PatchRight, Brave/undetected-chromedriver
Anti-patternRandomizing each surface independently — produces impossible combinations
Rotation strategyWhole-profile rotation, not per-surface randomization

Why per-surface randomization fails

The naive approach is to randomize each fingerprint surface independently — a different canvas hash, a different WebGL string, a different font list. The result is a combination no real device would ever produce: a macOS user-agent with a Linux font set, an NVIDIA GPU string with a Mac screen aspect, an Asia/Tokyo timezone with US English. Anti-bot models trained on millions of real users flag these impossibilities instantly. The fingerprint itself becomes the tell.

Runtime spoofing vs engine-level patching

The same patch can live at two different layers, with very different durability:

Runtime spoofingEngine-level patching
How it worksJS injected at page load overrides properties / methodsC++ source of Chromium / Firefox is patched and rebuilt
Examplespuppeteer-extra-stealth, undetected-chromedriver, selenium-stealthCamoufox, CloakBrowser, PatchRight (patches at Playwright source)
Defeats toString check?No — the patch is a JS function, visible via Function.prototype.toString()Yes — the override happens below the JS layer, so toString still returns "[native code]"
Setup costnpm installBinary download (Camoufox/CloakBrowser) or pip install (PatchRight)
MaintenancePlugin updates as detections changeTied to upstream Chromium/Firefox releases; weeks-to-months lag

Runtime spoofing is the cheaper starting point and is sufficient against simpler vendors (Cloudflare Bot Fight Mode, Imperva, AWS WAF Common). Engine-level patching is required for Kasada, recent Akamai, Cloudflare Bot Management Enterprise, PerimeterX, and F5 Shape — see the vendor cheatsheet for which deployments fall in which category.

The real-profile-database approach

The hardest part of evasion isn't hiding individual signals — it's making them coherent. A browser claiming to be Chrome on Windows 11 with an NVIDIA renderer must have the matching extension list, the matching AudioContext output for that OS, the matching timezone for the claimed IP geolocation, and so on across dozens of surfaces. Hand-spoofing each surface independently almost always produces an incoherent combination.

The state-of-the-art approach is the real-profile database: harvest tuples of (UA, OS, GPU, audio, canvas, timezone, language, screen size, …) from real users at scale, then serve one tuple per scraper session. Camoufox bundles such a database (10k+ profiles); commercial anti-detect browsers like Multilogin and GoLogin maintain larger ones. The advantage is that every signal is internally coherent — they were collected together from one real machine.

The catch is novelty. Anti-bot vendors test against the same scraping tools and harvest their profile databases. A profile that's been published in Camoufox's corpus for six months may already be flagged. Refreshing the database is the work — collecting profiles, rotating them out before they burn, and matching profile geography to proxy geography. This is why commercial anti-detect tools charge $50-200/month for the same idea Camoufox ships free: the operational cost of profile freshness, not the patching itself.

Whole-profile rotation

The correct unit of rotation is a complete device profile: a coherent set of (UA, fonts, GPU, screen, timezone, languages, TLS) that matches a real device class. Tools like Camoufox ship with curated profile pools. Custom rotation needs a profile generator that respects the joint distribution — e.g., a Windows + Chrome profile always has the same set of installed fonts, the same TLS ciphersuite order, the same audio context hash range.

What evasion does not cover

A perfect static fingerprint is necessary but not sufficient. Behavioral signals (mouse movement, scroll velocity, dwell time) are evaluated separately and can fail even a perfectly evaded browser. IP reputation runs before fingerprinting and discards datacenter traffic before the JS even loads. Evasion is one layer in a stack; the others have to be handled too.

Code example

python
# Camoufox ships with whole-profile fingerprints, not per-surface randomization.
from camoufox.sync_api import Camoufox

with Camoufox(
    headless=False,
    humanize=True,
    fingerprint='windows-chrome-recent',
    proxy={'server': 'http://user:pass@residential:port'}
) as browser:
    page = browser.new_page()
    page.goto('https://target.com')

Related terms

What Is Browser Fingerprinting?
Browser fingerprinting is a technique that identifies and tracks a visitor by combining dozens of small, observable characteristics of their…
What Is Camoufox?
Camoufox is a stealth-focused fork of Firefox with anti-fingerprinting patches applied at the C++ build level. Unlike playwright-stealth, wh…
What Is Canvas Fingerprinting?
Canvas fingerprinting is a browser-identification technique that asks the browser to draw an invisible image and hashes the resulting pixel …
What Is WASM Fingerprinting?
WebAssembly fingerprinting is a 2026 detection layer that probes the actual CPU through WASM SIMD instructions and uses WebAssembly.Memory({…
How Do Websites Detect Web Scrapers?
Websites detect scrapers by collecting hundreds of signals across the network, transport, browser, and behavioral layers, then scoring the c…
What Is the Chrome DevTools Protocol (CDP)?
The Chrome DevTools Protocol (CDP) is the low-level interface for instrumenting and controlling Chromium-based browsers. Puppeteer, Playwrig…
What Is WebGL Fingerprinting?
WebGL fingerprinting reads identifying information directly from the GPU. The browser exposes the graphics card vendor and renderer string (…
What Is AudioContext Fingerprinting?
AudioContext fingerprinting plays a silent waveform through the Web Audio API, then reads back the resulting floating-point samples and hash…
What Is Function.toString() Inspection?
Function.prototype.toString() inspection is the technique anti-bot scripts use to detect runtime JavaScript patches. Every JS function expos…
Anti-Bot Vendor Detection Cheatsheet
The first step of any scrape against a protected site is identifying which anti-bot vendor is in front of it. The vendor determines almost e…
What Is a WebRTC IP Leak?
A WebRTC IP leak is the most-overlooked failure mode in browser-based scraping in 2026: WebRTC reveals your real local and public IP via STU…
What Is PatchRight?
PatchRight is a stealth library that patches the Playwright Python source itself before Chrome starts, rather than injecting JavaScript at r…
What Is SeleniumBase?
SeleniumBase is a Python automation and testing framework built on Selenium 4 whose UC Mode and CDP Mode make it one of the most effective P…
What Is Botasaurus?
Botasaurus is an MIT-licensed Python scraping framework with three top-level decorators — @browser, @request, @task — and built-in Bezier-cu…
What Is XDriver?
XDriver is a Playwright stealth patcher that replaces Playwright's driver files in place with hardened versions, activated by a single comma…
What Is CloakBrowser?
CloakBrowser is a stealth Chromium build with 49 C++ binary patches. Where playwright-stealth injects JavaScript at runtime (detectable via …
What Is Scrapling?
Scrapling is an all-in-one Python scraping framework that bundles fetching, parsing, anti-detection, and crawling behind one API — it is a l…
What Is Obscura?
Obscura is an open-source headless browser engine written from scratch in Rust — not a fork or patch of Chrome or Firefox. It runs JavaScrip…
Anti-Detect Browser Tools Compared
Anti-detect browser tools defeat bot detection by spoofing the signals that distinguish automation from a real user — but they work at very …
How Does Deobfuscation Work?
Deobfuscation is the process of turning deliberately unreadable code back into something a human can read and reason about. Obfuscators neve…

Concept map

How Browser Fingerprinting Evasion connects

The terms most directly tied to this one. Hover a node to see its neighbours, click to preview, drag to rearrange.

0 terms · 0 connections
You are here · Anti-Bot
Building map…

Frequently asked questions

Is browser fingerprinting evasion the same as stealth mode?

Stealth tools are one form of evasion — they patch known tells in Puppeteer/Playwright. True evasion is broader and includes whole-profile rotation, behavioral emulation, and consistent transport-layer fingerprints.

How often should I rotate fingerprints?

Per-session, not per-request. A real user keeps the same fingerprint across an entire visit. Rotating mid-session is itself a tell.

Can I use a real Chrome profile instead of patching?

Yes — running real Chrome with a real user profile via CDP avoids most patch-detection tells. The operational overhead is the tradeoff: managing real profiles at scale is hard, and you still need residential IPs and behavior emulation.

Should I always pick engine-level over runtime patching?

No — runtime patching is cheaper to deploy and sufficient against ~80% of targets. The decision is empirical: try runtime first (undetected-chromedriver / puppeteer-stealth + a residential IP), measure block rate, escalate to engine-level if blocks exceed the budget. Starting with Camoufox or CloakBrowser on an unprotected site is just paying compute overhead.

Why don't the engine-level tools just ship every browser version?

Forking Chromium or Firefox per release is expensive. Camoufox tracks ESR Firefox; CloakBrowser tracks stable Chromium with a few weeks of lag. That lag itself is a fingerprint — a request claiming to be Chrome 134 from a tool that's on Chrome 131 has a version mismatch in the User-Agent vs the underlying engine, which sophisticated detection can flag.

Last updated: 2026-05-27