# Pydoll

> Python library that automates Chromium browsers over the Chrome DevTools Protocol without a WebDriver, with humanized input and fingerprint injection.

Pydoll is an open-source Python library from autoscrape-labs for automating Chrome or Edge directly over the Chrome DevTools Protocol. It offers both synchronous and asynchronous APIs, and it is used for scraping data, testing web applications, and automating real browser workflows. The project is MIT licensed and its latest listed release is 3.0.0.

## What It Is

Pydoll drives the Chrome or Edge browser already installed on the machine, so there is no WebDriver binary, no driver version matching, and no browser download. Scripts find elements by tag, name, text or id, then click, type, scroll and navigate. Async code imports from `pydoll`, and blocking code imports from `pydoll.sync` with the same names and methods.

## Stealth and Humanized Behavior

Because there is no WebDriver layer, the usual markers such as `navigator.webdriver` are absent. Passing `humanize=True` makes mouse movement follow Bezier curves with realistic timing, and typing uses a variable rhythm. `tab.apply_fingerprint()` overrides User-Agent, Client Hints, navigator, WebGL, canvas, screen, fonts, timezone and locale as one consistent identity. Pydoll does not ship fingerprint profiles; users supply their own. The project also detects and clicks Cloudflare Turnstile widgets. The docs state that this is not a guaranteed bypass and that success depends on IP reputation and profile consistency.

## Data Extraction and Network Control

Users declare a Pydantic-based `ExtractionModel` with CSS or XPath selectors and call `tab.extract_all()` to get typed, validated objects. Network features include request interception, traffic monitoring, HAR 1.2 recording, and authenticated HTTP requests that inherit the browser session. Other documented capabilities:

- Shadow DOM support, including closed roots
- Cross-origin iframes
- Page bundles saved as zip files
- Multi-tab concurrency with asyncio
- Browser contexts and remote connections
- A retry decorator with exponential backoff

## Playwright Compatibility

An existing Playwright script can run on Pydoll by changing one import to `pydoll.playwright.sync_api` or `pydoll.playwright.async_api`. Locators, `get_by_role`, auto-waiting, routes, dialogs and downloads keep their Playwright semantics. `expect()` assertions, fixtures, tracing and the test runner are out of scope.

## Current Status

The README says Pydoll 3 added the synchronous API, the Playwright layer and new waiting methods, along with some breaking changes covered in an upgrade guide. The maintainer notes the project is maintained by one person, and that Firefox support is planned once the repository reaches 10k stars.

## Features
- Direct Chrome DevTools Protocol connection with no WebDriver
- Synchronous and asynchronous APIs
- Humanized mouse movement and typing
- Fingerprint injection via apply_fingerprint()
- Cloudflare Turnstile detection and click handling
- Playwright-compatible layer via one import change
- Typed structured extraction with Pydantic models
- Network interception and monitoring
- HAR 1.2 network recording
- Shadow DOM and cross-origin iframe support
- Page bundle export
- Hybrid UI and API requests inheriting the browser session
- Concurrent multi-tab and browser context automation
- Retry decorator with exponential backoff

## Integrations
Chrome, Microsoft Edge, Playwright, Pydantic

## Platforms
MACOS, WEB, API, DEVELOPER_SDK, CLI

## Pricing
Open Source

## Version
3.0.0

## Links
- Website: https://pydoll.tech/
- Documentation: https://pydoll.tech/docs/
- Repository: https://github.com/autoscrape-labs/pydoll
- EveryDev.ai: https://www.everydev.ai/tools/pydoll
