---
title: "Bot Detection Benchmark: Donut Browser vs Playwright"
description: "Measured results of the Donut Browser Wayfern engine next to Playwright, Puppeteer and stealth tools on CAPTCHA, anti-bot and fingerprint tests, with raw data."
url: "https://donutbrowser.com/benchmark/"
---

1. [Home](https://donutbrowser.com/)

2. Benchmark

# 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

See all results

Download raw JSON

Each gate is one detection service. A check mark is a pass, a cross is a fail.

Donut Browser passed 8 of 8 detection services shown: reCAPTCHA v3 score, Turnstile, non-interactive widget, Kasada, Fingerprint bot detection, DataDome, HUMAN (PerimeterX), Akamai edge, and BrowserScan bot detection. Playwright Chromium (headless) passed 3 of 8.

## 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.

1. Donut Browser Wayfern 152.0.7977.64 (Chromium) · Headed

26 of 28

2. Patchright Stealth tool · Headed

24 of 28

3. nodriver Stealth tool · Headed

24 of 28

4. Camoufox Stealth tool · Headed

21 of 28

5. CloakBrowser Stealth tool · Headed

20 of 27 1 without result

6. Puppeteer + stealth plugin Stealth tool · Headless

16 of 28

7. Playwright Chromium (headed) Automation library · Headed

15 of 28

8. Google Chrome + Playwright Automation library · Headed

15 of 28

9. Playwright Chromium (headless) Automation library · 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.9 Every tool passed

- Cloudflare Turnstile, non-interactive widget · 4/5 Turnstile, managed widget · 4/5 Cloudflare challenge page · 4/5

- Kasada Kasada · 5/5 Every tool passed

- Fingerprint Fingerprint bot detection · 5/5 Fingerprint 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/5 Pixelscan masking · 5/5 Pixelscan 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.

Filter by category All CAPTCHA Anti-bot Fingerprint Automation signals Network

Pass

Fail

No data Filled circle with a check: pass. Ring with a cross: fail. Dashed ring: no data.

All results. Filled circle with a check: pass. Ring with a cross: fail. Dashed ring: no data.

| Test | Donut Browser Wayfern 152.0.7977.64 (Chromium) · Headed | Playwright Chromium (headless) Automation library · Headless | Playwright Chromium (headed) Automation library · Headed | Google Chrome + Playwright Automation library · Headed | Puppeteer + stealth plugin Stealth tool · Headless | Patchright Stealth tool · Headed | nodriver Stealth tool · Headed | Camoufox Stealth tool · Headed | CloakBrowser Stealth tool · Headed |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| CAPTCHA |
| reCAPTCHA v3 score Google | 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 |
| Turnstile, non-interactive widget Cloudflare | 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 |
| Turnstile, managed widget Cloudflare | 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 |
| hCaptcha | 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 |
| Cloudflare challenge page Cloudflare | 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 |
| Kasada | 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 |
| Fingerprint bot detection Fingerprint | 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 |
| DataDome | 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 |
| HUMAN (PerimeterX) HUMAN Security | 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 |
| Akamai edge Akamai | 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 |
| Fingerprint tampering 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 |
| BrowserScan bot detection BrowserScan | 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 |
| Device and Browser Info bot test deviceandbrowserinfo.com | Pass: 0 | Fail: 7 | Fail: 5 | Fail: 5 | Fail: 4 | Pass: 0 | Pass: 0 | Pass: 0 | Fail: 1 |
| bot.sannysoft.com sannysoft | Pass: 0 | Fail: 12 | Fail: 1 | Fail: 1 | Pass: 0 | Pass: 0 | Pass: 0 | Fail: 1 | Pass: 0 |
| bot.incolumitas.com incolumitas | Fail: 1 | Fail: 13 | Fail: 3 | Fail: 3 | Fail: 3 | Fail: 1 | Fail: 1 | Fail: 1 | Fail: 2 |
| CreepJS headless CreepJS | Pass: 0% | Fail: 100% | Fail: 33% | Fail: 33% | Fail: 33% | Pass: 0% | Pass: 0% | Pass: 0% | Pass: 0% |
| CreepJS like-headless CreepJS | Pass: 25% | Fail: 88% | Pass: 31% | Pass: 31% | Pass: 25% | Pass: 25% | Pass: 19% | Pass: 0% | Pass: 25% |
| CreepJS lies CreepJS | Pass: 0 | Pass: 0 | Pass: 0 | Pass: 0 | Fail: 2 | Pass: 0 | Pass: 0 | Pass: 0 | Fail: 3 |
| Pixelscan bot check Pixelscan | 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 |
| Pixelscan masking Pixelscan | 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 |
| Pixelscan consistency Pixelscan | 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 |
| iphey | 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 |
| navigator.webdriver | 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 |
| CDP automation (Runtime.enable) | 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 |
| Bot user agent (HeadlessChrome) | 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 |
| window.chrome object | 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 |
| navigator.plugins.length | Pass: 5 | Fail: 0 | Pass: 5 | Pass: 5 | Pass: 5 | Pass: 5 | Pass: 5 | Pass: 5 | Pass: 5 |
| Network |
| TLS and HTTP/2 fingerprint tls.peet.ws | 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 |

Compare with Playwright Chromium (headless) Playwright Chromium (headed) Google Chrome + Playwright Puppeteer + stealth plugin Patchright nodriver Camoufox CloakBrowser

### CAPTCHA

- reCAPTCHA v3 score

Donut Browser: Pass: 0.9

Playwright Chromium (headless): Pass: 0.9

- Turnstile, non-interactive widget

Donut Browser: Pass: 4/5

Playwright Chromium (headless): Pass: 5/5

- Turnstile, managed widget

Donut Browser: Pass: 4/5

Playwright Chromium (headless): Pass: 4/5

- hCaptcha

Donut Browser: Fail: 0/5

Playwright Chromium (headless): Fail: 0/5

### Anti-bot

- Cloudflare challenge page

Donut Browser: Pass: 4/5

Playwright Chromium (headless): Fail: 0/5

- Kasada

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Pass: 5/5

- Fingerprint bot detection

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

- DataDome

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

- HUMAN (PerimeterX)

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

- Akamai edge

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

### Fingerprint

- Fingerprint tampering

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Pass: 5/5

- BrowserScan bot detection

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

- Device and Browser Info bot test

Donut Browser: Pass: 0

Playwright Chromium (headless): Fail: 7

- bot.sannysoft.com

Donut Browser: Pass: 0

Playwright Chromium (headless): Fail: 12

- bot.incolumitas.com

Donut Browser: Fail: 1

Playwright Chromium (headless): Fail: 13

- CreepJS headless

Donut Browser: Pass: 0%

Playwright Chromium (headless): Fail: 100%

- CreepJS like-headless

Donut Browser: Pass: 25%

Playwright Chromium (headless): Fail: 88%

- CreepJS lies

Donut Browser: Pass: 0

Playwright Chromium (headless): Pass: 0

- Pixelscan bot check

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

- Pixelscan masking

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Pass: 5/5

- Pixelscan consistency

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

- iphey

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

### Automation signals

- navigator.webdriver

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

- CDP automation (Runtime.enable)

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

- Bot user agent (HeadlessChrome)

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Fail: 0/5

- window.chrome object

Donut Browser: Pass: 5/5

Playwright Chromium (headless): Pass: 5/5

- navigator.plugins.length

Donut Browser: Pass: 5

Playwright Chromium (headless): Fail: 0

### Network

- TLS and HTTP/2 fingerprint

Donut Browser: Pass: 5/5

Playwright 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

October 15, 2026

### Caveats

1. 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.

2. 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.

3. 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.

4. 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.

5. Camoufox picks a random operating system for each launch by default. Its runs show Windows and macOS user agents.

6. 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.

7. 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](https://donutbrowser.com) | 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)](https://playwright.dev) | Chromium 156.0.8078.4 headless shell | Headless | chromium.launch() defaults, headless, proxy only |
| [Playwright Chromium (headed)](https://playwright.dev) | Chromium 156.0.8078.4 | Headed | chromium.launch({ headless: false }), proxy only |
| [Google Chrome + Playwright](https://www.google.com/chrome/) | Google Chrome 155.0.8059.80 | Headed | chromium.launch({ channel: "chrome", headless: false }), proxy only |
| [Puppeteer + stealth plugin](https://github.com/berstend/puppeteer-extra) | 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](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright) | Google Chrome 155.0.8059.80 | Headed | launchPersistentContext with channel "chrome", headless false, viewport null, no custom user agent (README best practice) |
| [nodriver](https://github.com/ultrafunkamsterdam/nodriver) | Google Chrome 155.0.8059.80 | Headed | nodriver.start() defaults with installed Chrome, headed, proxy flag only |
| [Camoufox](https://camoufox.com) | Camoufox 156.0.1-beta.36 (Firefox) | Headed | AsyncCamoufox(headless=False, geoip=True, humanize=True) with the proxy |
| [CloakBrowser](https://github.com/CloakHQ/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.

Download raw JSON `/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.

[Download Donut Browser](https://donutbrowser.com/#download)

- [Bot detection test](https://donutbrowser.com/tools/bot-detection)

- [Wayfern with Playwright](https://donutbrowser.com/docs/wayfern)

- [Automation](https://donutbrowser.com/use-cases/automation)
