Skip to content

The open-source playwright-stealth alternative

playwright-stealth is the quickest way to add stealth to Playwright in Python: one wrapper and every page gets a set of JavaScript evasions. But the evasions are overrides on a stock browser, and its own maintainer calls it a proof of concept. Clearcote sets those values natively in the engine instead, so there is no override for a page to find.

What is playwright-stealth?

playwright-stealth is a Python port of puppeteer-extra-plugin-stealth for Playwright. The original port by AtuboDad has not been updated since 2023; the PyPI name is now carried by a maintained fork (Mattwmaster58), which released 2.0 with a cleaner API and merged some of the outstanding pull requests (latest release 2.0.3, April 2026). It is MIT-licensed and very widely used: roughly 3 million PyPI downloads a month.

It works mainly by registering init scripts on every context, each patching one tell: navigator.webdriver, navigator.languages, plugins, the WebGL vendor, chrome.runtime and so on. The maintainer is candid about the ceiling. The README says not to expect it to bypass anything but the simplest bot detection, and describes it as a starting point. The reasons are structural: a JavaScript override can be caught with Function.prototype.toString or a property-descriptor check, the page's init scripts don't reach Web Workers, and while its wrapper also sets a couple of launch flags and the User-Agent and Sec-CH-UA headers, nothing in the package touches the Playwright driver's own CDP side effects or the TLS handshake.

Clearcote vs playwright-stealth

FeatureClearcoteplaywright-stealth
Approach Engine-level C++ patches: native values JavaScript init scripts on a stock browser
Detectable seam None: native in the page, iframes and workers Overrides visible via toString, descriptors and worker re-reads
Fingerprint identity Coherent persona from one seed (canvas, WebGL, fonts, navigator) A few hand-set values over the host's real ones
Driver / CDP side effects Held back at launch (isolated worlds) and in the engine Not addressed; stock Playwright driver
TLS / network coherence ClientHello follows the claimed Chrome version TLS not addressed; sets the User-Agent and Sec-CH-UA headers only
Framework Playwright & Puppeteer (Python, Node, .NET) Playwright (Python)
Setup Swap the browser binary Wrap Playwright in one line
Cost Open build free; latest build free with GitHub; Pro $49/mo Free & open (MIT)

Comparison compiled November 2026. playwright-stealth is open source (mit); details change — check its project for the latest.

Measured: 12 tools on the same 10 sites

We ran the open-source browsers-benchmark harness 5 times, finishing on 27 October 2026. Each tool ran on its own US residential IP, in a different order each run. A pass means the harness's own check for that site found the page itself, not a block or challenge page. Clearcote measured on a Windows desktop (latest build); other tools on a Linux server.

The harness tests tf-playwright-stealth, a fork of playwright-stealth; its rows are marked.

Share of page loads that reached the real page, per tool, headed and headless
ToolHeadedHeadless
Clearcote0.63.2 · r5278%39/5080%40/50
Camoufox0.5.8 · v156.0.1-beta.3672%36/5080%40/50
Invisible Playwright0.43.0 · Firefox76%38/5078%39/50
CloakBrowser0.6.474%37/5064%32/50
SeleniumBase (CDP mode)4.49.0 · Chrome74%37/50—
nodriver0.50.6 · Chrome74%37/5040%20/50
Zendriver0.17.1 · Chrome64%32/5060%30/50
tf-playwright-stealth (Firefox)1.2.058%29/5062%31/50
tf-playwright-stealth (Chromium)1.2.056%28/5050%25/50
Playwright (Chromium)1.62.056%28/5030%15/50
Playwright (Firefox)1.62.054%27/5054%27/50
Patchright1.64.3 · Chrome24%12/5026%13/50

Sites: a search results page, a community forum, a software company's site, a luxury retailer, a marketplace product page, a ticketing site, a fashion retailer, a travel booking site, an airline, a social network. This is a snapshot from one network and one week: results move with every release, every proxy and the sites themselves, and no tool loaded every site every time. Raw results (JSON).

Why teams pick Clearcote

Native, not overridden

Every playwright-stealth evasion replaces a real browser function with a JavaScript one, and that replacement is observable. Clearcote changes the value inside Chromium, so the function a page inspects is the real native one.

The same answer in every realm

Init scripts patch the page. Re-read the same value from a Web Worker or a fresh iframe and you get the unpatched original. Engine-level values agree everywhere.

A whole identity, not a handful of fields

