zendriver
A blazing fast, async-first, undetectable webscraping/web automation framework
Decision gist · record as of 2026-08-14
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.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Chrome/Chromium browser installed on the system; Python 3.10 or later.
- Low install friction with a pure-Python wheel and six runtime dependencies.
- Actively maintained with a release 30 days ago.
License · maintenance · safety
(agpl) — 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.
last release 2026-07-15 (30 days)
0 known vulnerabilities (OSV.dev, 2026-08-14) · 119,167 downloads/mo, #12,084 on PyPI
Alternatives
Verify before relying
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())- 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.
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 on it.
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
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.
Requires Chrome/Chromium browser installed on the system; Python 3.10 or later.
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())
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 | Not declared agpl |
| Python support | Supports the current Python release >=3.10 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | 6 packagesasyncio-atexitdeprecatedemojigraphememsswebsockets |
| 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 |
| Classifiers | Development Status :: 3 - AlphaIntended Audience :: DevelopersLicense :: OSI Approved :: GNU Affero General Public License v3Programming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Topic :: Internet :: WWW/HTTP :: Browsers |
Evidence: zendriver-0.15.5-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “web scraping automation”
- zendriverZendriver is an async-first web automation framework using Chrome…
- playwrightAutomate Chromium, Firefox, and WebKit browsers via a single Python…
- mechanizeAutomate programmatic interaction with HTTP web servers by simulating…
Give your agent the search over MCP, or paste the wish link into any chat.
More Browsers packages
Automate Chromium, Firefox, and WebKit browsers via a single Python API for web testing, scraping, and interaction automation.
Connects an LLM agent directly to a real Chrome/Chromium browser via the Chrome DevTools Protocol, allowing the agent to control browser tasks and self-improve by writing helper code during execution.
Patchright is an undetected fork of Playwright that automates Chromium-based browsers while evading bot-detection systems. It works as a drop-in replacement for Playwright's sync and async APIs.
However, install it only if standard Playwright fails due to detection—anti-detection techniques are inherently fragile and may break as detection systems evolve.
SeleniumBase is a browser automation framework that combines Selenium WebDriver with pytest integration, CDP mode for bot-detection bypass, and tools for web testing, scraping, and crawling.
However, the 60 runtime dependencies are substantial—evaluate whether you need the full feature set or if a lighter alternative suits your use case.
Generates realistic browser headers and device fingerprints that mimic actual web traffic patterns, using a Bayesian generative model to avoid detection.
Install it if you need realistic browser headers or fingerprints for scraping, testing, or automation; skip it if you don't interact with anti-bot systems or…
A lightweight, pluggable HTTP proxy server framework that handles forward proxying, reverse proxying, and TLS interception with support for custom plugins and asyncio-based concurrency.
See also nodriver · selenium · pydoll-python · undetected-chromedriver · mycdp · webdriver-manager · splinter · bzt · choreographer