Documentation Index
Fetch the complete documentation index at: https://mintlify.com/cdpdriver/zendriver/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Zendriver is designed to be undetectable by default, using the Chrome DevTools Protocol instead of Selenium/WebDriver. However, sophisticated bot detection systems use multiple signals. This guide covers configuration options and best practices to maximize stealth.Zendriver achieves undetectability by controlling Chrome through CDP rather than WebDriver, making it nearly impossible for websites to detect automation through standard WebDriver checks.
Why Zendriver is undetectable
No WebDriver
Uses CDP instead of Selenium/WebDriver, avoiding the
navigator.webdriver flagReal browser
Controls actual Chrome, not a modified or instrumented version
Natural behavior
Supports human-like interactions: mouse movements, typing delays, etc.
Clean profile
Runs with a real Chrome profile without automation artifacts
Basic anti-detection setup
Start with these recommended settings:Configuration options
Headless mode
- User agent strings
- Plugin arrays
- WebGL vendor/renderer information
- Browser feature detection results
User agent
Use a custom user agent to match your target browser profile:WebRTC
WebRTC can leak your real IP address even through VPNs:WebGL
WebGL provides GPU information that can be used for fingerprinting:Disabling WebGL makes your browser more suspicious. Only disable if you have a specific reason.
Sandbox
The Chrome sandbox provides security isolation:Language
Set the browser language to match your target audience:Browser executable
Use a specific Chrome or Brave executable:Expert mode
--disable-web-security--disable-site-isolation-trials- Shadow DOM always in “open” mode
- Additional debugging features
Advanced configuration
Custom browser arguments
Pass additional Chrome command-line arguments:Persistent profiles
Use a persistent user data directory to maintain cookies and login state:Extensions
Load Chrome extensions for additional capabilities:Human-like behavior
Beyond configuration, implement human-like interactions:Natural typing
Mouse movements
Random delays
Scroll behavior
Testing anti-detection
Use these sites to test your configuration:BrowserScan
Comprehensive bot detection tests
Sannysoft
Tests for common automation signals
Are You Headless
Headless browser detection tests
CreepJS
Advanced browser fingerprinting
Example test script
Common detection vectors
navigator.webdriver
navigator.webdriver
Chrome automation extensions
Chrome automation extensions
Vector: Detection of
chrome.runtime or automation-related extensionsZendriver solution: No automation extensions loaded by default ✓Headless detection
Headless detection
Vector: Missing plugins, WebGL vendors, canvas fingerprints in headless modeZendriver solution: Use
headless=False (default) ✓Mouse/keyboard patterns
Mouse/keyboard patterns
Vector: Perfectly straight mouse movements, instant typing, no human varianceZendriver solution: Implement human-like interactions (see examples above)
Browser fingerprinting
Browser fingerprinting
Vector: Canvas, WebGL, fonts, plugins, screen resolution fingerprintingZendriver solution: Uses real Chrome with natural fingerprint. Use persistent profiles to maintain consistency.
TLS fingerprinting
TLS fingerprinting
Vector: TLS handshake patterns differ between automation and real browsersZendriver solution: Uses real Chrome’s networking stack ✓
Best practices
Don't use headless mode
Headless browsers are easier to detect. Use
headless=False unless you have a specific reason.Rotate user agents carefully
If rotating user agents, ensure they match your browser version and OS.
Handle Cloudflare properly
Use the built-in Cloudflare bypass with realistic delays. See Cloudflare bypass.
Production checklist
Troubleshooting
Still getting detected
Still getting detected
- Verify you’re using
headless=False - Add more delays between actions
- Implement human-like mouse and keyboard behavior
- Use a persistent profile directory
- Test on detection sites to identify specific issues
Cloudflare challenges failing
Cloudflare challenges failing
See the Cloudflare bypass guide for detailed troubleshooting.
Different fingerprint each time
Different fingerprint each time
Use a persistent
user_data_dir to maintain consistent fingerprints across sessions:Further reading
Cloudflare bypass
Handle Cloudflare challenges
CDP commands
Advanced browser control with CDP
Docker deployment
Deploy in production with Docker
nodriver
Original project that inspired Zendriver