bauta and stock Playwright on eight bot detectors
One run through one proxy exit: how BrowserScan, CreepJS, pixelscan and five more detectors read bauta beside stock Playwright, and what a page reads of each.
Bot detectors read a browser from inside the page: what navigator says, how the page is being driven, and
whether the parts of the fingerprint agree with each other. We ran eight of them, and the page reads they rest on,
against stock Playwright and against bauta, on October 21, 2026.
How we ran it
- Stock Playwright 1.60.0, as a script launches it: its own Chromium 148, headless, a new page per site.
- bauta, through its gateway on a virtual display: a Windows device, with
humanizeon, its timezone and locale taken from where the proxy exits. - The same proxy exit for both, one browser after the other, within twelve minutes.
The detectors
| detector | stock Playwright | bauta |
|---|---|---|
| BrowserScan's verdict | Robot | Normal |
| incolumitas's failed checks | 13 checks failed | WEBDRIVER alone (any Chrome) |
| deviceandbrowserinfo's verdict | bot, 7 flags | human |
| rebrowser's leaks | 11 leaks | mainWorldExecution alone (Playwright's evaluate in the page's world) |
| pixelscan's fingerprint | inconsistent: masking detected, automated behavior detected | consistent |
| iphey's score | 30 | 70 |
| fingerprint-scan's bot score, out of 100 | 100 | 29 |
| CreepJS's like-headless score | 94 % like headless, 100 % headless | 25 % like headless, 0 % headless |
The two flags left on bauta are Playwright's own: incolumitas's WEBDRIVER rule, which any Chrome fails, and
rebrowser's report of Playwright's evaluate running in the page's world.
What a page reads
| read | stock Playwright | bauta |
|---|---|---|
navigator.webdriver | true | false |
window.chrome | missing | present |
navigator.plugins.length | 0 | 5 |
| User-Agent | HeadlessChrome/148 | Chrome/155 |
| a CDP client on the page (deviceandbrowserinfo) | detected | not detected |
| TLS handshake, JA4 (tls.peet.ws) | Chromium 148's own | Google Chrome 155's |
Why the readings differ
bauta answers these reads inside the engine, from a persona. The User-Agent and its Client Hints, navigator, the
screen and WebGL agree because they come from one description of one device, and no JavaScript is injected into the
page to change them, so a page still finds Chromium's own native getters. Stock Playwright's headless Chromium
reports what it is.
Try it
Getting started installs bauta and connects a first script; the comparison on the home page keeps the same tables.