One --fingerprint seed produces a consistent machine across canvas, WebGL, audio, fonts, screen and hardware, instead of a few overrides layered on top of the real host.

Keep your Playwright code

Clearcote is a Chromium binary. Point executable_path at it, or use the SDK's launch(), and the rest of your Playwright script stays the same.

When playwright-stealth might be the better pick

  • You want to try something in five minutes on a lenient target and don't want to manage a browser binary.
  • Your targets only check the obvious tells like navigator.webdriver.
  • You already run Clearcote and want to know if you still need it: you don't. Its evasions duplicate values the engine already sets, and adding JavaScript overrides on top brings back the seam the engine removes.

FAQ

Does playwright-stealth still work?

It still installs and runs, and the maintained fork's latest release is 2.0.3 (April 2026). Whether it is enough depends on the target. Its own README warns it only handles the simplest detection, because JavaScript overrides can be detected and it leaves the driver and the TLS layer unchanged.

What is the difference between playwright-stealth and Clearcote?

playwright-stealth injects JavaScript into a stock Chromium to override a set of values. Clearcote is a modified Chromium where those values are native, consistent across frames and workers, with a matching TLS fingerprint underneath. You drive both with ordinary Playwright.

Should I use playwright-stealth together with Clearcote?

No. The engine already reports coherent values, and layering JavaScript overrides on top replaces native functions with detectable ones. Launch Clearcote with plain Playwright.

Is there a playwright-stealth for Node.js?

The Node equivalent is playwright-extra with the puppeteer-extra stealth plugin, which has the same JavaScript-override design. Clearcote works the same way from Python, Node and .NET.

How deep it goes

More than twice the patches of any fork we compared.

Patches compiled into Chromium, by approach. Script-based tools don't change the engine at all.

Stealth plugins

e.g. puppeteer-extra-plugin-stealth

0

Patched drivers

e.g. undetected-chromedriver, nodriver

0

Other Chromium forks

free and paid builds

35–87

Clearcote Pro

r57, Chromium 156

240

Published patch counts, October 2026. The range covers other forks' free and paid builds; Clearcote's is the Pro build.

Test it

365 checks, free, on your own browser

The fingerprint test every Clearcote build is held to. Run it on whatever you use today and compare.

Run the test
Read it

The open build's patches are public

The free open build is BSD-3, reproducible from source and needs no account. The Pro build adds private patches on top.

Open on GitHub
Watch it ship

57 engine releases, 7 Chromium majors

Every patch is carried to each new Chromium. The latest build gets new majors the day they ship.

See the releases

Related reading

DocsMigrating from playwright-stealth or PatchrightReplace one line: clearcote.launch() returns a Playwright browser with the fingerprint set in the engine. What to remove from your script.Q&AWhy does Function.toString() reveal a hooked function?Calling toString() on a native function returns “[native code]”; an override returns its own source instead — so detectors stringify APIs to catch JavaScript spoofs.Q&APlaywright vs Puppeteer for stealth: does it matter?Both drive Chromium over CDP, so both leak the same automation artifacts. Stealth comes from the browser binary and launch defaults, not the framework you pick.CompareClearcote vs puppeteer-extra-plugin-stealthThe stealth plugin is still the most-installed way to bolt evasions onto Puppeteer, at more than a million downloads a week, but it hasn't had a release since March 2023. Every evasion is a JavaScript patch on a stock Chrome, and JavaScript patches reveal themselves. Clearcote sets those values natively in the engine.CompareClearcote vs CamoufoxCamoufox is a well-built open-source anti-detect browser, on Firefox. Clearcote takes the same engine-level approach to Chromium, so your automation presents the browser about 66% of the web actually uses instead of one used by about 3%.CompareClearcote vs CloakBrowserCloakBrowser is a capable engine-level stealth Chromium with a large following, but the patched binary is closed source. Clearcote is engine-level too, and ships an open build whose every patch you can read and rebuild.CompareClearcote vs undetected-chromedriverundetected-chromedriver is still downloaded about 2.5 million times a month, but its last release was in February 2024. It hides the Selenium/ChromeDriver seam on a stock Chrome and never touches the fingerprint or the network layer. Clearcote changes both in the engine.

Try the open-source Chromium alternative

Free and open source, a drop-in for Playwright & Puppeteer, coherent down to the TLS handshake.

Free for one browser: GitHub, a card check or a company Google account. Never charged.