Skip to content
feder-cr edited this page Aug 5, 2026 · 3 revisions

Browser fingerprinting and bot detection, from the source

Documentation for invisible_playwright, plus a set of standalone explainers. Each one is written against the current source of the thing it describes, and several of them record something we got wrong first.

Where to go

  • Documentation - install it, the two-line switch from plain Playwright, proxy and timezone configuration, pinning specific fields, the CLI.
  • Guides - how detection actually works, in seven groups: browser identity, canvas/WebGL/fonts/audio, network and WebRTC, the automation layer, AI agents, the detectors themselves explained from source, and testing.
  • Comparisons - against Camoufox, Patchright, nodriver and playwright-stealth, and the case for Firefox over Chromium generally.
  • Integrations - running this inside Scrapy, Crawlee, Robot Framework, CodeceptJS, test runners and Playwright MCP, including which frameworks it does not fit and why.

If you don't know where to start

Three pages that most other pages here eventually link back to:

The idea these pages keep returning to

Three things turn up on almost every page, so they are worth stating once here.

Consistency beats rarity. Detectors rarely ask whether a value is unusual. They ask whether two values that must agree, do. A user agent claiming one platform on a font set from another is caught by a comparison, not by a blocklist.

Suppressing a signal is a signal. A browser that refuses to answer is louder than one that answers plainly, because refusing is rare. CreepJS literally records a blocked probe as a lie.

Server tells are not automation tells, and they need different fixes. A software WebGL renderer or a Linux font set under a Windows user agent says nothing about automation and everything about where the browser is running. No stealth plugin touches either.

Documentation

Guides

Comparisons

Integrations

docs/ source folder

Clone this wiki locally