Skip to content

pydollvschromedp

None - - -
Jun 01 2024 0.0.0(2025-02-01 00:00:00 ago)
12,937 6 172 MIT
May 10 2021 58.1 thousand (month) chromedp(2026-04-01 00:05:30 ago)

Pydoll is a Python library for browser automation that uses the Chrome DevTools Protocol (CDP) directly, designed to be undetectable by anti-bot systems. Unlike Selenium-based tools, Pydoll does not use WebDriver and avoids the common detection vectors that anti-bot systems look for.

Key features include:

  • Native CDP communication Connects directly to Chrome/Chromium via CDP websocket without intermediary drivers, avoiding the automation flags and fingerprints that WebDriver-based tools leave behind.
  • Event-driven architecture Built around an async event system that can listen for and react to browser events like network requests, console messages, and DOM changes.
  • Network interception Can intercept, modify, and mock network requests and responses, useful for blocking unnecessary resources or modifying API responses during scraping.
  • Async-first design Fully asynchronous API built on Python's asyncio for efficient concurrent automation.
  • Clean API Provides a high-level, Pythonic API for common browser automation tasks while still allowing direct CDP command execution for advanced use cases.
  • Multi-browser support Can manage multiple browser instances and pages concurrently.

Pydoll fills a similar niche to nodriver and camoufox — browser automation with a focus on avoiding detection — but takes a different approach by providing more granular control over CDP communication and network interception.

ChromeDP is an open-source library for driving browsers using the Chrome DevTools Protocol (CDP) in the Go programming language. It is a high-level library that abstracts away the low-level details of interacting with the CDP and provides a simple, intuitive API for performing common browser automation tasks such as clicking elements, filling out forms, and taking screenshots.

ChromeDP also supports parallel execution of browser tasks, making it well-suited for large-scale web scraping and testing applications. It is considered as one of the most popular Go package for automation and scraping tasks.

Highlights


anti-detectcdpasync

Example Use


```python import asyncio from pydoll.browser import Chrome from pydoll.constants import By async def main(): async with Chrome() as browser: # Open a new page page = await browser.new_page() await page.go_to("https://example.com") # Find and interact with elements search_input = await page.find_element(By.CSS, "input[name='q']") await search_input.type_text("web scraping") submit_btn = await page.find_element(By.CSS, "button[type='submit']") await submit_btn.click() # Wait for results and extract content await page.wait_element(By.CSS, ".results") results = await page.find_elements(By.CSS, ".result-item") for result in results: title = await result.get_text() print(title) # Network interception example await page.enable_network_interception() # intercept and analyze API calls made by the page asyncio.run(main()) ```
```go package main import ( "context" "fmt" "github.com/chromedp/chromedp" ) func main() { var title, firstParagraph string // create context ctx, cancel := chromedp.NewContext(context.Background()) defer cancel() // run task list (a scraping scenario) err := chromedp.Run(ctx, // go to page chromedp.Navigate("https://www.example.com"), // wait for element to load chromedp.WaitVisible("body"), // extract text from an element (css selector) chromedp.Text("title", &title), // extract first paragraph element chromedp.First(chromedp.ByTagName("p"), &firstParagraph), ) if err != nil { fmt.Println("error:", err) return } fmt.Printf("Title: %s\n", title) fmt.Printf("First paragraph: %s\n", firstParagraph) } ```

Alternatives / Similar


Was this page helpful?