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.
Files changed (91) hide show
  1. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/PKG-INFO +8 -8
  2. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/README.md +7 -7
  3. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/interactions/scroll.py +25 -2
  4. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pyproject.toml +1 -1
  5. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/LICENSE +0 -0
  6. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/__init__.py +0 -0
  7. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/__init__.py +0 -0
  8. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/chromium/__init__.py +0 -0
  9. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/chromium/base.py +0 -0
  10. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/chromium/chrome.py +0 -0
  11. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/chromium/edge.py +0 -0
  12. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/interfaces.py +0 -0
  13. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/__init__.py +0 -0
  14. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/browser_options_manager.py +0 -0
  15. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/browser_process_manager.py +0 -0
  16. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/proxy_manager.py +0 -0
  17. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/managers/temp_dir_manager.py +0 -0
  18. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/options.py +0 -0
  19. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/requests/__init__.py +0 -0
  20. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/requests/request.py +0 -0
  21. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/requests/response.py +0 -0
  22. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/browser/tab.py +0 -0
  23. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/__init__.py +0 -0
  24. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/browser_commands.py +0 -0
  25. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/dom_commands.py +0 -0
  26. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/fetch_commands.py +0 -0
  27. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/input_commands.py +0 -0
  28. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/network_commands.py +0 -0
  29. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/page_commands.py +0 -0
  30. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/runtime_commands.py +0 -0
  31. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/storage_commands.py +0 -0
  32. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/commands/target_commands.py +0 -0
  33. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/__init__.py +0 -0
  34. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/connection_handler.py +0 -0
  35. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/managers/__init__.py +0 -0
  36. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/managers/commands_manager.py +0 -0
  37. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/connection/managers/events_manager.py +0 -0
  38. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/constants.py +0 -0
  39. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/decorators.py +0 -0
  40. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/elements/__init__.py +0 -0
  41. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/elements/mixins/__init__.py +0 -0
  42. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/elements/mixins/find_elements_mixin.py +0 -0
  43. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/elements/web_element.py +0 -0
  44. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/exceptions.py +0 -0
  45. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/interactions/__init__.py +0 -0
  46. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/interactions/iframe.py +0 -0
  47. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/interactions/keyboard.py +0 -0
  48. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/__init__.py +0 -0
  49. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/base.py +0 -0
  50. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/browser/__init__.py +0 -0
  51. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/browser/events.py +0 -0
  52. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/browser/methods.py +0 -0
  53. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/browser/types.py +0 -0
  54. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/debugger/types.py +0 -0
  55. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/dom/__init__.py +0 -0
  56. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/dom/events.py +0 -0
  57. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/dom/methods.py +0 -0
  58. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/dom/types.py +0 -0
  59. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/emulation/types.py +0 -0
  60. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/fetch/__init__.py +0 -0
  61. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/fetch/events.py +0 -0
  62. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/fetch/methods.py +0 -0
  63. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/fetch/types.py +0 -0
  64. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/input/__init__.py +0 -0
  65. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/input/events.py +0 -0
  66. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/input/methods.py +0 -0
  67. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/input/types.py +0 -0
  68. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/io/types.py +0 -0
  69. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/network/__init__.py +0 -0
  70. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/network/events.py +0 -0
  71. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/network/methods.py +0 -0
  72. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/network/types.py +0 -0
  73. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/page/__init__.py +0 -0
  74. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/page/events.py +0 -0
  75. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/page/methods.py +0 -0
  76. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/page/types.py +0 -0
  77. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/runtime/__init__.py +0 -0
  78. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/runtime/events.py +0 -0
  79. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/runtime/methods.py +0 -0
  80. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/runtime/types.py +0 -0
  81. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/security/types.py +0 -0
  82. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/storage/__init__.py +0 -0
  83. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/storage/events.py +0 -0
  84. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/storage/methods.py +0 -0
  85. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/storage/types.py +0 -0
  86. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/target/__init__.py +0 -0
  87. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/target/events.py +0 -0
  88. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/target/methods.py +0 -0
  89. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/protocol/target/types.py +0 -0
  90. {pydoll_python-2.13.0 → pydoll_python-2.13.1}/pydoll/py.typed +0 -0
  91. {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.0
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>🆕 What's New</b></summary>
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
- ### Humanized Scroll with Physics Engine (`humanize=True`)
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>🆕 What's New</b></summary>
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
- ### Humanized Scroll with Physics Engine (`humanize=True`)
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 * 10
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 * 10
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.0"
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