pydoll-python 2.13.0__tar.gz → 2.13.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/PKG-INFO +8 -8
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/README.md +7 -7
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/interactions/scroll.py +25 -2
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pyproject.toml +1 -1
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/LICENSE +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/chromium/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/chromium/base.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/chromium/chrome.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/chromium/edge.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/interfaces.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/browser_options_manager.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/browser_process_manager.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/proxy_manager.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/temp_dir_manager.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/options.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/requests/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/requests/request.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/requests/response.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/tab.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/browser_commands.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/dom_commands.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/fetch_commands.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/input_commands.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/network_commands.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/page_commands.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/runtime_commands.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/storage_commands.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/target_commands.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/connection_handler.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/managers/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/managers/commands_manager.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/managers/events_manager.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/constants.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/decorators.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/elements/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/elements/mixins/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/elements/mixins/find_elements_mixin.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/elements/web_element.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/exceptions.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/interactions/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/interactions/iframe.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/interactions/keyboard.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/base.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/browser/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/browser/events.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/browser/methods.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/browser/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/debugger/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/dom/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/dom/events.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/dom/methods.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/dom/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/emulation/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/fetch/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/fetch/events.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/fetch/methods.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/fetch/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/input/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/input/events.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/input/methods.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/input/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/io/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/network/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/network/events.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/network/methods.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/network/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/page/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/page/events.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/page/methods.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/page/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/runtime/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/runtime/events.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/runtime/methods.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/runtime/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/security/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/storage/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/storage/events.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/storage/methods.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/storage/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/target/__init__.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/target/events.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/target/methods.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/target/types.py +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/py.typed +0 -0
- {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pydoll-python
|
|
3
|
-
Version: 2.13.
|
|
3
|
+
Version: 2.13.1
|
|
4
4
|
Summary: Pydoll is a library for automating chromium-based browsers without a WebDriver, offering realistic interactions.
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Author: Thalison Fernandes
|
|
@@ -59,12 +59,12 @@ pip install pydoll-python
|
|
|
59
59
|
```
|
|
60
60
|
That's it. No `webdrivers`. No external dependencies.
|
|
61
61
|
|
|
62
|
+
## 🆕 What's New
|
|
63
|
+
|
|
62
64
|
<details>
|
|
63
|
-
<summary><b
|
|
65
|
+
<summary><b>Humanized Keyboard Input (<code>humanize=True</code>)</b></summary>
|
|
64
66
|
<br>
|
|
65
67
|
|
|
66
|
-
### Humanized Keyboard Input (`humanize=True`)
|
|
67
|
-
|
|
68
68
|
Pydoll now includes a **humanized typing engine** that simulates realistic human typing behavior:
|
|
69
69
|
|
|
70
70
|
- **Variable keystroke timing**: 30-120ms between keys (not fixed intervals)
|
|
@@ -78,10 +78,11 @@ await element.type_text("hello", interval=0.1)
|
|
|
78
78
|
# New way (human-like, anti-bot)
|
|
79
79
|
await element.type_text("hello", humanize=True)
|
|
80
80
|
```
|
|
81
|
+
</details>
|
|
81
82
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
<details>
|
|
84
|
+
<summary><b>Humanized Scroll with Physics Engine (<code>humanize=True</code>)</b></summary>
|
|
85
|
+
<br>
|
|
85
86
|
|
|
86
87
|
The scroll API now features a **Cubic Bezier curve physics engine** for realistic scrolling:
|
|
87
88
|
|
|
@@ -106,7 +107,6 @@ await tab.scroll.to_bottom(humanize=True)
|
|
|
106
107
|
| **Humanized** | `humanize=True` | **Anti-bot evasion** |
|
|
107
108
|
|
|
108
109
|
[**📖 Human-Like Interactions Docs**](https://pydoll.tech/docs/features/automation/human-interactions/)
|
|
109
|
-
|
|
110
110
|
</details>
|
|
111
111
|
|
|
112
112
|
## 🚀 Getting Started in 60 Seconds
|
|
@@ -39,12 +39,12 @@ pip install pydoll-python
|
|
|
39
39
|
```
|
|
40
40
|
That's it. No `webdrivers`. No external dependencies.
|
|
41
41
|
|
|
42
|
+
## 🆕 What's New
|
|
43
|
+
|
|
42
44
|
<details>
|
|
43
|
-
<summary><b
|
|
45
|
+
<summary><b>Humanized Keyboard Input (<code>humanize=True</code>)</b></summary>
|
|
44
46
|
<br>
|
|
45
47
|
|
|
46
|
-
### Humanized Keyboard Input (`humanize=True`)
|
|
47
|
-
|
|
48
48
|
Pydoll now includes a **humanized typing engine** that simulates realistic human typing behavior:
|
|
49
49
|
|
|
50
50
|
- **Variable keystroke timing**: 30-120ms between keys (not fixed intervals)
|
|
@@ -58,10 +58,11 @@ await element.type_text("hello", interval=0.1)
|
|
|
58
58
|
# New way (human-like, anti-bot)
|
|
59
59
|
await element.type_text("hello", humanize=True)
|
|
60
60
|
```
|
|
61
|
+
</details>
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
<details>
|
|
64
|
+
<summary><b>Humanized Scroll with Physics Engine (<code>humanize=True</code>)</b></summary>
|
|
65
|
+
<br>
|
|
65
66
|
|
|
66
67
|
The scroll API now features a **Cubic Bezier curve physics engine** for realistic scrolling:
|
|
67
68
|
|
|
@@ -86,7 +87,6 @@ await tab.scroll.to_bottom(humanize=True)
|
|
|
86
87
|
| **Humanized** | `humanize=True` | **Anti-bot evasion** |
|
|
87
88
|
|
|
88
89
|
[**📖 Human-Like Interactions Docs**](https://pydoll.tech/docs/features/automation/human-interactions/)
|
|
89
|
-
|
|
90
90
|
</details>
|
|
91
91
|
|
|
92
92
|
## 🚀 Getting Started in 60 Seconds
|
|
@@ -206,6 +206,13 @@ class Scroll:
|
|
|
206
206
|
"""
|
|
207
207
|
max_flick_distance = random.uniform(600, 1200)
|
|
208
208
|
min_remaining_threshold = 30
|
|
209
|
+
min_stuck_threshold = 5
|
|
210
|
+
min_flick_distance = 100
|
|
211
|
+
|
|
212
|
+
# Failsafe for stuck scroll
|
|
213
|
+
last_remaining = float('inf')
|
|
214
|
+
stuck_counter = 0
|
|
215
|
+
max_stuck_attempts = 10
|
|
209
216
|
|
|
210
217
|
while True:
|
|
211
218
|
if position == ScrollPosition.DOWN:
|
|
@@ -216,7 +223,23 @@ class Scroll:
|
|
|
216
223
|
if remaining <= min_remaining_threshold:
|
|
217
224
|
break
|
|
218
225
|
|
|
226
|
+
# Check if we are stuck
|
|
227
|
+
has_progressed = abs(remaining - last_remaining) >= min_stuck_threshold
|
|
228
|
+
|
|
229
|
+
if has_progressed:
|
|
230
|
+
stuck_counter = 0
|
|
231
|
+
|
|
232
|
+
if not has_progressed:
|
|
233
|
+
stuck_counter += 1
|
|
234
|
+
if stuck_counter >= max_stuck_attempts:
|
|
235
|
+
break
|
|
236
|
+
|
|
237
|
+
last_remaining = remaining
|
|
238
|
+
|
|
219
239
|
flick_distance = min(remaining, max_flick_distance)
|
|
240
|
+
if flick_distance < min_flick_distance and remaining > min_flick_distance:
|
|
241
|
+
flick_distance = min_flick_distance
|
|
242
|
+
|
|
220
243
|
await self._scroll_humanized(position, flick_distance)
|
|
221
244
|
|
|
222
245
|
pause = random.uniform(0.05, 0.15)
|
|
@@ -403,11 +426,11 @@ class Scroll:
|
|
|
403
426
|
if position in {ScrollPosition.UP, ScrollPosition.DOWN}:
|
|
404
427
|
axis = 'top'
|
|
405
428
|
scroll_distance = -distance if position == ScrollPosition.UP else distance
|
|
406
|
-
return axis, scroll_distance
|
|
429
|
+
return axis, scroll_distance
|
|
407
430
|
|
|
408
431
|
axis = 'left'
|
|
409
432
|
scroll_distance = -distance if position == ScrollPosition.LEFT else distance
|
|
410
|
-
return axis, scroll_distance
|
|
433
|
+
return axis, scroll_distance
|
|
411
434
|
|
|
412
435
|
@staticmethod
|
|
413
436
|
def _get_behavior(smooth: bool) -> str:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pydoll-python"
|
|
3
|
-
version = "2.13.
|
|
3
|
+
version = "2.13.1"
|
|
4
4
|
description = "Pydoll is a library for automating chromium-based browsers without a WebDriver, offering realistic interactions."
|
|
5
5
|
authors = ["Thalison Fernandes <thalissfernandes99@gmail.com>"]
|
|
6
6
|
readme = "README.md"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/browser_options_manager.py
RENAMED
|
File without changes
|
{pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/browser_process_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/managers/commands_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|