Back to all posts

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.

DG
Pixel art of an empty rowing boat drifting across a still mountain lake at blue hour, leaving a single wake line

In short

nodriver is the successor of undetected-chromedriver from the same author: it drops Selenium and chromedriver and drives Chrome over the DevTools Protocol directly. In Ian L. Paterson's benchmark of 7 tools over 31 targets it was the only one with no block, 28 OK and 3 gated. It leaves three things to you: a fresh profile on every run, an AGPL-3.0 licence, and input that a page can tell apart, since its clicks arrived untrusted at coordinate 0,0 in our recordings.

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.

PackageLatest releasePyPI downloads, last month
undetected-chromedriver3.5.5, 17 February 20242,035,804
nodriver0.50.3, 13 May 2026287,716
Source: PyPI JSON API, pypistats.org and GitHub API, read 24 September 2026

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 targetsnodrivervanilla Playwright
OK2824
Gated32
Blocked05
Source: Ian L. Paterson, Anti-Detect Browser Benchmark 2026, 31 targets, 3 sweeps, published 13 May 2026

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.

  1. 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.
  2. The input. nodriver sends events from a script, not from an input device, and a page can see that (next section).
  3. 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 pageWhat nodriver produced
keydown0
keypress79
pointer eventsnone
click, isTrustedfalse, at coordinate 0,0
Source: Scalebrowser signature bench, nodriver 0.50.3, Chrome 141.0.7390.122, 2 runs, 24 August 2026

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?

SituationPickWhy
An existing Selenium script that must keep runningundetected-chromedriverno rewrite, but no release since February 2024
New Python code, one identity per run, AGPL acceptablenodriverno blocked target in the benchmark
A site that scores input eventsan input layer that produces trusted eventsnodriver's clicks are untrusted
A hosted product that would modify the drivera driver under a permissive licenceAGPL section 13 applies
Many identities that stay signed in across runsa browser built around persistent profilesnodriver 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 trial

Run it on your own machine

Seven days to try it with your own agents on your own sites. Starting the trial needs a card.

Start the 7-day trial
DG

Davide Grasböck

Founder, Scalebrowser

Builds Scalebrowser, the browser layer for AI agents that runs on your own machine. Measures every change a web page could observe against a real browser before it ships, and writes up the ones that turned out wrong.