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.
Safe staging for this asset
This asset is staged first. The copied prompt tells the agent to inspect the staged files and ask before activating scripts, MCP config, or global config.
npx -y tokrepo@latest install 708bb34d-62a7-4b41-b5ed-9d921e932194 --target codexStages files first; activation requires review of the staged README and plan.
What it is
Pydoll is a Python async browser automation library that communicates directly with Chrome via the Chrome DevTools Protocol (CDP). Unlike Selenium or Playwright, it does not use WebDriver, which makes it harder for websites to detect automated browsing. Pydoll includes built-in CAPTCHA solving and anti-detection features.
Pydoll targets developers building web scrapers, automation scripts, or testing tools who need to bypass anti-bot protections that block traditional WebDriver-based solutions.
How it saves time or tokens
WebDriver-based tools leave detectable fingerprints that trigger CAPTCHAs and blocks. Pydoll's CDP approach avoids these fingerprints, reducing the time spent handling bot detection. Built-in CAPTCHA solving means you do not need to integrate a separate CAPTCHA service. The async API handles multiple browser sessions concurrently without threading complexity.
How to use
- Install Pydoll:
pip install pydoll
- Write an automation script:
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')
title = await page.title()
print(f'Page title: {title}')
asyncio.run(main())
- Use element interaction methods for forms, clicks, and data extraction.
Example
import asyncio
from pydoll.browser import Chrome
from pydoll.constants import By
async def scrape_data():
async with Chrome() as browser:
page = await browser.start()
await page.go_to('https://example.com/products')
# Wait for content to load
await page.wait_for_selector('.product-card')
# Extract data from elements
products = await page.find_elements(By.CSS_SELECTOR, '.product-card')
for product in products:
name = await product.get_text()
print(name)
# Take a screenshot
await page.screenshot('products.png')
asyncio.run(scrape_data())
Related on TokRepo
- Web Scraping Tools — Tools for extracting data from websites
- Browser Automation — Automate browser interactions
This tool integrates with standard development workflows and requires minimal configuration to get started. It is available as open-source software with documentation and community support through the official repository. The project follows semantic versioning for stable releases.
For teams evaluating this tool, the key advantage is reducing manual work in repetitive tasks. The automation provided by the built-in features means less custom code to maintain and fewer integration points to manage. This translates directly to lower maintenance costs and faster iteration cycles.
Common pitfalls
- Pydoll requires a Chrome or Chromium browser installed on your system; it connects to Chrome via CDP rather than bundling its own browser.
- The async API requires Python 3.7+ and familiarity with asyncio; synchronous code will not work with Pydoll's browser context manager.
- Anti-detection features reduce but do not eliminate bot detection; sophisticated anti-bot systems may still flag CDP-based automation.
Frequently Asked Questions
Selenium uses the WebDriver protocol, which injects a driver binary between your code and the browser. Pydoll communicates directly via Chrome DevTools Protocol, leaving fewer detectable automation fingerprints. This makes Pydoll harder for websites to block.
Pydoll includes built-in CAPTCHA solving capabilities for common CAPTCHA types. For advanced CAPTCHAs, you may still need external solving services, but the built-in solver handles many standard implementations.
Pydoll requires Python 3.7 or higher. It uses async/await syntax extensively, so familiarity with asyncio is needed for effective use.
Yes. Pydoll supports headless Chrome mode for running automation without a visible browser window. This is useful for server environments and CI pipelines.
Yes. Pydoll is open-source and free to use. Check the repository for the specific license terms. There are no API keys or usage fees.
Citations (3)
- Pydoll GitHub— Pydoll uses Chrome DevTools Protocol for browser automation without WebDriver
- Chrome DevTools Protocol— Chrome DevTools Protocol provides programmatic access to Chrome browser internal…
- Pydoll README— Pydoll includes built-in CAPTCHA solving and anti-detection features
Related on TokRepo
Source & Thanks
Created by autoscrape-labs. Licensed under MIT.
pydoll — ⭐ 6,700+
Thanks to autoscrape-labs for building a modern, detection-resistant browser automation library.
Discussion
Related Assets
TestCafe — Cross-Browser E2E Testing Without WebDriver
TestCafe is a Node.js end-to-end testing framework that runs tests in real browsers using a URL-rewriting proxy, requiring no WebDriver or browser plugins.
sql.js — Run SQLite in the Browser with WebAssembly
A JavaScript library that compiles SQLite to WebAssembly, letting you run a full SQL database entirely in the browser or Node.js.
Gladys Assistant — Privacy-First Open-Source Home Automation
A self-hosted home assistant that runs locally on a Raspberry Pi, providing device control, scenes, automation rules, and a clean dashboard without cloud dependency.
Playwright MCP — Browser Automation Server
Playwright MCP is an MCP server for browser automation via Playwright snapshots. Add via npx in Claude Code/Codex to run deterministic actions.