osn-selenium 0.0.0__tar.gz → 1.1.0__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 (657) hide show
  1. osn_selenium-1.1.0/PKG-INFO +252 -0
  2. osn_selenium-1.1.0/README.md +236 -0
  3. osn_selenium-1.1.0/description.txt +1 -0
  4. osn_selenium-1.1.0/osn_selenium/_base_models.py +41 -0
  5. osn_selenium-1.1.0/osn_selenium/_cdp_import.py +253 -0
  6. osn_selenium-1.1.0/osn_selenium/_functions.py +84 -0
  7. osn_selenium-1.1.0/osn_selenium/_typehints.py +19 -0
  8. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  9. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  10. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/animation.py +47 -0
  11. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/audits.py +39 -0
  12. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  13. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  14. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  15. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/browser.py +122 -0
  16. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  17. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/cast.py +31 -0
  18. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/console.py +18 -0
  19. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/css.py +197 -0
  20. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  21. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  22. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  23. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/dom.py +305 -0
  24. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  25. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  26. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  27. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  28. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  29. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  30. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  31. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  32. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  33. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  34. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  35. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  36. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/input.py +158 -0
  37. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  38. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/io.py +24 -0
  39. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  40. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/log.py +27 -0
  41. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/media.py +14 -0
  42. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/memory.py +61 -0
  43. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/network.py +252 -0
  44. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  45. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/page.py +347 -0
  46. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/performance.py +28 -0
  47. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  48. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/preload.py +14 -0
  49. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  50. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  51. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  52. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/schema.py +11 -0
  53. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/security.py +26 -0
  54. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  55. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/storage.py +175 -0
  56. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  57. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/target.py +125 -0
  58. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  59. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  60. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  61. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  62. osn_selenium-1.1.0/osn_selenium/abstract/executors/cdp.py +63 -0
  63. osn_selenium-1.1.0/osn_selenium/abstract/executors/javascript.py +203 -0
  64. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  65. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/base.py +25 -0
  66. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/click.py +93 -0
  67. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  68. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  69. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  70. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  71. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  72. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/move.py +60 -0
  73. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  74. osn_selenium-1.1.0/osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  75. osn_selenium-1.1.0/osn_selenium/abstract/instances/alert.py +67 -0
  76. osn_selenium-1.1.0/osn_selenium/abstract/instances/browser.py +76 -0
  77. osn_selenium-1.1.0/osn_selenium/abstract/instances/browsing_context.py +310 -0
  78. osn_selenium-1.1.0/osn_selenium/abstract/instances/dialog.py +107 -0
  79. osn_selenium-1.1.0/osn_selenium/abstract/instances/fedcm.py +133 -0
  80. osn_selenium-1.1.0/osn_selenium/abstract/instances/mobile.py +79 -0
  81. osn_selenium-1.1.0/osn_selenium/abstract/instances/network.py +100 -0
  82. osn_selenium-1.1.0/osn_selenium/abstract/instances/permissions.py +52 -0
  83. osn_selenium-1.1.0/osn_selenium/abstract/instances/script.py +109 -0
  84. osn_selenium-1.1.0/osn_selenium/abstract/instances/shadow_root.py +81 -0
  85. osn_selenium-1.1.0/osn_selenium/abstract/instances/storage.py +98 -0
  86. osn_selenium-1.1.0/osn_selenium/abstract/instances/switch_to.py +104 -0
  87. osn_selenium-1.1.0/osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  88. osn_selenium-1.1.0/osn_selenium/abstract/instances/web_element.py +395 -0
  89. osn_selenium-1.1.0/osn_selenium/abstract/instances/web_extension.py +70 -0
  90. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  91. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/blink/base.py +80 -0
  92. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  93. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/blink/features.py +51 -0
  94. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  95. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  96. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/blink/network.py +45 -0
  97. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  98. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  99. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  100. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  101. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  102. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  103. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/actions.py +58 -0
  104. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/auth.py +145 -0
  105. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/base.py +298 -0
  106. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/capture.py +84 -0
  107. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/components.py +82 -0
  108. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  109. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/element.py +55 -0
  110. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/file.py +82 -0
  111. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  112. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  113. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/script.py +88 -0
  114. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/settings.py +43 -0
  115. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/storage.py +81 -0
  116. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  117. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/core/window.py +237 -0
  118. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  119. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/edge/base.py +36 -0
  120. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  121. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  122. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  123. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  124. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  125. osn_selenium-1.1.0/osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  126. osn_selenium-1.1.0/osn_selenium/base_mixin.py +122 -0
  127. osn_selenium-1.1.0/osn_selenium/browsers_handler/__init__.py +100 -0
  128. osn_selenium-1.1.0/osn_selenium/browsers_handler/_linux.py +226 -0
  129. {osn_selenium-0.0.0 → osn_selenium-1.1.0}/osn_selenium/browsers_handler/_windows.py +21 -14
  130. osn_selenium-0.0.0/osn_selenium/browsers_handler/types.py → osn_selenium-1.1.0/osn_selenium/browsers_handler/models.py +5 -2
  131. osn_selenium-1.1.0/osn_selenium/dev_tools/_decorators.py +149 -0
  132. osn_selenium-1.1.0/osn_selenium/dev_tools/_exception_helpers.py +116 -0
  133. osn_selenium-1.1.0/osn_selenium/dev_tools/_functions.py +174 -0
  134. osn_selenium-1.1.0/osn_selenium/dev_tools/_system_utils.py +35 -0
  135. osn_selenium-1.1.0/osn_selenium/dev_tools/_typehints.py +35 -0
  136. osn_selenium-1.1.0/osn_selenium/dev_tools/_validators.py +227 -0
  137. osn_selenium-1.1.0/osn_selenium/dev_tools/_wrappers.py +92 -0
  138. osn_selenium-1.1.0/osn_selenium/dev_tools/domains/__init__.py +30 -0
  139. osn_selenium-1.1.0/osn_selenium/dev_tools/domains/abstract.py +222 -0
  140. osn_selenium-1.1.0/osn_selenium/dev_tools/domains/fetch.py +618 -0
  141. {osn_selenium-0.0.0 → osn_selenium-1.1.0}/osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  142. osn_selenium-1.1.0/osn_selenium/dev_tools/filters.py +40 -0
  143. osn_selenium-1.1.0/osn_selenium/dev_tools/logger/main.py +214 -0
  144. osn_selenium-1.1.0/osn_selenium/dev_tools/logger/models.py +232 -0
  145. osn_selenium-1.1.0/osn_selenium/dev_tools/logger/target.py +278 -0
  146. osn_selenium-1.1.0/osn_selenium/dev_tools/manager/__init__.py +16 -0
  147. osn_selenium-1.1.0/osn_selenium/dev_tools/manager/base.py +124 -0
  148. osn_selenium-1.1.0/osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  149. osn_selenium-1.1.0/osn_selenium/dev_tools/manager/logging.py +153 -0
  150. osn_selenium-1.1.0/osn_selenium/dev_tools/manager/settings.py +89 -0
  151. osn_selenium-1.1.0/osn_selenium/dev_tools/manager/targets.py +175 -0
  152. osn_selenium-1.1.0/osn_selenium/dev_tools/models.py +49 -0
  153. osn_selenium-1.1.0/osn_selenium/dev_tools/settings.py +139 -0
  154. osn_selenium-1.1.0/osn_selenium/dev_tools/target/__init__.py +16 -0
  155. osn_selenium-1.1.0/osn_selenium/dev_tools/target/base.py +427 -0
  156. osn_selenium-1.1.0/osn_selenium/dev_tools/target/detach.py +54 -0
  157. osn_selenium-1.1.0/osn_selenium/dev_tools/target/discovery.py +112 -0
  158. osn_selenium-1.1.0/osn_selenium/dev_tools/target/events.py +120 -0
  159. osn_selenium-1.1.0/osn_selenium/dev_tools/target/fingerprint.py +126 -0
  160. osn_selenium-1.1.0/osn_selenium/dev_tools/target/lifecycle.py +184 -0
  161. osn_selenium-1.1.0/osn_selenium/dev_tools/target/logging.py +163 -0
  162. osn_selenium-1.1.0/osn_selenium/exceptions/base.py +9 -0
  163. osn_selenium-1.1.0/osn_selenium/exceptions/configuration.py +84 -0
  164. osn_selenium-1.1.0/osn_selenium/exceptions/dependencies.py +60 -0
  165. osn_selenium-1.1.0/osn_selenium/exceptions/devtools.py +114 -0
  166. osn_selenium-1.1.0/osn_selenium/exceptions/flags.py +45 -0
  167. osn_selenium-1.1.0/osn_selenium/exceptions/instance.py +92 -0
  168. osn_selenium-1.1.0/osn_selenium/exceptions/javascript.py +31 -0
  169. osn_selenium-1.1.0/osn_selenium/exceptions/logic.py +31 -0
  170. osn_selenium-1.1.0/osn_selenium/exceptions/path.py +77 -0
  171. osn_selenium-1.1.0/osn_selenium/exceptions/platform.py +33 -0
  172. osn_selenium-1.1.0/osn_selenium/exceptions/protocol.py +86 -0
  173. osn_selenium-1.1.0/osn_selenium/exceptions/webdriver.py +44 -0
  174. osn_selenium-1.1.0/osn_selenium/exceptions/window.py +63 -0
  175. osn_selenium-1.1.0/osn_selenium/executors/__init__.py +1 -0
  176. osn_selenium-1.1.0/osn_selenium/executors/sync/__init__.py +1 -0
  177. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/__init__.py +550 -0
  178. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  179. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/animation.py +50 -0
  180. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/audits.py +48 -0
  181. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/autofill.py +39 -0
  182. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/background_service.py +30 -0
  183. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  184. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/browser.py +131 -0
  185. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  186. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/cast.py +38 -0
  187. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/console.py +24 -0
  188. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/css.py +187 -0
  189. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/debugger.py +206 -0
  190. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/device_access.py +27 -0
  191. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  192. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/dom.py +310 -0
  193. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  194. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  195. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  196. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/emulation.py +270 -0
  197. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  198. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/extensions.py +39 -0
  199. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  200. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/fetch.py +96 -0
  201. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/file_system.py +18 -0
  202. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  203. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  204. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  205. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/input.py +233 -0
  206. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/inspector.py +21 -0
  207. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/io.py +33 -0
  208. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  209. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/log.py +35 -0
  210. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/media.py +21 -0
  211. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/memory.py +62 -0
  212. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/network.py +287 -0
  213. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/overlay.py +174 -0
  214. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/page.py +365 -0
  215. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/performance.py +33 -0
  216. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  217. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/preload.py +21 -0
  218. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/profiler.py +58 -0
  219. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/pwa.py +55 -0
  220. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/runtime.py +221 -0
  221. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/schema.py +23 -0
  222. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/security.py +30 -0
  223. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  224. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/storage.py +151 -0
  225. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/system_info.py +30 -0
  226. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/target.py +147 -0
  227. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/tethering.py +21 -0
  228. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/tracing.py +62 -0
  229. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  230. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  231. osn_selenium-1.1.0/osn_selenium/executors/sync/cdp.py +100 -0
  232. osn_selenium-1.1.0/osn_selenium/executors/sync/javascript.py +79 -0
  233. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/__init__.py +1 -0
  234. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  235. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  236. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  237. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  238. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  239. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  240. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  241. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  242. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  243. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  244. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  245. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  246. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  247. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  248. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  249. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  250. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  251. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  252. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  253. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  254. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  255. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  256. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  257. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  258. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  259. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  260. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  261. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  262. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  263. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  264. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  265. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  266. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  267. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  268. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  269. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  270. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  271. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  272. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  273. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  274. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  275. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  276. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  277. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  278. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  279. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  280. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  281. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  282. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  283. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  284. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  285. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  286. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  287. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  288. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/cdp.py +104 -0
  289. osn_selenium-1.1.0/osn_selenium/executors/trio_threads/javascript.py +90 -0
  290. osn_selenium-1.1.0/osn_selenium/executors/unified/__init__.py +1 -0
  291. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/__init__.py +1 -0
  292. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  293. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/animation.py +50 -0
  294. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/audits.py +45 -0
  295. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/autofill.py +41 -0
  296. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/background_service.py +24 -0
  297. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  298. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/browser.py +143 -0
  299. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  300. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/cast.py +32 -0
  301. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/console.py +18 -0
  302. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/css.py +237 -0
  303. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/debugger.py +243 -0
  304. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/device_access.py +21 -0
  305. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  306. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/dom.py +380 -0
  307. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  308. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  309. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  310. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/emulation.py +312 -0
  311. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  312. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/extensions.py +45 -0
  313. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  314. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/fetch.py +111 -0
  315. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/file_system.py +15 -0
  316. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  317. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  318. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  319. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/input.py +254 -0
  320. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/inspector.py +15 -0
  321. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/io.py +29 -0
  322. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  323. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/log.py +29 -0
  324. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/media.py +15 -0
  325. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/memory.py +59 -0
  326. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/network.py +323 -0
  327. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/overlay.py +209 -0
  328. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/page.py +410 -0
  329. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/performance.py +27 -0
  330. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  331. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/preload.py +15 -0
  332. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/profiler.py +55 -0
  333. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/pwa.py +55 -0
  334. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/runtime.py +245 -0
  335. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/schema.py +17 -0
  336. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/security.py +27 -0
  337. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  338. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/storage.py +178 -0
  339. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/system_info.py +24 -0
  340. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/target.py +165 -0
  341. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/tethering.py +15 -0
  342. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/tracing.py +62 -0
  343. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  344. osn_selenium-1.1.0/osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  345. osn_selenium-1.1.0/osn_selenium/executors/unified/javascript.py +104 -0
  346. osn_selenium-1.1.0/osn_selenium/flags/__init__.py +1 -0
  347. osn_selenium-1.1.0/osn_selenium/flags/_functions.py +45 -0
  348. osn_selenium-1.1.0/osn_selenium/flags/_typehints.py +34 -0
  349. osn_selenium-1.1.0/osn_selenium/flags/_validators.py +101 -0
  350. osn_selenium-0.0.0/osn_selenium/webdrivers/BaseDriver/flags.py → osn_selenium-1.1.0/osn_selenium/flags/base.py +159 -245
  351. osn_selenium-0.0.0/osn_selenium/webdrivers/Blink/flags.py → osn_selenium-1.1.0/osn_selenium/flags/blink.py +130 -374
  352. osn_selenium-1.1.0/osn_selenium/flags/chrome.py +259 -0
  353. osn_selenium-1.1.0/osn_selenium/flags/edge.py +259 -0
  354. osn_selenium-1.1.0/osn_selenium/flags/models/__init__.py +1 -0
  355. osn_selenium-1.1.0/osn_selenium/flags/models/base.py +130 -0
  356. osn_selenium-1.1.0/osn_selenium/flags/models/blink.py +263 -0
  357. osn_selenium-0.0.0/osn_selenium/webdrivers/Chrome/flags.py → osn_selenium-1.1.0/osn_selenium/flags/models/chrome.py +25 -75
  358. osn_selenium-0.0.0/osn_selenium/webdrivers/Edge/flags.py → osn_selenium-1.1.0/osn_selenium/flags/models/edge.py +25 -75
  359. osn_selenium-1.1.0/osn_selenium/flags/models/values.py +44 -0
  360. osn_selenium-0.0.0/osn_selenium/webdrivers/Yandex/flags.py → osn_selenium-1.1.0/osn_selenium/flags/models/yandex.py +26 -76
  361. osn_selenium-1.1.0/osn_selenium/flags/yandex.py +259 -0
  362. osn_selenium-1.1.0/osn_selenium/instances/__init__.py +1 -0
  363. osn_selenium-1.1.0/osn_selenium/instances/_functions.py +242 -0
  364. osn_selenium-1.1.0/osn_selenium/instances/_typehints.py +148 -0
  365. osn_selenium-1.1.0/osn_selenium/instances/_utils.py +143 -0
  366. osn_selenium-1.1.0/osn_selenium/instances/convert.py +287 -0
  367. osn_selenium-1.1.0/osn_selenium/instances/protocols.py +105 -0
  368. osn_selenium-1.1.0/osn_selenium/instances/sync/__init__.py +1 -0
  369. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/__init__.py +32 -0
  370. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/base.py +74 -0
  371. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/click.py +61 -0
  372. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  373. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  374. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  375. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  376. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  377. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/move.py +46 -0
  378. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  379. osn_selenium-1.1.0/osn_selenium/instances/sync/action_chains/utils.py +30 -0
  380. osn_selenium-1.1.0/osn_selenium/instances/sync/alert.py +69 -0
  381. osn_selenium-1.1.0/osn_selenium/instances/sync/browser.py +72 -0
  382. osn_selenium-1.1.0/osn_selenium/instances/sync/browsing_context.py +193 -0
  383. osn_selenium-1.1.0/osn_selenium/instances/sync/dialog.py +81 -0
  384. osn_selenium-1.1.0/osn_selenium/instances/sync/fedcm.py +92 -0
  385. osn_selenium-1.1.0/osn_selenium/instances/sync/mobile.py +75 -0
  386. osn_selenium-1.1.0/osn_selenium/instances/sync/network.py +90 -0
  387. osn_selenium-1.1.0/osn_selenium/instances/sync/permissions.py +80 -0
  388. osn_selenium-1.1.0/osn_selenium/instances/sync/script.py +77 -0
  389. osn_selenium-1.1.0/osn_selenium/instances/sync/shadow_root.py +113 -0
  390. osn_selenium-1.1.0/osn_selenium/instances/sync/storage.py +91 -0
  391. osn_selenium-1.1.0/osn_selenium/instances/sync/switch_to.py +92 -0
  392. osn_selenium-1.1.0/osn_selenium/instances/sync/web_driver_wait.py +83 -0
  393. osn_selenium-1.1.0/osn_selenium/instances/sync/web_element.py +179 -0
  394. osn_selenium-1.1.0/osn_selenium/instances/sync/web_extension.py +77 -0
  395. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/__init__.py +1 -0
  396. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
  397. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  398. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  399. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  400. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  401. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  402. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  403. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  404. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  405. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  406. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  407. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/alert.py +87 -0
  408. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/browser.py +90 -0
  409. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  410. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/dialog.py +99 -0
  411. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/fedcm.py +110 -0
  412. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/mobile.py +93 -0
  413. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/network.py +108 -0
  414. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/permissions.py +102 -0
  415. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/script.py +95 -0
  416. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/shadow_root.py +154 -0
  417. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/storage.py +109 -0
  418. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/switch_to.py +124 -0
  419. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  420. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/web_element.py +217 -0
  421. osn_selenium-1.1.0/osn_selenium/instances/trio_threads/web_extension.py +99 -0
  422. osn_selenium-1.1.0/osn_selenium/instances/unified/__init__.py +1 -0
  423. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  424. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/base.py +31 -0
  425. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/click.py +27 -0
  426. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  427. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  428. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  429. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  430. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  431. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/move.py +24 -0
  432. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  433. osn_selenium-1.1.0/osn_selenium/instances/unified/action_chains/utils.py +19 -0
  434. osn_selenium-1.1.0/osn_selenium/instances/unified/alert.py +29 -0
  435. osn_selenium-1.1.0/osn_selenium/instances/unified/browser.py +33 -0
  436. osn_selenium-1.1.0/osn_selenium/instances/unified/browsing_context.py +151 -0
  437. osn_selenium-1.1.0/osn_selenium/instances/unified/dialog.py +42 -0
  438. osn_selenium-1.1.0/osn_selenium/instances/unified/fedcm.py +48 -0
  439. osn_selenium-1.1.0/osn_selenium/instances/unified/mobile.py +36 -0
  440. osn_selenium-1.1.0/osn_selenium/instances/unified/network.py +50 -0
  441. osn_selenium-1.1.0/osn_selenium/instances/unified/permissions.py +43 -0
  442. osn_selenium-1.1.0/osn_selenium/instances/unified/script.py +38 -0
  443. osn_selenium-1.1.0/osn_selenium/instances/unified/shadow_root.py +46 -0
  444. osn_selenium-1.1.0/osn_selenium/instances/unified/storage.py +48 -0
  445. osn_selenium-1.1.0/osn_selenium/instances/unified/switch_to.py +49 -0
  446. osn_selenium-1.1.0/osn_selenium/instances/unified/web_driver_wait.py +45 -0
  447. osn_selenium-1.1.0/osn_selenium/instances/unified/web_element.py +145 -0
  448. osn_selenium-1.1.0/osn_selenium/instances/unified/web_extension.py +38 -0
  449. osn_selenium-1.1.0/osn_selenium/javascript/__init__.py +1 -0
  450. osn_selenium-1.1.0/osn_selenium/javascript/_functions.py +63 -0
  451. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/__init__.py +120 -0
  452. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  453. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  454. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  455. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  456. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/_functions.py +35 -0
  457. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  458. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  459. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  460. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  461. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  462. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  463. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  464. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  465. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  466. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  467. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  468. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  469. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  470. osn_selenium-1.1.0/osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  471. osn_selenium-1.1.0/osn_selenium/javascript/functions.py +44 -0
  472. osn_selenium-1.1.0/osn_selenium/javascript/models.py +35 -0
  473. osn_selenium-1.1.0/osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  474. osn_selenium-1.1.0/osn_selenium/models.py +94 -0
  475. osn_selenium-1.1.0/osn_selenium/trio_threads_mixin.py +159 -0
  476. osn_selenium-1.1.0/osn_selenium/webdrivers/__init__.py +1 -0
  477. osn_selenium-1.1.0/osn_selenium/webdrivers/_args_helpers.py +181 -0
  478. osn_selenium-1.1.0/osn_selenium/webdrivers/_bridges.py +57 -0
  479. osn_selenium-1.1.0/osn_selenium/webdrivers/_decorators.py +83 -0
  480. osn_selenium-1.1.0/osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  481. osn_selenium-1.1.0/osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  482. osn_selenium-1.1.0/osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  483. osn_selenium-1.1.0/osn_selenium/webdrivers/_typehints.py +10 -0
  484. osn_selenium-1.1.0/osn_selenium/webdrivers/protocols.py +50 -0
  485. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/__init__.py +1 -0
  486. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
  487. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/blink/base.py +140 -0
  488. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  489. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/blink/features.py +28 -0
  490. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  491. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  492. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/blink/network.py +28 -0
  493. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  494. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
  495. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/chrome/base.py +118 -0
  496. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  497. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  498. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/__init__.py +100 -0
  499. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/actions.py +59 -0
  500. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/auth.py +77 -0
  501. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/base.py +175 -0
  502. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/capture.py +37 -0
  503. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  504. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  505. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/element.py +42 -0
  506. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/file.py +40 -0
  507. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  508. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  509. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/script.py +53 -0
  510. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/settings.py +35 -0
  511. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/storage.py +48 -0
  512. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  513. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/core/window.py +99 -0
  514. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
  515. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/edge/base.py +114 -0
  516. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  517. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  518. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
  519. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/yandex/base.py +111 -0
  520. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  521. osn_selenium-1.1.0/osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  522. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  523. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
  524. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
  525. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  526. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  527. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  528. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  529. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  530. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  531. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
  532. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
  533. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  534. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  535. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
  536. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  537. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  538. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
  539. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  540. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  541. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  542. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  543. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  544. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  545. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  546. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  547. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  548. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  549. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  550. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  551. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
  552. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
  553. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  554. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  555. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
  556. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
  557. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  558. osn_selenium-1.1.0/osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  559. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/__init__.py +1 -0
  560. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  561. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/blink/base.py +135 -0
  562. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  563. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/blink/features.py +22 -0
  564. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  565. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  566. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/blink/network.py +22 -0
  567. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  568. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  569. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/chrome/base.py +58 -0
  570. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  571. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  572. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  573. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/actions.py +43 -0
  574. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/auth.py +70 -0
  575. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/base.py +139 -0
  576. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/capture.py +32 -0
  577. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/components.py +32 -0
  578. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  579. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/element.py +24 -0
  580. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/file.py +35 -0
  581. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  582. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  583. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/script.py +32 -0
  584. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/settings.py +44 -0
  585. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/storage.py +37 -0
  586. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  587. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/core/window.py +135 -0
  588. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  589. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/edge/base.py +56 -0
  590. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  591. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  592. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  593. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/yandex/base.py +58 -0
  594. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  595. osn_selenium-1.1.0/osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  596. osn_selenium-1.1.0/osn_selenium.egg-info/PKG-INFO +252 -0
  597. osn_selenium-1.1.0/osn_selenium.egg-info/SOURCES.txt +620 -0
  598. osn_selenium-1.1.0/osn_selenium.egg-info/requires.txt +8 -0
  599. {osn_selenium-0.0.0 → osn_selenium-1.1.0}/osn_selenium.egg-info/top_level.txt +1 -0
  600. osn_selenium-1.1.0/pyproject.toml +31 -0
  601. osn_selenium-1.1.0/requirements.txt +6 -0
  602. osn_selenium-0.0.0/MANIFEST.in +0 -4
  603. osn_selenium-0.0.0/PKG-INFO +0 -710
  604. osn_selenium-0.0.0/README.md +0 -689
  605. osn_selenium-0.0.0/description.txt +0 -1
  606. osn_selenium-0.0.0/osn_selenium/browsers_handler/__init__.py +0 -70
  607. osn_selenium-0.0.0/osn_selenium/captcha_workers/__init__.py +0 -26
  608. osn_selenium-0.0.0/osn_selenium/dev_tools/_types.py +0 -22
  609. osn_selenium-0.0.0/osn_selenium/dev_tools/domains/__init__.py +0 -63
  610. osn_selenium-0.0.0/osn_selenium/dev_tools/domains/abstract.py +0 -378
  611. osn_selenium-0.0.0/osn_selenium/dev_tools/domains/fetch.py +0 -1295
  612. osn_selenium-0.0.0/osn_selenium/dev_tools/errors.py +0 -89
  613. osn_selenium-0.0.0/osn_selenium/dev_tools/logger.py +0 -558
  614. osn_selenium-0.0.0/osn_selenium/dev_tools/manager.py +0 -1551
  615. osn_selenium-0.0.0/osn_selenium/dev_tools/utils.py +0 -509
  616. osn_selenium-0.0.0/osn_selenium/errors.py +0 -16
  617. osn_selenium-0.0.0/osn_selenium/types.py +0 -118
  618. osn_selenium-0.0.0/osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  619. osn_selenium-0.0.0/osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  620. osn_selenium-0.0.0/osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  621. osn_selenium-0.0.0/osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  622. osn_selenium-0.0.0/osn_selenium/webdrivers/Blink/protocols.py +0 -330
  623. osn_selenium-0.0.0/osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  624. osn_selenium-0.0.0/osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  625. osn_selenium-0.0.0/osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  626. osn_selenium-0.0.0/osn_selenium/webdrivers/Edge/protocols.py +0 -228
  627. osn_selenium-0.0.0/osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  628. osn_selenium-0.0.0/osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  629. osn_selenium-0.0.0/osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  630. osn_selenium-0.0.0/osn_selenium/webdrivers/_functions.py +0 -504
  631. osn_selenium-0.0.0/osn_selenium/webdrivers/types.py +0 -390
  632. osn_selenium-0.0.0/osn_selenium.egg-info/PKG-INFO +0 -710
  633. osn_selenium-0.0.0/osn_selenium.egg-info/SOURCES.txt +0 -63
  634. osn_selenium-0.0.0/osn_selenium.egg-info/requires.txt +0 -7
  635. osn_selenium-0.0.0/requirements.txt +0 -7
  636. osn_selenium-0.0.0/setup.py +0 -44
  637. {osn_selenium-0.0.0 → osn_selenium-1.1.0}/osn_selenium/__init__.py +0 -0
  638. {osn_selenium-0.0.0/osn_selenium/dev_tools → osn_selenium-1.1.0/osn_selenium/abstract}/__init__.py +0 -0
  639. {osn_selenium-0.0.0/osn_selenium/dev_tools/domains_default → osn_selenium-1.1.0/osn_selenium/abstract/executors}/__init__.py +0 -0
  640. {osn_selenium-0.0.0/osn_selenium/webdrivers/BaseDriver → osn_selenium-1.1.0/osn_selenium/abstract/instances}/__init__.py +0 -0
  641. {osn_selenium-0.0.0/osn_selenium/webdrivers/Blink → osn_selenium-1.1.0/osn_selenium/abstract/webdriver}/__init__.py +0 -0
  642. {osn_selenium-0.0.0/osn_selenium/webdrivers/Chrome → osn_selenium-1.1.0/osn_selenium/dev_tools}/__init__.py +0 -0
  643. {osn_selenium-0.0.0/osn_selenium/webdrivers/Edge → osn_selenium-1.1.0/osn_selenium/dev_tools/domains_default}/__init__.py +0 -0
  644. {osn_selenium-0.0.0/osn_selenium/webdrivers/Yandex → osn_selenium-1.1.0/osn_selenium/dev_tools/logger}/__init__.py +0 -0
  645. {osn_selenium-0.0.0/osn_selenium/webdrivers → osn_selenium-1.1.0/osn_selenium/exceptions}/__init__.py +0 -0
  646. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/check_element_in_viewport.js +0 -0
  647. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/get_document_scroll_size.js +0 -0
  648. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/get_element_css.js +0 -0
  649. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  650. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  651. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/get_viewport_position.js +0 -0
  652. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/get_viewport_rect.js +0 -0
  653. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/get_viewport_size.js +0 -0
  654. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/open_new_tab.js +0 -0
  655. {osn_selenium-0.0.0/osn_selenium/webdrivers/js_scripts → osn_selenium-1.1.0/osn_selenium/javascript/scripts}/stop_window_loading.js +0 -0
  656. {osn_selenium-0.0.0 → osn_selenium-1.1.0}/osn_selenium.egg-info/dependency_links.txt +0 -0
  657. {osn_selenium-0.0.0 → osn_selenium-1.1.0}/setup.cfg +0 -0
