Web Automation

What Is nodriver?

What Is nodriver? - conceptual illustration
On this page

nodriver is an open-source, asynchronous Python library that drives Chrome directly over the Chrome DevTools Protocol (CDP), with no Selenium or WebDriver binary in the loop. Its author positions it as the official successor to undetected-chromedriver. Instead of patching a ChromeDriver binary to hide automation markers, it sidesteps that layer entirely by talking to the browser's debugging interface, and its whole API is built around async/await.

Quick facts

LanguagePython (async / await)
ArchitectureDirect CDP - no Selenium, no WebDriver binary
AuthorSame author as undetected-chromedriver
LicenseAGPL-3.0
MaturityAlpha (development status: alpha) - API may change

A direct-CDP architecture

nodriver issues Chrome DevTools Protocol commands and subscribes to CDP events over the browser's debugging connection, the same channel tools like Puppeteer use. There is no Selenium dependency and no separate ChromeDriver binary. This matters because the WebDriver layer is itself a source of some automation artifacts; driving the browser directly over CDP avoids that layer rather than patching it after the fact. The API is fully asynchronous, which the project credits for performance gains, and it can include iframes in most element queries. The trade-off, discussed in CDP detection, is that the debugging channel has its own observable tells.

How it differs from undetected-chromedriver

The two share an author and a problem domain but take opposite structural approaches. undetected-chromedriver keeps Selenium and patches the ChromeDriver binary to suppress markers; nodriver removes Selenium and WebDriver altogether and drives Chrome directly. For users that means a different, async-first API rather than a drop-in Selenium replacement, and a different dependency footprint. nodriver is the second link in the lineage that runs undetected-chromedriver to nodriver to zendriver.

Licensing and maturity

Two practical notes. First, nodriver is licensed under AGPL-3.0, whose network-use clause is a meaningful difference from undetected-chromedriver's GPL-3.0 for anyone embedding it in a hosted service - worth a look with your own legal context. Second, the project declares itself alpha, so its API can change between versions and the author advises testing thoroughly before relying on it. It is actively developed but explicitly not declared stable. As with every tool in this family, it changes what the browser exposes but does nothing about IP reputation or TLS, which remain separate signals.

Code example

python
# nodriver drives Chrome directly over CDP - no Selenium, no ChromeDriver
# binary. The API is async-first.
import nodriver as uc

async def main():
    browser = await uc.start()
    page = await browser.get('https://example.com')
    print(await page.evaluate('document.title'))
    browser.stop()

uc.loop().run_until_complete(main())

# Driving over CDP avoids the WebDriver layer, but the debugging channel
# has its own tells, and IP / TLS are unchanged. License: AGPL-3.0
# (note the network-use clause for hosted services).

Related terms

Concept map

How nodriver connects

The terms most directly tied to this one. Hover a node to see its neighbours, click to preview, drag to rearrange.

0 terms · 0 connections
You are here · Web Automation
Building map…

Frequently asked questions

What is nodriver?

nodriver is an open-source asynchronous Python library that drives Chrome directly over the Chrome DevTools Protocol, with no Selenium or WebDriver binary involved. Its author positions it as the official successor to undetected-chromedriver.

How does nodriver differ from undetected-chromedriver?

undetected-chromedriver keeps Selenium and patches the ChromeDriver binary to suppress automation markers. nodriver removes Selenium and WebDriver entirely and drives Chrome directly over CDP, with an async-first API rather than a drop-in Selenium-style one.

What license is nodriver under?

nodriver is licensed under AGPL-3.0. Its network-use clause is a notable difference from undetected-chromedriver's GPL-3.0 and is worth reviewing if you intend to embed it in a hosted service.

Is nodriver stable?

It declares itself alpha, so the API can change between versions and the project advises testing thoroughly. It is actively developed but explicitly not declared stable.

Last updated: 2026-06-15