Skip to content

Pydoll Logo

Pydoll

Pydoll automates Chromium browsers over the Chrome DevTools Protocol, with no webdriver and no manual waits. Use it to scrape data, test web applications, and automate real browser workflows in async Python.

Installation

$ pip install pydoll-python

---> 100%

Pydoll drives the Chrome or Edge already installed on your machine. You don't need to download a webdriver or keep driver versions in sync with your browser.

New to Pydoll? Follow Getting started for a complete walkthrough.

Quick start

Open a page, find elements by how you'd describe them to a person, and interact with humanized timing:

import asyncio

from pydoll.browser.chromium import Chrome


async def main():
    async with Chrome() as browser:
        tab = await browser.start()
        await tab.go_to('https://github.com/autoscrape-labs/pydoll')

        star_button = await tab.find(
            tag_name='button',
            timeout=5,
            raise_exc=False
        )
        if not star_button:
            print('Button not found.')
            return

        await star_button.click()
        await asyncio.sleep(3)

asyncio.run(main())

When the goal is data rather than interaction, define a model and let Pydoll extract it, typed and validated:

import asyncio

from pydoll.browser.chromium import Chrome
from pydoll.extractor import ExtractionModel, Field


class Quote(ExtractionModel):
    text: str = Field(selector='.text')
    author: str = Field(selector='.author')
    tags: list[str] = Field(selector='.tag')


async def main():
    async with Chrome() as browser:
        tab = await browser.start()
        await tab.go_to('https://quotes.toscrape.com')

        quotes = await tab.extract_all(Quote, scope='.quote', timeout=5)
        for quote in quotes:
            print(f'{quote.author}: {quote.text}')

asyncio.run(main())

Models support CSS and XPath selectors, HTML attribute targeting, custom transforms, and nested models. Learn more in Structured extraction.

Why Pydoll

  • No webdriver: Pydoll connects straight to the browser over the Chrome DevTools Protocol. Nothing to download, no version mismatches to debug.
  • Humanized interactions: clicks follow curved mouse paths and typing has variable rhythm with occasional corrected typos, so your automation behaves like a person at the keyboard.
  • Async by design: built on asyncio, so one process can drive many tabs and browsers concurrently.
  • Cloudflare Turnstile handling: Pydoll detects the Turnstile widget and clicks it natively. No external captcha service to pay for or integrate.
  • Network control: monitor, intercept, and modify requests as the page makes them.
  • Typed extraction: declare a Pydantic model and get validated, IDE-friendly objects instead of raw elements.

What's next

Top Sponsors

Sponsors

Sponsors keep the project running and help fund ongoing development. Thanks to everyone who supports Pydoll.

License

Pydoll is released under the MIT License, so you can use it freely in personal and commercial projects.