Pydoll: scraping, the easier way

Built from scratch with zero configuration complexity, Pydoll connects directly to the Chrome DevTools Protocol. No WebDrivers, no setup headaches - just async performance, intuitive API, and full type safety.

✨ Simple, powerful, async 🚀 Ready in seconds

Zero Configuration

Install and automate immediately. No drivers, no PATH variables, no setup hell.

Async by Design

Built for concurrent automation with true async/await support from day one.

Full Type Safety

Complete type annotations. Your IDE knows exactly what each method returns.

Browser-context requests

Use tab.request to automatically inherit cookies, CORS and session state.

Intuitive API

Element finding feels like natural language. Simple, readable automation code.

Event-driven automation

React to page, network and runtime events in real-time.

Help us reach 10k stars

🚀 Your star means more features, more contributors, and a stronger community.

0 / 10,000 0%

Latest stargazers

Install and get started in seconds

No complex setup. Install, import and automate.

pip install pydoll-python

Quick example:

import asyncio
from pydoll.browser import Chrome

async def main():
    async with Chrome() as browser:
        tab = await browser.start()
        await tab.go_to('https://google.com')
        
        search_box = await tab.find(name='q')
        await search_box.type_text('Pydoll')
        await search_box.press_keyboard_key('Enter')

asyncio.run(main())

Zero to automation in seconds

Install once, automate forever.
No drivers, no config, no headaches.

Async by design

Built for concurrent automation with true async/await support

Type safe

Complete type annotations - your IDE knows exactly what each method returns

CDP direct

No WebDrivers, no compatibility issues - direct Chrome connection

Intuitive API

Element finding feels like natural language - simple and readable

Frequently asked questions

Top questions about Pydoll, its features and use cases.

What is Pydoll and why doesn't it use WebDriver?

Pydoll is a Python library that controls the browser via the Chrome DevTools Protocol (CDP), eliminating WebDrivers. This reduces layers, improves reliability and gives direct access to advanced capabilities like page events, network interception and JavaScript execution in the real tab context.

How does Pydoll's type safety work in practice?

Every method is fully typed with precise return annotations. Your IDE knows that await tab.find(id='btn') returns WebElement, find_all=True returns list[WebElement], and raise_exc=False returns WebElement | None. This eliminates guesswork and catches errors before runtime.

What are “browser‑context requests” and when to use them?

With tab.request you perform HTTP in the same context as the tab: cookies, session, headers and CORS are automatically inherited. Ideal for hybrid automation: log in via UI and then call the app's authenticated APIs with simplicity and speed.

What makes Pydoll's setup so simple compared to other tools?

Just pip install pydoll-python and you're ready. No WebDriver downloads, no PATH configuration, no version matching hell. Pydoll connects directly to Chrome via CDP, eliminating the entire driver layer that causes most automation headaches.

How does concurrent automation work with multiple tabs?

Pydoll is async-first, so you can run multiple tabs simultaneously with asyncio.gather. Create tabs with await browser.new_tab(), then process them in parallel. Each tab maintains its own session and state, giving you true concurrent automation without complexity.

Enjoying Pydoll?

Star it, contribute to the repo or sponsor the development.