ScriptsApr 2, 2026·3 min read

Pydoll — Browser Automation Without WebDriver

Python async browser automation via Chrome DevTools Protocol. Built-in CAPTCHA solving, anti-detection, no Selenium needed. 6.7K+ stars.

TO
TokRepo精选 · Community
Quick Use

Use it first, then decide how deep to go

This block should tell both the user and the agent what to copy, install, and apply first.

```bash pip install pydoll ``` ```python import asyncio from pydoll.browser import Chrome from pydoll.constants import By async def main(): async with Chrome() as browser: page = await browser.start() await page.go_to("https://example.com") # Find and interact with elements search_box = await page.find_element(By.CSS_SELECTOR, "input[name='q']") await search_box.type_text("AI tools 2026") button = await page.find_element(By.CSS_SELECTOR, "button[type='submit']") await button.click() # Extract page content content = await page.get_content() print(content) asyncio.run(main()) ``` No ChromeDriver download needed — Pydoll talks directly to Chrome via CDP. ---
Intro
Pydoll is a Python library with 6,700+ GitHub stars for automating Chromium-based browsers without WebDriver (Selenium/ChromeDriver). It communicates directly via the Chrome DevTools Protocol (CDP), making automated sessions indistinguishable from real user browsing. With built-in CAPTCHA solving (reCAPTCHA v3, Cloudflare Turnstile), anti-detection fingerprinting, and full async/await support, Pydoll is designed for modern web scraping where traditional tools get blocked. Run dozens of concurrent browser sessions with Python's asyncio. Works with: Chrome, Chromium, Edge, Python 3.10+. Best for developers building web scrapers that need to bypass anti-bot systems. Setup time: under 2 minutes. ---
## Pydoll Features & Architecture ### Why Not Selenium/Playwright? | Feature | Selenium | Playwright | Pydoll | |---------|----------|------------|--------| | **WebDriver needed** | Yes | Yes | No (CDP direct) | | **Bot detection** | Easily detected | Detectable | Hard to detect | | **CAPTCHA solving** | External service | External service | Built-in | | **Async support** | Limited | Yes | Full asyncio | | **Setup complexity** | Driver versioning | Auto-install | Zero — uses system Chrome | ### Chrome DevTools Protocol (CDP) Pydoll connects to Chrome's built-in debugging interface: ```python # No driver download, no version matching # Just uses your installed Chrome async with Chrome() as browser: page = await browser.start() # You're controlling a real Chrome instance ``` Benefits: - No WebDriver fingerprint for bot detectors to find - Access to network interception, console logs, performance metrics - Full control over cookies, storage, headers - Works with any installed Chromium-based browser ### Built-in CAPTCHA Solving Handle reCAPTCHA and Turnstile without third-party services: ```python from pydoll.browser import Chrome async with Chrome() as browser: page = await browser.start() await page.go_to("https://site-with-captcha.com") # Pydoll automatically detects and solves CAPTCHAs # reCAPTCHA v3 — solved via token injection # Cloudflare Turnstile — solved via interaction simulation ``` ### Concurrent Sessions Run multiple browser instances in parallel: ```python import asyncio from pydoll.browser import Chrome async def scrape_url(url): async with Chrome() as browser: page = await browser.start() await page.go_to(url) return await page.get_content() async def main(): urls = ["https://site1.com", "https://site2.com", "https://site3.com"] results = await asyncio.gather(*[scrape_url(u) for u in urls]) for r in results: print(len(r), "chars") asyncio.run(main()) ``` ### Network Interception Monitor and modify network requests: ```python async with Chrome() as browser: page = await browser.start() # Listen to network events async def on_response(event): url = event["params"]["response"]["url"] if "api/data" in url: body = await page.get_response_body(event["params"]["requestId"]) print(f"API response: {body[:200]}") await page.enable_network() page.on("Network.responseReceived", on_response) await page.go_to("https://example.com") ``` ### Anti-Detection Features - No `navigator.webdriver` flag - No ChromeDriver process in task manager - Realistic mouse movements and typing delays - Proper viewport and screen resolution emulation - Cookie and localStorage persistence across sessions --- ## FAQ **Q: What is Pydoll?** A: Pydoll is a Python library with 6,700+ GitHub stars for browser automation via Chrome DevTools Protocol (CDP), without WebDriver. It features built-in CAPTCHA solving, anti-detection, and full async support. **Q: How is Pydoll different from Playwright or Selenium?** A: Pydoll skips WebDriver entirely, connecting directly to Chrome via CDP. This eliminates the WebDriver fingerprint that bot detectors look for. It also includes built-in CAPTCHA solving (reCAPTCHA v3, Cloudflare Turnstile) that Playwright and Selenium require external services for. **Q: Is Pydoll free?** A: Yes, fully open-source under MIT license. ---
🙏

Source & Thanks

> Created by [autoscrape-labs](https://github.com/autoscrape-labs). Licensed under MIT. > > [pydoll](https://github.com/autoscrape-labs/pydoll) — ⭐ 6,700+ Thanks to autoscrape-labs for building a modern, detection-resistant browser automation library.

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets