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.
Install and automate immediately. No drivers, no PATH variables, no setup hell.
Built for concurrent automation with true async/await support from day one.
Complete type annotations. Your IDE knows exactly what each method returns.
Use tab.request
to automatically inherit cookies, CORS and session state.
Element finding feels like natural language. Simple, readable automation code.
React to page, network and runtime events in real-time.
🚀 Your star means more features, more contributors, and a stronger community.
Latest stargazers
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())
Install once, automate forever.
No drivers, no config, no headaches.
Built for concurrent automation with true async/await support
Complete type annotations - your IDE knows exactly what each method returns
No WebDrivers, no compatibility issues - direct Chrome connection
Element finding feels like natural language - simple and readable
Top questions about Pydoll, its features and use cases.
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.
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.
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.
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.
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.
Star it, contribute to the repo or sponsor the development.