zendriver
A blazing fast, async-first, undetectable webscraping/web automation framework
What it is and what it does
Zendriver is a Python web automation library built on Chrome DevTools Protocol (CDP) rather than Selenium/WebDriver. It provides an async-first API for visiting websites, scraping content, executing JavaScript, and taking screenshots using a real Chrome browser. The package is a maintained fork of nodriver, created to incorporate unmerged bugfixes and enable community contributions.
The library targets developers who need browser automation with lower detection risk and async support. It handles element lookup by selector or text (including iframe content), automatic cookie and profile management, and includes Docker support for containerized deployments. Dependencies include asyncio-atexit, deprecated, emoji, grapheme, mss, and websockets. It requires Python 3.10 or later and a system Chrome/Chromium installation.
Use it for:
- Scrape JavaScript-heavy websites where static HTTP requests fail or return incomplete content.
- Automate login flows and session management by saving and reloading cookies across runs.
- Test web applications by simulating user interactions and verifying rendered output.
- Extract data from sites with anti-bot detection that blocks Selenium/WebDriver.
- Run browser automation in Docker containers with GPU-accelerated Chrome.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Zendriver is an async-first web automation framework using Chrome DevTools Protocol to scrape content, run JavaScript, and interact with websites in a real browser without Selenium or WebDriver.
Yes, with conditions. Install if you need async browser automation with lower detection risk and can accept AGPL v3 licensing constraints. The low install friction, active maintenance, and zero known vulnerabilities are strong signals. However, Alpha status means the API may change; verify that the current feature set and stability match your production requirements before committing to it in a long-lived project.
Install
zendriver on PyPI
pip
pip install zendriveruv
uv add zendriverpoetry
poetry add zendriverInstalling zendriver
Before you install
Low install friction with a pure-Python wheel and six runtime dependencies. Actively maintained with a release 30 days ago. Marked as Alpha status, so expect ongoing API changes.
License in practice
Licensed under GNU AGPL v3, which requires that if you modify zendriver or run it as a network service, you must make your modified source code available to users. This is a copyleft obligation stricter than permissive licenses; internal-only use is not restricted.
Quickstart
import asyncio
import zendriver as zd
async def main():
browser = await zd.start()
page = await browser.get("https://example.com")
await page.save_screenshot("example.png")
await browser.stop()
asyncio.run(main())
Requires Chrome/Chromium browser installed on the system; Python 3.10 or later.
Verify before relying
- Actual detection evasion effectiveness against specific anti-bot solutions (claimed as 'almost impossible to detect').
- Performance benchmarks comparing to Selenium/WebDriver to verify 'much faster' claim.
- Stability and API maturity given Alpha development status and recent fork from nodriver.
Package facts
| License | GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this… (full text in the JSON record) (agpl) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 6 — asyncio-atexit, deprecated, emoji, grapheme, mss, websockets |
| Maintenance | actively maintained — 30 days since the last release |
| First released | |
| Downloads | 119,167/month — #12,084 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: zendriver-0.15.5-py3-none-any.whl
Tags
More Browsers packages
Automate Chromium, Firefox, and WebKit browsers…
permissive · top 1,000 on PyPI
browser-harnessConnects an LLM agent directly to a real…
permissive · top 5,000 on PyPI
patchrightPatchright is an undetected fork of Playwright…
permissive · top 5,000 on PyPI
seleniumbaseSeleniumBase is a browser automation framework…
permissive · top 5,000 on PyPI
browserforgeGenerates realistic browser headers and device…
permissive · top 5,000 on PyPI
proxy.pyA lightweight, pluggable HTTP proxy server…
permissive · top 5,000 on PyPI
nodrivernodriver is an async browser automation library…
agpl · top 15,000 on PyPI
seleniumSelenium provides Python bindings to automate…
permissive · top 1,000 on PyPI
pydoll-pythonPydoll automates Chromium-based browsers via…
unclear · top 15,000 on PyPI
undetected-chromedriverPatches Selenium's Chrome WebDriver to avoid…
copyleft · top 5,000 on PyPI
mycdpMyCDP provides autogenerated Chrome DevTools…
permissive · top 15,000 on PyPI
webdriver-managerAutomatically downloads, caches, and manages…
permissive · top 5,000 on PyPI
splinterSplinter provides a unified Python interface…
permissive · top 15,000 on PyPI
bztTaurus is a command-line wrapper that…
permissive · top 5,000 on PyPI
choreographerChoreographer provides remote control of…
unclear · top 5,000 on PyPI