Skip to content

Commit 37befc1

Browse files
committed
docs: update README with new logo and streamlined feature descriptions
1 parent d439622 commit 37befc1

File tree

1 file changed

+86
-92
lines changed

1 file changed

+86
-92
lines changed

README.md

Lines changed: 86 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
<p align="center">
2-
<h1>Pydoll: Async Web Automation in Python!</h1>
3-
</p>
4-
<br>
5-
<p align="center">
6-
<img src="https://github.com/user-attachments/assets/c4615101-d932-4e79-8a08-f50fbc686e3b" alt="Alt text" /> <br><br>
2+
<img src="https://github.com/user-attachments/assets/219f2dbc-37ed-4aea-a289-ba39cdbb335d" alt="Pydoll Logo" /> <br><br>
73
</p>
84

95
<p align="center">
@@ -15,113 +11,100 @@
1511
<img src="https://github.com/thalissonvs/pydoll/actions/workflows/release.yml/badge.svg" alt="Release">
1612
</p>
1713

18-
<p align="center">
19-
<b>Pydoll</b> is revolutionizing browser automation! Unlike other solutions, it <b>eliminates the need for webdrivers</b>,
20-
providing a smooth and reliable automation experience with native asynchronous performance and advanced capabilities
21-
like intelligent captcha bypass and comprehensive network monitoring.
22-
</p>
23-
2414
<p align="center">
2515
<a href="https://autoscrape-labs.github.io/pydoll/">Documentation</a> •
26-
<a href="#-quick-start">Quick Start</a> •
27-
<a href="#-breaking-changes">Breaking Changes</a> •
28-
<a href="#-advanced-features">Advanced Features</a> •
29-
<a href="#-contributing">Contributing</a> •
30-
<a href="#-support-my-work">Support</a> •
31-
<a href="#-license">License</a>
16+
<a href="#getting-started">Getting Started</a> •
17+
<a href="#breaking-changes">Breaking Changes</a> •
18+
<a href="#advanced-features">Advanced Features</a> •
19+
<a href="#contributing">Contributing</a> •
20+
<a href="#support-my-work">Support</a> •
21+
<a href="#license">License</a>
3222
</p>
3323

24+
## Why Pydoll Exists
25+
26+
Picture this: you need to automate browser tasks. Maybe it's testing your web application, scraping data from websites, or automating repetitive processes. Traditionally, this meant dealing with external drivers, complex configurations, and a host of compatibility issues that seemed to appear out of nowhere.
27+
28+
**Pydoll was born to change that.**
29+
30+
Built from the ground up with a different philosophy, Pydoll connects directly to the Chrome DevTools Protocol (CDP), eliminating the need for external drivers entirely. This isn't just a technical change - it's a revolution in how you interact with browsers through Python.
31+
32+
We believe that powerful automation shouldn't require you to become a configuration expert. With Pydoll, you focus on what matters: your automation logic, not the underlying complexity.
33+
3434
## What Makes Pydoll Special
3535

36-
Pydoll isn't just another browser automation library. It's a complete solution built from the ground up for modern web automation challenges:
36+
**Genuine Simplicity**
37+
We don't want you wasting time configuring drivers or dealing with compatibility issues. With Pydoll, you install and you're ready to automate.
3738

38-
🔹 **Zero Webdrivers!** Direct Chrome DevTools Protocol integration - no more compatibility nightmares
39-
🔹 **Intelligent Captcha Bypass** - Automatically handles Cloudflare Turnstile and reCAPTCHA v3*
40-
🔹 **True Async Performance** - Built for speed with native asyncio support
41-
🔹 **Human-like Interactions** - Advanced timing and behavior patterns that mimic real users
42-
🔹 **Powerful Network Monitoring** - Intercept, modify, and analyze all network traffic
43-
🔹 **Event-Driven Architecture** - React to page events, network requests, and user interactions
44-
🔹 **Multi-browser Support** - Chrome and Edge with consistent APIs
45-
🔹 **Intuitive Element Finding** - Modern `find()` and `query()` methods for effortless element location
46-
🔹 **Robust Type Safety** - Comprehensive type system for better IDE support and error prevention
39+
**Truly Human Interactions**
40+
Our algorithms simulate real human behavior patterns - from timing between clicks to how the mouse moves across the screen.
4741

48-
## Installation
42+
**Native Async Performance**
43+
Built from the ground up with `asyncio`, Pydoll doesn't just support asynchronous operations - it was designed for them.
4944

50-
```bash
51-
pip install pydoll-python
52-
```
45+
**Integrated Intelligence**
46+
Automatic bypass of Cloudflare Turnstile and reCAPTCHA v3 captchas, without external services or complex configurations.
5347

