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 mid-2024; the PyPI name is now carried by an actively maintained fork (Mattwmaster58), which released 2.0 with a cleaner API and merged the outstanding pull requests. It is MIT-licensed and very widely used: roughly 2.4 million PyPI downloads a month.

It works 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 nothing in the package touches the Playwright driver's own CDP side effects or the network layer.

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 Not addressed
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 September 2026. playwright-stealth is open source (mit); details change — check its project for the latest.

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 (2.x) is updated. 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 network layers 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.

Related reading

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 around 840,000 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 69% 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, runs a newer Chromium, and ships an open build whose every patch you can read and rebuild.CompareClearcote vs undetected-chromedriverundetected-chromedriver is still downloaded about 2 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 with GitHub. No card.