A live demo
Where automation gets caught — or can't even try.
Two sections, seven levels. The first five are about detection — the site sees you and refuses. The last two are about capability — selector-based automation cannot interact with what it cannot find.
Bot detection
The site detects automation through fingerprinting, behavioural signals, or third-party challenge.
- Level 1The honest tell
navigator.webdriver and other passive Chrome flags.
- Level 2CDP attached
Headless-window shape, missing chrome.app / chrome.csi.
- Level 3Mouse trajectory
Mousemove density, click curvature, keystroke cadence.
- Level 4Fingerprint battery
Canvas, audio, font, and WebGL signals.
- Level 5Cloudflare Turnstile
Managed-mode widget with server-side verification.
Selector resistance
The DOM that selector-based automation depends on is absent, randomised, sealed, or in a different frame.
- Level 1Canvas-rendered login
No DOM form — pixels only on a <canvas>.
- Level 2Dynamic selectors
Real form, but every id/name/class rerolls per request.
- Level 3Closed Shadow DOM
Form inside a web component with a sealed shadow root.
- Level 4Iframe-embedded form
Form lives in a child frame; page-scoped locators miss it.