54-
## Breaking Changes (v2.0+)
48+
**Powerful Network Monitoring**
49+
Intercept, modify, and analyze all network traffic with ease, giving you complete control over requests.
5550

56-
If you're upgrading from an earlier version, please note these important changes:
51+
**Event-Driven Architecture**
52+
React to page events, network requests, and user interactions in real-time.
5753

58-
### Import Changes
59-
```python
60-
# Old way (deprecated)
61-
from pydoll.browser.options import Options
62-
from pydoll.browser import Chrome, Edge
54+
**Intuitive Element Finding**
55+
Modern `find()` and `query()` methods that make sense and work as you'd expect.
6356

64-
# New way
65-
from pydoll.browser.options import ChromiumOptions
66-
from pydoll.browser.chromium import Chrome, Edge
67-
```
57+
**Robust Type Safety**
58+
Comprehensive type system for better IDE support and error prevention.
6859

69-
### Element Finding Methods
70-
```python
71-
# Old way
72-
element = await page.find_element(By.CSS_SELECTOR, 'button')
60+
## Installation
7361

74-
# New intuitive methods
75-
element = await tab.find(tag_name='button') # Find by attributes
76-
element = await tab.query('button') # CSS selector or XPath
62+
```bash
63+
pip install pydoll-python
7764
```
7865

79-
### Tab-Based Architecture
80-
```python
81-
# Old way
82-
async with Chrome() as browser:
83-
await browser.start()
84-
page = await browser.get_page()
85-
86-
# New way - start() returns Tab directly
87-
async with Chrome() as browser:
88-
tab = await browser.start() # Returns Tab instance directly
89-
# or create additional tabs
90-
new_tab = await browser.new_tab()
91-
```
66+
That's it. No drivers to download, no complex configurations. Just install and start automating.
9267

93-
## Quick Start
68+
## Getting Started
69+
70+
### Your First Automation
71+
72+
Let's start with something simple. The code below opens a browser, navigates to a website, and interacts with elements:
9473

95-
### Basic Automation
9674
```python
9775
import asyncio
9876
from pydoll.browser import Chrome
99-
from pydoll.browser.options import ChromiumOptions
10077

101-
async def main():
102-
# Simple automation
78+
async def my_first_automation():
79+
# Create a browser instance
10380
async with Chrome() as browser:
104-
tab = await browser.start() # Returns Tab directly
81+
# Start the browser and get a tab
82+
tab = await browser.start()
10583

84+
# Navigate to a website
10685
await tab.go_to('https://example.com')
10786

108-
# Modern element finding
87+
# Find elements intuitively
10988
button = await tab.find(tag_name='button', class_name='submit')
11089
await button.click()
11190

11291
# Or use CSS selectors/XPath directly
11392
link = await tab.query('a[href*="contact"]')
11493
await link.click()
11594

116-
asyncio.run(main())
95+
# Run the automation
96+
asyncio.run(my_first_automation())
11797
```
11898

119-
### Custom Browser Configuration
99+
### Custom Configuration
100+
101+
Sometimes you need more control. Pydoll offers flexible configuration options:
102+
120103
```python
121104
from pydoll.browser import Chrome
122105
from pydoll.browser.options import ChromiumOptions
123106

124-
async def main():
107+
async def custom_automation():
125108
# Configure browser options
126109
options = ChromiumOptions()
127110
options.add_argument('--proxy-server=username:password@ip:port')
@@ -134,15 +117,17 @@ async def main():
134117

135118
# Your automation code here
136119
await tab.go_to('https://example.com')
120+
121+
# The browser is now using your custom settings
137122

138-
asyncio.run(main())
123+
asyncio.run(custom_automation())
139124
```
140125

141126
## Advanced Features
142127

143128
### Intelligent Captcha Bypass
144129

145-
Pydoll can automatically handle Cloudflare Turnstile captchas without external services:
130+
One of Pydoll's most impressive features is its ability to automatically handle Cloudflare Turnstile captchas. This means fewer interruptions and smoother automations:
146131

147132
```python
148133
import asyncio
@@ -155,7 +140,7 @@ async def bypass_cloudflare():
155140
# Method 1: Context manager (waits for captcha completion)
156141
async with tab.expect_and_bypass_cloudflare_captcha():
157142
await tab.go_to('https://site-with-cloudflare.com')
158-
print("Captcha automatically handled!")
143+
print("Captcha automatically solved!")
159144

160145
# Method 2: Background processing
161146
await tab.enable_auto_solve_cloudflare_captcha()
@@ -169,7 +154,7 @@ asyncio.run(bypass_cloudflare())
169154

