Stealth tools · Sep 25, 2026 · 4 min read
nodriver and undetected-chromedriver: 28 of 31 targets open
nodriver against undetected-chromedriver, read in September 2026: releases, licences, a 31 target benchmark, and the input traces nodriver leaves on a page.

In short
undetected-chromedriver, still downloaded about 2 million times a month, is where many blocked Selenium scripts end up, and nodriver is what its author built next. Both are still downloaded in large numbers, but only one of them is still released. We read both packages on 24 September 2026, took the one public benchmark that ran nodriver against live targets, and added what our own signature bench recorded when nodriver typed and clicked.
What are nodriver and undetected-chromedriver?
undetected-chromedriver describes itself as an "Optimized Selenium Chromedriver patch": it keeps the Selenium WebDriver stack and patches the chromedriver binary underneath. nodriver drops that stack. Its README calls it "the official successor of the Undetected-Chromedriver python package", with "No chromedriver binary or Selenium dependency", and it drives Chrome through the Chrome DevTools Protocol directly.
| Package | Latest release | PyPI downloads, last month |
|---|---|---|
| undetected-chromedriver | 3.5.5, 17 February 2024 | 2,035,804 |
| nodriver | 0.50.3, 13 May 2026 | 287,716 |
The older package still gets about seven times the downloads of its successor, although its last release is from February 2024. The undetected-chromedriver repository is licensed GPL-3.0, nodriver AGPL-3.0.
How did nodriver do against 31 targets?
nodriver was the only tool in the test without a blocked target. Ian L. Paterson ran 7 tools against 31 targets in three sweeps from one residential IP address and published the results on 13 May 2026. undetected-chromedriver was not among the seven.
| Result on 31 targets | nodriver | vanilla Playwright |
|---|---|---|
| OK | 28 | 24 |
| Gated | 3 | 2 |
| Blocked | 0 | 5 |
Paterson attributes the gap to the control plane rather than to patches: "Playwright forks fail regardless of patch quality, and defeating that layer takes a control plane that is not Playwright." nodriver is not a Playwright fork, and it did not fall off that cliff.
What does nodriver leave to you?
nodriver leaves three things to the code that uses it: the profile, the input and the licence.
- The profile. Its README describes a "fresh profile on each run, cleans up on exit", and offers to "save and load cookies to file to not repeat tedious login steps". A login survives only if your code saves the cookies and loads them again; passkeys, storage and the rest of the profile do not travel with them.
- The input. nodriver sends events from a script, not from an input device, and a page can see that (next section).
- The licence. nodriver is licensed AGPL-3.0. Section 13 says that a modified version "must prominently offer all users interacting with it remotely through a computer network" the source code. A hosted product that changes nodriver takes on that duty and has to plan for it.
What does direct CDP expose?
Direct CDP removes the Playwright layer and leaves the events nodriver dispatches itself. On our signature bench, 2 runs against Chrome 141 on 24 August 2026, nodriver was the most conspicuous of six input paths we recorded, although it is known as the quietest of the free stealth tools.
| Event on the page | What nodriver produced |
|---|---|
| keydown | 0 |
| keypress | 79 |
| pointer events | none |
| click, isTrusted | false, at coordinate 0,0 |
A page that listens for keydown sees none while text appears, and a click that is not trusted and has no pointer before it did not come from a mouse. The benchmark above recorded whether a site let a tool through, not what its events looked like, and a site that scores events can tell nodriver apart even where its fingerprint looks like ordinary Chrome. The nodriver migration guide shows how to keep existing nodriver code and replace exactly these clicks and key events.
So which should you pick?
| Situation | Pick | Why |
|---|---|---|
| An existing Selenium script that must keep running | undetected-chromedriver | no rewrite, but no release since February 2024 |
| New Python code, one identity per run, AGPL acceptable | nodriver | no blocked target in the benchmark |
| A site that scores input events | an input layer that produces trusted events | nodriver's clicks are untrusted |
| A hosted product that would modify the driver | a driver under a permissive licence | AGPL section 13 applies |
| Many identities that stay signed in across runs | a browser built around persistent profiles | nodriver starts empty every time |
Our verdict: for new Python code nodriver is the better of the two, because it is released and it measured better than every Playwright based tool on the same targets. Its weak spot is where the benchmark did not measure: the events it sends and the profile it throws away after every run.
Scalebrowser gives each agent its own isolated browser with a persistent identity, on your own machine, so a run stays signed in, handles the captcha and finishes without anyone watching it.
Start the 7-day trialRun it on your own machine
Seven days to try it with your own agents on your own sites. Starting the trial needs a card.