@@ -0,0 +1,252 @@
1
+ Metadata-Version: 2.4
2
+ Name: osn-selenium
3
+ Version: 1.1.0
4
+ Summary: An advanced, asynchronous wrapper for Selenium designed for fine-grained browser control. It leverages `trio` for async operations, provides human-like action chains for more natural automation, and offers deep integration with the Chrome DevTools Protocol (CDP) for advanced features like network interception. The library is structured to be extensible, with built-in support for Blink-based browsers like Chrome, Edge, and Yandex.
5
+ Author-email: oddshellnick <oddshellnick.programming@gmail.com>
6
+ Project-URL: Homepage, https://github.com/oddshellnick/osn-selenium
7
+ Project-URL: Issues, https://github.com/oddshellnick/osn-selenium/issues
8
+ Requires-Python: >=3.12
9
+ Description-Content-Type: text/markdown
10
+ Requires-Dist: trio<1.0.0,>=0.32.0
11
+ Requires-Dist: selenium<5.0.0,>=4.40.0
12
+ Requires-Dist: pydantic<3.0.0,>=2.0.0
13
+ Requires-Dist: trio-websocket<1.0.0,>=0.12.0
14
+ Requires-Dist: pywin32>=310; sys_platform == "win32"
15
+ Requires-Dist: osn-system-utils<0.1.0,>=0.0.4
16
+
17
+ # osn-selenium: Advanced Selenium Wrapper with Async Support and Fingerprinting Protection
18
+
19
+ osn-selenium is a robust wrapper around Selenium WebDriver designed for automation of Blink-based browsers (Chrome, Edge, Yandex). It extends standard Selenium capabilities by providing native asynchronous support via Trio, deep integration with the Chrome DevTools Protocol (CDP), sophisticated browser fingerprint spoofing, and human-like user interaction simulation.
20
+
21
+ For more detailed information, please visit the [wiki page](https://github.com/oddshellnick/osn-selenium/wiki).
22
+
23
+ ## Technologies
24
+
25
+ | Name | Badge | Description |
26
+ |------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
27
+ | Python | [![Python](https://img.shields.io/badge/Python%2DPython?style=flat&logo=python&color=%231f4361)](https://www.python.org/) | The core programming language used to build the library. |
28
+ | JavaScript | [![JavaScript](https://img.shields.io/badge/JavaScript%2DJavaScript?style=flat&logo=javascript&color=%23998805)](https://developer.mozilla.org/) | Used for browser-side logic injection, complex fingerprint spoofing, and advanced geometry/viewport calculations. |
29
+ | Selenium | [![Selenium](https://img.shields.io/badge/Selenium%2DSelenium?style=flat&logo=selenium&color=%23408631)](https://www.selenium.dev/) | The underlying browser automation framework that this library extends. |
30
+ | Trio | [![Trio](https://img.shields.io/badge/Trio%2DTrio?style=flat&color=%23d2e7fa)](https://trio.readthedocs.io/) | Used to provide an asynchronous, non-blocking interface for all WebDriver operations. |
31
+ | Pydantic | [![Pydantic](https://img.shields.io/badge/Pydantic%2DPydantic?style=flat&logo=pydantic&color=%23e92063)](https://docs.pydantic.dev/) | Used for data validation and managing complex configuration settings, especially for DevTools and browser flags. |
32
+ | psutil | [![psutil](https://img.shields.io/badge/psutil%2Dpsutil?style=flat&color=%230f90a1)](https://pypi.org/project/psutil/) | Used for robust process management and network connection tracking across different operating systems. |
33
+ | PyWin32 | [![PyWin32](https://img.shields.io/badge/PyWin32%2DPyWin32?style=flat&color=%23e09716)](https://pypi.org/project/pywin32/) | Employed for Windows-specific functionalities, such as discovering installed browsers and retrieving their versions from the registry and executables. |
34
+ | Subprocess | [![Subprocess](https://img.shields.io/badge/subprocess%2Dsubprocess?style=flat&color=%23a3c910)](https://docs.python.org/3/library/subprocess.html) | Used to execute the underlying system shell commands. |
35
+
36
+ ## Key Features
37
+
38
+ * **Dual Operation Modes:**
39
+ * **Synchronous:** Standard blocking execution similar to vanilla Selenium.
40
+ * **Asynchronous (Trio):** Fully async implementation allowing concurrent control of browser targets using the Trio library.
41
+ * **Deep CDP Integration:**
42
+ * Direct access to Chrome DevTools Protocol domains (Network, Page, DOM, Security, etc.).
43
+ * Event listening and handling (e.g., intercepting network requests, console logs).
44
+ * **Advanced Fingerprint Spoofing:**
45
+ * `FingerprintSettings` module to inject scripts detecting and modifying browser fingerprints.
46
+ * Spoofing capabilities for Canvas, WebGL, AudioContext, Fonts, Screen properties, and more.
47
+ * Configurable noise generation (static or random) to evade anti-bot detection.
48
+ * **Human-Like Interactions:**
49
+ * `HumanLikeActionChains` simulating natural mouse movements (Bezier curves, deviations) and typing speeds.
50
+ * Smooth scrolling algorithms.
51
+ * **Browser Lifecycle Management:**
52
+ * Auto-detection of installed browsers (Chrome, Edge, Yandex).
53
+ * Robust handling of browser processes, including zombie process cleanup and port management.
54
+ * Structured management of browser flags, arguments, and experimental options.
55
+ * **Enhanced Element Interaction:**
56
+ * Wrappers for WebElements, ShadowRoots, and Alerts with additional utility methods.
57
+ * Built-in JavaScript execution helpers for viewport checks and geometry retrieval.
58
+
59
+ ## Installation
60
+
61
+ 1. **Install library:**
62
+
63
+ * **With pip:**
64
+ ```bash
65
+ pip install osn-selenium
66
+ ```
67
+
68
+ **With pip (beta versions):**
69
+ ```bash
70
+ pip install -i https://test.pypi.org/simple/ osn_system_utils
71
+ ```
72
+
73
+ * **With git:**
74
+ ```bash
75
+ pip install git+https://github.com/oddshellnick/osn-selenium.git
76
+ ```
77
+ *(Ensure you have git installed)*
78
+
79
+ * **With git (beta versions):**
80
+ ```bash
81
+ pip install git+https://github.com/oddshellnick/osn-selenium.git@dev
82
+ ```
83
+ *(Ensure you have git installed)*
84
+
85
+ 2. **Install the required Python packages using pip:**
86
+
87
+ ```bash
88
+ pip install -r requirements.txt
89
+ ```
90
+
91
+ ## Usage
92
+
93
+ Here are some examples of how to use `osn-selenium`:
94
+
95
+ ### Synchronous Chrome with Human-Like Actions
96
+
97
+ ```python
98
+ from osn_selenium.webdrivers.sync.chrome import ChromeWebDriver
99
+ from osn_selenium.models import WindowRect
100
+ # Initialize driver with specific window size
101
+ driver = ChromeWebDriver(
102
+ webdriver_path="webdriver.exe",
103
+ window_rect=WindowRect(width=1280, height=720)
104
+ )
105
+
106
+ try:
107
+ driver.start_webdriver()
108
+ driver.get("https://google.com")
109
+
110
+ # Locate search bar
111
+ search_bar = driver.find_element(by="name", value="q")
112
+
113
+ # Use HumanLikeActionChains for natural typing
114
+ actions = driver.action_chains()
115
+ actions.hm_move_to_element(search_bar)
116
+ actions.click()
117
+ actions.hm_text_input("Selenium automation")
118
+ actions.perform()
119
+ finally:
120
+ driver.quit()
121
+ ```
122
+
123
+ ### Asynchronous (Trio) with Fingerprint Spoofing
124
+
125
+ ```python
126
+ import trio
127
+ from osn_selenium.webdrivers.trio_threads.chrome import ChromeWebDriver
128
+ from osn_selenium.dev_tools.settings import DevToolsSettings
129
+ from osn_selenium.javascript.fingerprint import FingerprintSettings
130
+
131
+ async def main():
132
+ # Configure fingerprint spoofing
133
+ fp_settings = FingerprintSettings(
134
+ optimize_events=True,
135
+ # Detect and spoof specific APIs
136
+ use_preset_registry=True
137
+ )
138
+
139
+ # Configure DevTools
140
+ dt_settings = DevToolsSettings(
141
+ fingerprint_settings=fp_settings
142
+ )
143
+
144
+ driver = ChromeWebDriver(
145
+ webdriver_path="webdriver.exe",
146
+ devtools_settings=dt_settings
147
+ )
148
+
149
+ try:
150
+ await driver.start_webdriver()
151
+
152
+ # Start DevTools session to inject spoofing scripts
153
+ async with driver.devtools:
154
+ await driver.get("https://browserleaks.com/canvas")
155
+ await trio.sleep(10) # Let the page load and scripts run
156
+ finally:
157
+ await driver.quit()
158
+
159
+ trio.run(main)
160
+ ```
161
+
162
+ ## Classes and Functions
163
+
164
+ ### WebDrivers (`osn_selenium.webdrivers`)
165
+
166
+ This package contains the main entry points for initializing browser automation. It is split into `sync` and `trio_threads` subpackages.
167
+
168
+ * `CoreWebDriver`
169
+ * Base class aggregating all mixins (Actions, Auth, Capture, CDP, Elements, File, Lifecycle, Navigation, Script, Settings, Storage, Timeouts, Window).
170
+ * `ChromeWebDriver` (Available in `sync` and `trio_threads`)
171
+ * `__init__(...)`: Initializes the Chrome driver with paths, flags managers, and timeout settings.
172
+ * `start_webdriver(...)`: Starts the browser process and the WebDriver session.
173
+ * `quit()`: Closes the browser and session.
174
+ * `EdgeWebDriver` (Available in `sync` and `trio_threads`)
175
+ * Specialized WebDriver for Microsoft Edge.
176
+ * `YandexWebDriver` (Available in `sync` and `trio_threads`)
177
+ * Specialized WebDriver for Yandex Browser.
178
+
179
+ ### Browser Flags (`osn_selenium.flags`)
180
+
181
+ Manages configuration for browser launch arguments and capabilities.
182
+
183
+ * `BrowserFlagsManager`
184
+ * `set_argument(argument, value)`: Sets a command-line argument.
185
+ * `set_experimental_option(option, value)`: Sets a WebDriver experimental option.
186
+ * `build_options_arguments(options)`: Applies arguments to the Selenium Options object.
187
+ * `ChromeFlagsManager` / `EdgeFlagsManager` / `YandexFlagsManager`
188
+ * Subclasses with specific default flags and binary detection logic for their respective browsers.
189
+
190
+ ### DevTools Protocol (`osn_selenium.dev_tools`)
191
+
192
+ Manages the connection to Chrome DevTools Protocol for low-level control.
193
+
194
+ * `DevTools`
195
+ * `run()`: Initializes the BiDi connection and starts event listeners.
196
+ * `stop(...)`: Cleans up resources and closes connections.
197
+ * `DevToolsTarget`
198
+ * Represents a specific target (tab/page) being controlled.
199
+ * `CDPExecutor` (Available in `executors.sync.cdp` and `executors.trio_threads.cdp`)
200
+ * `execute(cmd, cmd_args)`: Sends a raw CDP command.
201
+ * `network`: Access to `Network` domain commands (cookies, cache, interception).
202
+ * `page`: Access to `Page` domain commands (navigation, printing, screenshots).
203
+ * `dom`: Access to `DOM` domain commands.
204
+ * `emulation`: Access to `Emulation` domain (device metrics, user agent, sensors).
205
+ * *(Includes accessors for all mapped CDP domains like Fetch, Storage, Runtime, etc.)*
206
+
207
+ ### Instances Wrappers (`osn_selenium.instances`)
208
+
209
+ Wrappers around standard Selenium objects to provide enhanced functionality or async compatibility.
210
+
211
+ * `WebElement`
212
+ * `click()`: Clicks the element.
213
+ * `send_keys(...)`: Types into the element.
214
+ * `screenshot(filename)`: Takes a screenshot of the specific element.
215
+ * `find_element(...)`: Finds a child element.
216
+ * `ActionChains` / `HumanLikeActionChains`
217
+ * `hm_move_to_element(...)`: Moves mouse to element using human-like curves.
218
+ * `hm_text_input(...)`: Types text with random delays between keystrokes.
219
+ * `hm_scroll(...)`: Scrolls the page smoothly.
220
+ * `ShadowRoot`
221
+ * `find_element(...)`: Finds elements inside a Shadow DOM.
222
+
223
+ ### Javascript & Fingerprinting (`osn_selenium.javascript`)
224
+
225
+ Utilities for executing JS and managing browser fingerprints.
226
+
227
+ * `FingerprintSettings`
228
+ * `generate_js()`: Creates the injection script for fingerprint spoofing based on the registry configuration.
229
+ * `JSExecutor`
230
+ * `execute(script, ...)`: Executes raw JavaScript.
231
+ * `check_element_in_viewport(element)`: Returns True if element is visible in viewport.
232
+ * `get_element_rect_in_viewport(element)`: Returns element coordinates relative to viewport.
233
+
234
+ ## Notes
235
+
236
+ * **CDP Versioning and External Packages:**
237
+ This library supports a modular CDP (Chrome DevTools Protocol) architecture. Since standard Selenium distributions often deprecate or remove older protocol versions, we maintain a dedicated repository for all versions at [osn-selenium-cdp](https://github.com/oddshellnick/osn-selenium-cdp).
238
+ * **Manual Installation:** You can install specific CDP support by targeting the corresponding branch (e.g., `pip install git+https://github.com/oddshellnick/osn-selenium-cdp.git@v131`).
239
+ * **Structure Requirement:** If you choose to add or create CDP version packages manually, they **must strictly follow the directory structure** used in the `osn-selenium-cdp` repository. This ensures that the internal `MetaPathFinder` hook can correctly intercept and redirect imports from `selenium.webdriver.common.devtools`. Deviating from this structure will result in `CDPPackageError` or `ImportError`.
240
+ * **Concurrency Constraints in `trio_threads`:**
241
+ The `trio_threads` implementation is built using a unified `trio.Lock`. This means that every driver function and every associated instance (including `ActionChains`, `WebElement`, `Alert`, etc.) can execute only one operation at a time. Do not attempt to parallelize multiple operations (coroutines) within a single browser instance, as they will be queued sequentially. The primary purpose of this asynchronous implementation is to enable the simultaneous management of **multiple browser instances** within a single event loop, rather than concurrent interactions with one browser.
242
+ * **CDP Domains and Background Tasks:**
243
+ When configuring the domains for network interception, it is highly recommended to provide a `target_background_task` in your `DevToolsSettings`. This is especially critical for websites that dynamically create numerous targets (such as iframes or workers). Without a proper background task to handle these events, the browser's execution flow might hang or fail to process requests for nested targets properly.
244
+
245
+ ## Future Notes
246
+
247
+ * **Hybrid Composition Support:** We are preparing to expose all mixin-based functionality as distinct attributes within `CoreWebDriver` and `BlinkWebDriver` (e.g., `driver.navigation.get()`, `driver.storage.add_cookie()`). This will provide a cleaner, more modular alternative to the flat API while maintaining 100% backward compatibility with standard Selenium-like calls.
248
+ * **Firefox (GeckoDriver) Support:** Implementation of Gecko-specific flags and full BiDi/CDP integration for Firefox.
249
+ * **macOS Support:** Extending browser auto-detection and lifecycle management for macOS environments.
250
+ * **High-Level CDP Handlers:** Expanding the `dev_tools.domains` module to include simplified event-driven logic for `Network`, `Page`, and `Runtime` domains, similar to the current `Fetch` implementation.
251
+ * **Enhanced Human-Like Actions:** Adding more complex Bezier-based mouse movement patterns and advanced typing jitter to further decrease automation footprints.
252
+ * **Single-Instance Internal Concurrency Research:** While the current `trio_threads` implementation is optimized for managing multiple browser instances concurrently, we are researching ways to enable parallel command execution within a *single* browser instance. This long-term goal involves moving away from the global `trio.Lock` toward a more granular task-dispatching system (potentially using `trio.MemorySendChannel` or direct CDP interaction) to allow simultaneous operations without protocol desynchronization.
@@ -0,0 +1,236 @@
1
+ # osn-selenium: Advanced Selenium Wrapper with Async Support and Fingerprinting Protection
2
+
3
+ osn-selenium is a robust wrapper around Selenium WebDriver designed for automation of Blink-based browsers (Chrome, Edge, Yandex). It extends standard Selenium capabilities by providing native asynchronous support via Trio, deep integration with the Chrome DevTools Protocol (CDP), sophisticated browser fingerprint spoofing, and human-like user interaction simulation.
4
+
5
+ For more detailed information, please visit the [wiki page](https://github.com/oddshellnick/osn-selenium/wiki).
6
+
7
+ ## Technologies
8
+
9
+ | Name | Badge | Description |
10
+ |------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|
11
+ | Python | [![Python](https://img.shields.io/badge/Python%2DPython?style=flat&logo=python&color=%231f4361)](https://www.python.org/) | The core programming language used to build the library. |
12
+ | JavaScript | [![JavaScript](https://img.shields.io/badge/JavaScript%2DJavaScript?style=flat&logo=javascript&color=%23998805)](https://developer.mozilla.org/) | Used for browser-side logic injection, complex fingerprint spoofing, and advanced geometry/viewport calculations. |
13
+ | Selenium | [![Selenium](https://img.shields.io/badge/Selenium%2DSelenium?style=flat&logo=selenium&color=%23408631)](https://www.selenium.dev/) | The underlying browser automation framework that this library extends. |
14
+ | Trio | [![Trio](https://img.shields.io/badge/Trio%2DTrio?style=flat&color=%23d2e7fa)](https://trio.readthedocs.io/) | Used to provide an asynchronous, non-blocking interface for all WebDriver operations. |
15
+ | Pydantic | [![Pydantic](https://img.shields.io/badge/Pydantic%2DPydantic?style=flat&logo=pydantic&color=%23e92063)](https://docs.pydantic.dev/) | Used for data validation and managing complex configuration settings, especially for DevTools and browser flags. |
16
+ | psutil | [![psutil](https://img.shields.io/badge/psutil%2Dpsutil?style=flat&color=%230f90a1)](https://pypi.org/project/psutil/) | Used for robust process management and network connection tracking across different operating systems. |
17
+ | PyWin32 | [![PyWin32](https://img.shields.io/badge/PyWin32%2DPyWin32?style=flat&color=%23e09716)](https://pypi.org/project/pywin32/) | Employed for Windows-specific functionalities, such as discovering installed browsers and retrieving their versions from the registry and executables. |
18
+ | Subprocess | [![Subprocess](https://img.shields.io/badge/subprocess%2Dsubprocess?style=flat&color=%23a3c910)](https://docs.python.org/3/library/subprocess.html) | Used to execute the underlying system shell commands. |
19
+
20
+ ## Key Features
21
+
22
+ * **Dual Operation Modes:**
23
+ * **Synchronous:** Standard blocking execution similar to vanilla Selenium.
24
+ * **Asynchronous (Trio):** Fully async implementation allowing concurrent control of browser targets using the Trio library.
25
+ * **Deep CDP Integration:**
26
+ * Direct access to Chrome DevTools Protocol domains (Network, Page, DOM, Security, etc.).
27
+ * Event listening and handling (e.g., intercepting network requests, console logs).
28
+ * **Advanced Fingerprint Spoofing:**
29
+ * `FingerprintSettings` module to inject scripts detecting and modifying browser fingerprints.
30
+ * Spoofing capabilities for Canvas, WebGL, AudioContext, Fonts, Screen properties, and more.
31
+ * Configurable noise generation (static or random) to evade anti-bot detection.
32
+ * **Human-Like Interactions:**
33
+ * `HumanLikeActionChains` simulating natural mouse movements (Bezier curves, deviations) and typing speeds.
34
+ * Smooth scrolling algorithms.
35
+ * **Browser Lifecycle Management:**
36
+ * Auto-detection of installed browsers (Chrome, Edge, Yandex).
37
+ * Robust handling of browser processes, including zombie process cleanup and port management.
38
+ * Structured management of browser flags, arguments, and experimental options.
39
+ * **Enhanced Element Interaction:**
40
+ * Wrappers for WebElements, ShadowRoots, and Alerts with additional utility methods.
41
+ * Built-in JavaScript execution helpers for viewport checks and geometry retrieval.
42
+
43
+ ## Installation
44
+
45
+ 1. **Install library:**
46
+
47
+ * **With pip:**
48
+ ```bash
49
+ pip install osn-selenium
50
+ ```
51
+
52
+ **With pip (beta versions):**
53
+ ```bash
54
+ pip install -i https://test.pypi.org/simple/ osn_system_utils
55
+ ```
56
+
57
+ * **With git:**
58
+ ```bash
59
+ pip install git+https://github.com/oddshellnick/osn-selenium.git
60
+ ```
61
+ *(Ensure you have git installed)*
62
+
63
+ * **With git (beta versions):**
64
+ ```bash
65
+ pip install git+https://github.com/oddshellnick/osn-selenium.git@dev
66
+ ```
67
+ *(Ensure you have git installed)*
68
+
69
+ 2. **Install the required Python packages using pip:**
70
+
71
+ ```bash
72
+ pip install -r requirements.txt
73
+ ```
74
+
75
+ ## Usage
76
+
77
+ Here are some examples of how to use `osn-selenium`:
78
+
79
+ ### Synchronous Chrome with Human-Like Actions
80
+
81
+ ```python
82
+ from osn_selenium.webdrivers.sync.chrome import ChromeWebDriver
83
+ from osn_selenium.models import WindowRect
84
+ # Initialize driver with specific window size
85
+ driver = ChromeWebDriver(
86
+ webdriver_path="webdriver.exe",
87
+ window_rect=WindowRect(width=1280, height=720)
88
+ )
89
+
90
+ try:
91
+ driver.start_webdriver()
92
+ driver.get("https://google.com")
93
+
94
+ # Locate search bar
95
+ search_bar = driver.find_element(by="name", value="q")
96
+
97
+ # Use HumanLikeActionChains for natural typing
98
+ actions = driver.action_chains()
99
+ actions.hm_move_to_element(search_bar)
100
+ actions.click()
101
+ actions.hm_text_input("Selenium automation")
102
+ actions.perform()
103
+ finally:
104
+ driver.quit()
105
+ ```
106
+
107
+ ### Asynchronous (Trio) with Fingerprint Spoofing
108
+
109
+ ```python
110
+ import trio
111
+ from osn_selenium.webdrivers.trio_threads.chrome import ChromeWebDriver
112
+ from osn_selenium.dev_tools.settings import DevToolsSettings
113
+ from osn_selenium.javascript.fingerprint import FingerprintSettings
114
+
115
+ async def main():
116
+ # Configure fingerprint spoofing
117
+ fp_settings = FingerprintSettings(
118
+ optimize_events=True,
119
+ # Detect and spoof specific APIs
120
+ use_preset_registry=True
121
+ )
122
+
123
+ # Configure DevTools
124
+ dt_settings = DevToolsSettings(
125
+ fingerprint_settings=fp_settings
126
+ )
127
+
128
+ driver = ChromeWebDriver(
129
+ webdriver_path="webdriver.exe",
130
+ devtools_settings=dt_settings
131
+ )
132
+
133
+ try:
134
+ await driver.start_webdriver()
135
+
136
+ # Start DevTools session to inject spoofing scripts
137
+ async with driver.devtools:
138
+ await driver.get("https://browserleaks.com/canvas")
139
+ await trio.sleep(10) # Let the page load and scripts run
140
+ finally:
141
+ await driver.quit()
142
+
143
+ trio.run(main)
144
+ ```
145
+
146
+ ## Classes and Functions
147
+
148
+ ### WebDrivers (`osn_selenium.webdrivers`)
149
+
150
+ This package contains the main entry points for initializing browser automation. It is split into `sync` and `trio_threads` subpackages.
151
+
152
+ * `CoreWebDriver`
153
+ * Base class aggregating all mixins (Actions, Auth, Capture, CDP, Elements, File, Lifecycle, Navigation, Script, Settings, Storage, Timeouts, Window).
154
+ * `ChromeWebDriver` (Available in `sync` and `trio_threads`)
155
+ * `__init__(...)`: Initializes the Chrome driver with paths, flags managers, and timeout settings.
156
+ * `start_webdriver(...)`: Starts the browser process and the WebDriver session.
157
+ * `quit()`: Closes the browser and session.
158
+ * `EdgeWebDriver` (Available in `sync` and `trio_threads`)
159
+ * Specialized WebDriver for Microsoft Edge.
160
+ * `YandexWebDriver` (Available in `sync` and `trio_threads`)
161
+ * Specialized WebDriver for Yandex Browser.
162
+
163
+ ### Browser Flags (`osn_selenium.flags`)
164
+
165
+ Manages configuration for browser launch arguments and capabilities.
166
+
167
+ * `BrowserFlagsManager`
168
+ * `set_argument(argument, value)`: Sets a command-line argument.
169
+ * `set_experimental_option(option, value)`: Sets a WebDriver experimental option.
170
+ * `build_options_arguments(options)`: Applies arguments to the Selenium Options object.
171
+ * `ChromeFlagsManager` / `EdgeFlagsManager` / `YandexFlagsManager`
172
+ * Subclasses with specific default flags and binary detection logic for their respective browsers.
173
+
174
+ ### DevTools Protocol (`osn_selenium.dev_tools`)
175
+
176
+ Manages the connection to Chrome DevTools Protocol for low-level control.
177
+
178
+ * `DevTools`
179
+ * `run()`: Initializes the BiDi connection and starts event listeners.
180
+ * `stop(...)`: Cleans up resources and closes connections.
181
+ * `DevToolsTarget`
182
+ * Represents a specific target (tab/page) being controlled.
183
+ * `CDPExecutor` (Available in `executors.sync.cdp` and `executors.trio_threads.cdp`)
184
+ * `execute(cmd, cmd_args)`: Sends a raw CDP command.
185
+ * `network`: Access to `Network` domain commands (cookies, cache, interception).
186
+ * `page`: Access to `Page` domain commands (navigation, printing, screenshots).
187
+ * `dom`: Access to `DOM` domain commands.
188
+ * `emulation`: Access to `Emulation` domain (device metrics, user agent, sensors).
189
+ * *(Includes accessors for all mapped CDP domains like Fetch, Storage, Runtime, etc.)*
190
+
191
+ ### Instances Wrappers (`osn_selenium.instances`)
192
+
193
+ Wrappers around standard Selenium objects to provide enhanced functionality or async compatibility.
194
+
195
+ * `WebElement`
196
+ * `click()`: Clicks the element.
197
+ * `send_keys(...)`: Types into the element.
198
+ * `screenshot(filename)`: Takes a screenshot of the specific element.
199
+ * `find_element(...)`: Finds a child element.
200
+ * `ActionChains` / `HumanLikeActionChains`
201
+ * `hm_move_to_element(...)`: Moves mouse to element using human-like curves.
202
+ * `hm_text_input(...)`: Types text with random delays between keystrokes.
203
+ * `hm_scroll(...)`: Scrolls the page smoothly.
204
+ * `ShadowRoot`
205
+ * `find_element(...)`: Finds elements inside a Shadow DOM.
206
+
207
+ ### Javascript & Fingerprinting (`osn_selenium.javascript`)
208
+
209
+ Utilities for executing JS and managing browser fingerprints.
210
+
211
+ * `FingerprintSettings`
212
+ * `generate_js()`: Creates the injection script for fingerprint spoofing based on the registry configuration.
213
+ * `JSExecutor`
214
+ * `execute(script, ...)`: Executes raw JavaScript.
215
+ * `check_element_in_viewport(element)`: Returns True if element is visible in viewport.
216
+ * `get_element_rect_in_viewport(element)`: Returns element coordinates relative to viewport.
217
+
218
+ ## Notes
219
+
220
+ * **CDP Versioning and External Packages:**
221
+ This library supports a modular CDP (Chrome DevTools Protocol) architecture. Since standard Selenium distributions often deprecate or remove older protocol versions, we maintain a dedicated repository for all versions at [osn-selenium-cdp](https://github.com/oddshellnick/osn-selenium-cdp).
222
+ * **Manual Installation:** You can install specific CDP support by targeting the corresponding branch (e.g., `pip install git+https://github.com/oddshellnick/osn-selenium-cdp.git@v131`).
223
+ * **Structure Requirement:** If you choose to add or create CDP version packages manually, they **must strictly follow the directory structure** used in the `osn-selenium-cdp` repository. This ensures that the internal `MetaPathFinder` hook can correctly intercept and redirect imports from `selenium.webdriver.common.devtools`. Deviating from this structure will result in `CDPPackageError` or `ImportError`.
224
+ * **Concurrency Constraints in `trio_threads`:**
225
+ The `trio_threads` implementation is built using a unified `trio.Lock`. This means that every driver function and every associated instance (including `ActionChains`, `WebElement`, `Alert`, etc.) can execute only one operation at a time. Do not attempt to parallelize multiple operations (coroutines) within a single browser instance, as they will be queued sequentially. The primary purpose of this asynchronous implementation is to enable the simultaneous management of **multiple browser instances** within a single event loop, rather than concurrent interactions with one browser.
226
+ * **CDP Domains and Background Tasks:**
227
+ When configuring the domains for network interception, it is highly recommended to provide a `target_background_task` in your `DevToolsSettings`. This is especially critical for websites that dynamically create numerous targets (such as iframes or workers). Without a proper background task to handle these events, the browser's execution flow might hang or fail to process requests for nested targets properly.
228
+
229
+ ## Future Notes
230
+
231
+ * **Hybrid Composition Support:** We are preparing to expose all mixin-based functionality as distinct attributes within `CoreWebDriver` and `BlinkWebDriver` (e.g., `driver.navigation.get()`, `driver.storage.add_cookie()`). This will provide a cleaner, more modular alternative to the flat API while maintaining 100% backward compatibility with standard Selenium-like calls.
232
+ * **Firefox (GeckoDriver) Support:** Implementation of Gecko-specific flags and full BiDi/CDP integration for Firefox.
233
+ * **macOS Support:** Extending browser auto-detection and lifecycle management for macOS environments.
234
+ * **High-Level CDP Handlers:** Expanding the `dev_tools.domains` module to include simplified event-driven logic for `Network`, `Page`, and `Runtime` domains, similar to the current `Fetch` implementation.
235
+ * **Enhanced Human-Like Actions:** Adding more complex Bezier-based mouse movement patterns and advanced typing jitter to further decrease automation footprints.
236
+ * **Single-Instance Internal Concurrency Research:** While the current `trio_threads` implementation is optimized for managing multiple browser instances concurrently, we are researching ways to enable parallel command execution within a *single* browser instance. This long-term goal involves moving away from the global `trio.Lock` toward a more granular task-dispatching system (potentially using `trio.MemorySendChannel` or direct CDP interaction) to allow simultaneous operations without protocol desynchronization.
@@ -0,0 +1 @@
1
+ An advanced, asynchronous wrapper for Selenium designed for fine-grained browser control. It leverages `trio` for async operations, provides human-like action chains for more natural automation, and offers deep integration with the Chrome DevTools Protocol (CDP) for advanced features like network interception. The library is structured to be extensible, with built-in support for Blink-based browsers like Chrome, Edge, and Yandex.
@@ -0,0 +1,41 @@
1
+ from pydantic import (
2
+ BaseModel,
3
+ ConfigDict
4
+ )
5
+
6
+
7
+ __all__ = ["DictModel", "ExtraDictModel"]
8
+
9
+
10
+ class ExtraDictModel(BaseModel):
11
+ """
12
+ Base class for Pydantic models that allows extra fields.
13
+
14
+ This configuration allows the model to accept fields that are not
15
+ explicitly defined in the model's schema.
16
+ """
17
+
18
+ model_config = ConfigDict(
19
+ populate_by_name=True,
20
+ extra="allow",
21
+ use_enum_values=True,
22
+ str_strip_whitespace=True,
23
+ validate_assignment=True,
24
+ )
25
+
26
+
27
+ class DictModel(BaseModel):
28
+ """
29
+ Base class for Pydantic models with a predefined configuration.
30
+
31
+ This configuration enforces strict validation rules such as forbidding extra
32
+ fields and stripping whitespace from string inputs.
33
+ """
34
+
35
+ model_config = ConfigDict(
36
+ populate_by_name=True,
37
+ extra="forbid",
38
+ use_enum_values=True,
39
+ str_strip_whitespace=True,
40
+ validate_assignment=True,
41
+ )