170155
### Advanced Element Finding
171156

172-
Pydoll offers multiple intuitive ways to find elements:
157+
Pydoll offers multiple intuitive ways to find elements. No matter how you prefer to work, we have an approach that makes sense for you:
173158

174159
```python
175160
import asyncio
@@ -215,14 +200,14 @@ asyncio.run(element_finding_examples())
215200

216201
### Concurrent Automation
217202

218-
Leverage async capabilities for parallel processing:
203+
One of the great advantages of Pydoll's asynchronous design is the ability to process multiple tasks simultaneously:
219204

220205
```python
221206
import asyncio
222207
from pydoll.browser import Chrome
223208

224209
async def scrape_page(url):
225-
"""Scrape a single page"""
210+
"""Extract data from a single page"""
226211
async with Chrome() as browser:
227212
tab = await browser.start()
228213
await tab.go_to(url)
@@ -243,7 +228,7 @@ async def concurrent_scraping():
243228
'https://example3.com'
244229
]
245230

246-
# Process all URLs concurrently
231+
# Process all URLs simultaneously
247232
tasks = [scrape_page(url) for url in urls]
248233
results = await asyncio.gather(*tasks)
249234

@@ -255,7 +240,7 @@ asyncio.run(concurrent_scraping())
255240

256241
### Event-Driven Automation
257242

258-
React to page events and user interactions:
243+
React to page events and user interactions in real-time. This enables more sophisticated and responsive automations:
259244

260245
```python
261246
import asyncio
@@ -273,7 +258,8 @@ async def event_driven_automation():
273258
async def on_page_load(event):
274259
print("Page loaded! Starting automation...")
275260
# Perform actions after page loads
276-
await tab.find(id='search-box').type('automation')
261+
search_box = await tab.find(id='search-box')
262+
await search_box.type('automation')
277263

278264
# React to navigation
279265
async def on_navigation(event):
@@ -291,7 +277,7 @@ asyncio.run(event_driven_automation())
291277

292278
### Working with iFrames
293279

294-
Pydoll provides seamless iframe interaction through the `get_frame()` method:
280+
Pydoll provides seamless iframe interaction through the `get_frame()` method. This is especially useful for dealing with embedded content:
295281

296282
```python
297283
import asyncio
@@ -323,9 +309,19 @@ async def iframe_interaction():
323309
asyncio.run(iframe_interaction())
324310
```
325311

312+
## The Philosophy Behind Pydoll
313+
314+
Pydoll isn't just another automation library. It represents a different approach to solving real problems that developers face daily.
315+
316+
**Simplicity Without Sacrificing Power**: We believe that powerful tools don't need to be complex. Pydoll offers advanced functionality through a clean and intuitive API.
317+
318+
**Performance That Matters**: In a world where every millisecond counts, Pydoll's native asynchronous design ensures your automations are not just functional, but efficient.
319+
320+
**Constant Evolution**: The web ecosystem is always changing, and Pydoll evolves with it. New challenges like advanced captchas are met with innovative solutions integrated into the library.
321+
326322
## Documentation
327323

328-
For comprehensive documentation, examples, and deep dives into Pydoll's features, visit our [official documentation site](https://autoscrape-labs.github.io/pydoll/).
324+
For comprehensive documentation, detailed examples, and deep dives into Pydoll's features, visit our [official documentation site](https://autoscrape-labs.github.io/pydoll/).
329325

330326
The documentation includes:
331327
- **Getting Started Guide** - Step-by-step tutorials
@@ -351,19 +347,17 @@ If you find my projects helpful, consider [sponsoring me on GitHub](https://gith
351347
You'll get access to exclusive perks like prioritized support, custom features, and more!
352348

353349
Can't sponsor right now? No problem — you can still help a lot by:
354-
- Starring the repo
355-
- 🐦 Sharing it on social media
356-
- 📝 Writing blog posts or tutorials
357-
- 💬 Giving feedback or reporting issues
350+
- Starring the repo
351+
- Sharing it on social media
352+
- Writing blog posts or tutorials
353+
- Giving feedback or reporting issues
358354

359-
Every bit of support makes a difference — thank you! 🙌
355+
Every bit of support makes a difference — thank you!
360356

361-
## 📄 License
357+
## License
362358

363359
Pydoll is licensed under the [MIT License](LICENSE).
364360

365-
---
366-
367361
<p align="center">
368-
<b>Pydoll</b> — Making browser automation magical!
362+
<b>Pydoll</b> — Making browser automation magical!
369363
</p>

0 commit comments

Comments
 (0)