Bot detection benchmark
Donut Browser’s Wayfern engine and 8 other browsers and automation tools ran the same 28 bot detection tests. Each cell is 5 runs on the same computer through the same network.
Donut Browser passed 26 of 28 tests. Measured October 15, 2026
Tests passed per tool
A test counts as passed when at least 80 percent of its runs pass. A test with no result is not in that tool’s total.
- Donut Browser 26 of 28
- Patchright 24 of 28
- nodriver 24 of 28
- Camoufox 21 of 28
- CloakBrowser 20 of 27 1 without result
- Puppeteer + stealth plugin 16 of 28
- Playwright Chromium (headed) 15 of 28
- Google Chrome + Playwright 15 of 28
- Playwright Chromium (headless) 8 of 28
Measured wins
A logo is here only when the data has the result for it.
Detection services passed
Wayfern passed every measured test from these services.
- reCAPTCHA reCAPTCHA v3 score · 0.9Every tool passed
- Cloudflare Turnstile, non-interactive widget · 4/5Turnstile, managed widget · 4/5Cloudflare challenge page · 4/5
- Kasada Kasada · 5/5Every tool passed
- Fingerprint Fingerprint bot detection · 5/5Fingerprint tampering · 5/5
- DataDome DataDome · 5/5
- HUMAN HUMAN (PerimeterX) · 5/5
- Akamai Akamai edge · 5/5
- BrowserScan BrowserScan bot detection · 5/5
- deviceandbrowserinfo Device and Browser Info bot test · 0
- Sannysoft bot.sannysoft.com · 0
- CreepJS CreepJS headless · 0%CreepJS like-headless · 25%CreepJS lies · 0
- Pixelscan Pixelscan bot check · 5/5Pixelscan masking · 5/5Pixelscan consistency · 5/5
- iphey iphey · 5/5
Not passed: hCaptcha and incolumitas. Those rows are in the table below.
Tools outscored
Wayfern passed more of the tests that both tools ran.
- Playwright Chromium (headless) 26 vs 8 of 28 Wayfern passed, Playwright Chromium (headless) failed: Cloudflare challenge page, Fingerprint bot detection, DataDome, HUMAN (PerimeterX), Akamai edge, BrowserScan bot detection, Device and Browser Info bot test, bot.sannysoft.com, CreepJS headless, CreepJS like-headless, Pixelscan bot check, Pixelscan consistency, iphey, navigator.webdriver, CDP automation (Runtime.enable), Bot user agent (HeadlessChrome), navigator.plugins.length, and TLS and HTTP/2 fingerprint
- Playwright Chromium (headed) 26 vs 15 of 28 Wayfern passed, Playwright Chromium (headed) failed: Cloudflare challenge page, Fingerprint bot detection, BrowserScan bot detection, Device and Browser Info bot test, bot.sannysoft.com, CreepJS headless, Pixelscan bot check, Pixelscan consistency, iphey, navigator.webdriver, and CDP automation (Runtime.enable)
- Google Chrome + Playwright 26 vs 15 of 28 Wayfern passed, Google Chrome + Playwright failed: Cloudflare challenge page, Fingerprint bot detection, BrowserScan bot detection, Device and Browser Info bot test, bot.sannysoft.com, CreepJS headless, Pixelscan bot check, Pixelscan consistency, iphey, navigator.webdriver, and CDP automation (Runtime.enable)
- Puppeteer + stealth plugin 26 vs 16 of 28 Wayfern passed, Puppeteer + stealth plugin failed: Cloudflare challenge page, Fingerprint bot detection, Device and Browser Info bot test, CreepJS headless, CreepJS lies, Pixelscan masking, Pixelscan consistency, iphey, CDP automation (Runtime.enable), and TLS and HTTP/2 fingerprint
- Patchright 26 vs 24 of 28 Wayfern passed, Patchright failed: Pixelscan consistency and iphey See caveat 2
- nodriver 26 vs 24 of 28 Wayfern passed, nodriver failed: Pixelscan consistency and iphey See caveat 2
- Camoufox 26 vs 21 of 28 Wayfern passed, Camoufox failed: DataDome, Fingerprint tampering, bot.sannysoft.com, Pixelscan masking, and Pixelscan consistency
- CloakBrowser 25 vs 20 of 27 Wayfern passed, CloakBrowser failed: Fingerprint tampering, Device and Browser Info bot test, CreepJS lies, Pixelscan masking, and Pixelscan consistency
All results
Rows are tests, columns are tools. Open a test to see each run, the pass rule, the source page and the screenshot.
Pass Fail No dataFilled circle with a check: pass. Ring with a cross: fail. Dashed ring: no data.
| Test | Donut Browser | Playwright Chromium (headless) | Playwright Chromium (headed) | Google Chrome + Playwright | Puppeteer + stealth plugin | Patchright | nodriver | Camoufox | CloakBrowser |
|---|---|---|---|---|---|---|---|---|---|
| CAPTCHA | |||||||||
| Pass: 0.9 | Pass: 0.9 | Pass: 0.9 | Pass: 0.9 | Pass: 0.9 | Pass: 0.9 | Pass: 0.9 | Pass: 0.9 | Pass: 0.9 | |
| Pass: 4/5 | Pass: 5/5 | Pass: 5/5 | Pass: 4/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 4/5 | Pass: 5/5 | |
| Pass: 4/5 | Pass: 4/5 | Pass: 5/5 | Pass: 4/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 4/5 | Pass: 5/5 | |
| Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | |
| Anti-bot | |||||||||
| Pass: 4/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 5/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 5/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Fail: 2/5 | Pass: 5/5 | |
| Pass: 5/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 5/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Fingerprint | |||||||||
| Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Fail: 2/5 | Fail: 1/5 | |
| Pass: 5/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 0 | Fail: 7 | Fail: 5 | Fail: 5 | Fail: 4 | Pass: 0 | Pass: 0 | Pass: 0 | Fail: 1 | |
| Pass: 0 | Fail: 12 | Fail: 1 | Fail: 1 | Pass: 0 | Pass: 0 | Pass: 0 | Fail: 1 | Pass: 0 | |
| Fail: 1 | Fail: 13 | Fail: 3 | Fail: 3 | Fail: 3 | Fail: 1 | Fail: 1 | Fail: 1 | Fail: 2 | |
| Pass: 0% | Fail: 100% | Fail: 33% | Fail: 33% | Fail: 33% | Pass: 0% | Pass: 0% | Pass: 0% | Pass: 0% | |
| Pass: 25% | Fail: 88% | Pass: 31% | Pass: 31% | Pass: 25% | Pass: 25% | Pass: 19% | Pass: 0% | Pass: 25% | |
| Pass: 0 | Pass: 0 | Pass: 0 | Pass: 0 | Fail: 2 | Pass: 0 | Pass: 0 | Pass: 0 | Fail: 3 | |
| Pass: 5/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Fail: 3/5 | Fail: 0/5 | |
| Pass: 5/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 3/5 | Fail: 0/5 | |
| Pass: 5/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Pass: 5/5 | Error | |
| Automation signals | |||||||||
| Pass: 5/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 5/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 5/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Pass: 5 | Fail: 0 | Pass: 5 | Pass: 5 | Pass: 5 | Pass: 5 | Pass: 5 | Pass: 5 | Pass: 5 | |
| Network | |||||||||
| Pass: 5/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Fail: 0/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | Pass: 5/5 | |
| Passed | 26/28 | 8/28 | 15/28 | 15/28 | 16/28 | 24/28 | 24/28 | 21/28 | 20/27 |
CAPTCHA
reCAPTCHA v3 scoreDonut Browser: Pass: 0.9Playwright Chromium (headless): Pass: 0.9
Turnstile, non-interactive widgetDonut Browser: Pass: 4/5Playwright Chromium (headless): Pass: 5/5
Turnstile, managed widgetDonut Browser: Pass: 4/5Playwright Chromium (headless): Pass: 4/5
hCaptchaDonut Browser: Fail: 0/5Playwright Chromium (headless): Fail: 0/5
Anti-bot
Cloudflare challenge pageDonut Browser: Pass: 4/5Playwright Chromium (headless): Fail: 0/5
KasadaDonut Browser: Pass: 5/5Playwright Chromium (headless): Pass: 5/5
Fingerprint bot detectionDonut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
DataDomeDonut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
HUMAN (PerimeterX)Donut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
Akamai edgeDonut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
Fingerprint
Fingerprint tamperingDonut Browser: Pass: 5/5Playwright Chromium (headless): Pass: 5/5
BrowserScan bot detectionDonut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
Device and Browser Info bot testDonut Browser: Pass: 0Playwright Chromium (headless): Fail: 7
bot.sannysoft.comDonut Browser: Pass: 0Playwright Chromium (headless): Fail: 12
bot.incolumitas.comDonut Browser: Fail: 1Playwright Chromium (headless): Fail: 13
CreepJS headlessDonut Browser: Pass: 0%Playwright Chromium (headless): Fail: 100%
CreepJS like-headlessDonut Browser: Pass: 25%Playwright Chromium (headless): Fail: 88%
CreepJS liesDonut Browser: Pass: 0Playwright Chromium (headless): Pass: 0
Pixelscan bot checkDonut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
Pixelscan maskingDonut Browser: Pass: 5/5Playwright Chromium (headless): Pass: 5/5
Pixelscan consistencyDonut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
ipheyDonut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
Automation signals
navigator.webdriverDonut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
CDP automation (Runtime.enable)Donut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
Bot user agent (HeadlessChrome)Donut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
window.chrome objectDonut Browser: Pass: 5/5Playwright Chromium (headless): Pass: 5/5
navigator.plugins.lengthDonut Browser: Pass: 5Playwright Chromium (headless): Fail: 0
Network
TLS and HTTP/2 fingerprintDonut Browser: Pass: 5/5Playwright Chromium (headless): Fail: 0/5
How the tests ran
Every tool ran the same tests on the same computer through the same network. Each test says what was read and what counts as a pass.
- Computer
- Windows 11 Home 25H2 (build 26200) CPU: AMD Ryzen 9 8940HX, 32 threads GPU: NVIDIA GeForce RTX 5070 Laptop GPU
- Network
- A fresh US residential exit (New York area) for every browser session, from one pool of three accounts that every tool used
- Runs per cell
- 5
- Pass rule
- A cell passes when at least 80 percent of its runs pass.
- Date
Caveats
- The computer is in UTC+4 and every proxy exit is in New York. Wayfern, Camoufox and CloakBrowser use the time zone of the exit; stock Playwright, Chrome + Playwright, Puppeteer stealth, Patchright and nodriver keep UTC+4 by default.
- Pixelscan consistency, iphey and the VPN signal of Fingerprint flag a time zone that does not match the IP address. On a computer in the time zone of the exit, the tools that keep UTC+4 could score higher on Pixelscan consistency and iphey.
- Tools that do not manage WebRTC send it outside the proxy. A page that reads WebRTC can then see the IP address of the computer.
- Camoufox and CloakBrowser ran from 03:51 to 04:40 UTC on 15 October, about 2 hours after the other seven tools (23:06 to 01:46 UTC). They used the same computer and proxy pool.
- Camoufox picks a random operating system for each launch by default. Its runs show Windows and macOS user agents.
- CloakBrowser ran its free Chromium 146 binary, because the latest binary needs a sign-in. Fingerprint and Pixelscan report its launch() context as incognito, and iphey never finished a scan for it.
- A run lost to a timeout, a network error or a page with no verdict is an error. Errors do not count as fails, and each one ran again in a new session.
Versions and launch settings
| Tool | Engine | Mode | Launch settings |
|---|---|---|---|
| Donut Browser | Wayfern 152.0.7977.64 (Chromium) | Headed | Wayfern engine via Playwright persistent context, headed, Windows fingerprint from the engine, time zone, locale and geolocation set to the proxy exit |
| Playwright Chromium (headless) | Chromium 156.0.8078.4 headless shell | Headless | chromium.launch() defaults, headless, proxy only |
| Playwright Chromium (headed) | Chromium 156.0.8078.4 | Headed | chromium.launch({ headless: false }), proxy only |
| Google Chrome + Playwright | Google Chrome 155.0.8059.80 | Headed | chromium.launch({ channel: "chrome", headless: false }), proxy only |
| Puppeteer + stealth plugin | Chrome for Testing 155.0.8059.79 | Headless | puppeteer-extra with puppeteer-extra-plugin-stealth defaults, launch({ headless: true }) as in its README, proxy only |
| Patchright | Google Chrome 155.0.8059.80 | Headed | launchPersistentContext with channel "chrome", headless false, viewport null, no custom user agent (README best practice) |
| nodriver | Google Chrome 155.0.8059.80 | Headed | nodriver.start() defaults with installed Chrome, headed, proxy flag only |
| Camoufox | Camoufox 156.0.1-beta.36 (Firefox) | Headed | AsyncCamoufox(headless=False, geoip=True, humanize=True) with the proxy |
| CloakBrowser | CloakBrowser Chromium 146.0.7680.177 | Headed | launch({ proxy, geoip: true, headless: false, humanize: true }) as in its README, free binary (no account) |
Not measured
These tests and cells have no result. The reason is next to each one.
- AWS WAF Bot Control No public page was found that shows an AWS WAF bot verdict on a page load.
- Arkose Labs It runs on sign-in and sign-up forms only. Reading it needs a form submission.
- Commercial anti-detect browsers and cloud browser services They need an account.
- CloakBrowser latest binary (Chromium 154) It needs a GitHub sign-in. The free binary (Chromium 146) was tested.
- undetected-chromedriver nodriver, its successor from the same author, was tested.
- CloakBrowser · iphey No verdict: the iphey scan did not finish within 60 s in 6 of 6 loads (the page stayed on its loading state).
Raw data
One JSON file (128 kB) has every run of every cell, the versions and the computer. This page is built from that file.
/benchmark/results.json Questions
What does a pass mean?
The detection service accepted the browser in at least 80 percent of the runs, by the rule in the test’s row: a score limit for reCAPTCHA, a verdict for scanner pages, zero flags for flag lists. It is the result on the date shown. A site can still block a visit for other reasons, such as the IP address or the behavior on the page.
Why compare with stock Playwright?
Most automation starts with stock Playwright or Puppeteer. Stealth tools and anti-detect browsers are the usual next step. Every tool in the table ran the same tests.
Which Wayfern version was tested?
Wayfern 152.0.7977.64 (Chromium), the build that the Donut Browser app installs, driven by Playwright with a generated Windows fingerprint. The version of every tool is in the table under “How the tests ran” and in the raw JSON.
Can I check the results?
Yes. The raw JSON has every run, and each test links to its public test page. Open the same pages in a Donut Browser profile to compare. The free bot detection test on this site runs similar checks in your own browser.
Does Wayfern fail any test?
Yes. In this run Wayfern did not pass: hCaptcha and bot.incolumitas.com. hCaptcha gave an image challenge to every tool, and to a headed Microsoft Edge driven by Playwright on the same computer, so this row does not separate the tools. The old WEBDRIVER check on bot.incolumitas.com flags every Chromium browser that has a navigator.webdriver property, so no Chromium tool scores 0 there. Those rows stay in the table.
Why do some cells have no data?
A cell has no data when the test does not apply to that engine, or when every run was lost to a timeout, a rate limit or a crash. The “Not measured” list gives the reason for each one.
Run your profiles on Wayfern
Donut Browser is free to download. Each profile has its own fingerprint and its own proxy or VPN.