osn-selenium 0.0.0__py3-none-any.whl → 1.0.0__py3-none-any.whl

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 (628) hide show
  1. osn_selenium/_functions.py +84 -0
  2. osn_selenium/_typehints.py +19 -0
  3. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  4. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  5. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  6. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  7. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  8. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  9. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  10. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  11. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  12. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  13. osn_selenium/abstract/executors/cdp/console.py +18 -0
  14. osn_selenium/abstract/executors/cdp/css.py +197 -0
  15. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  16. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  17. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  18. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  19. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  20. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  21. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  22. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  23. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  24. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  25. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  26. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  27. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  28. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  29. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  30. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  31. osn_selenium/abstract/executors/cdp/input.py +158 -0
  32. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  33. osn_selenium/abstract/executors/cdp/io.py +24 -0
  34. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  35. osn_selenium/abstract/executors/cdp/log.py +27 -0
  36. osn_selenium/abstract/executors/cdp/media.py +14 -0
  37. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  38. osn_selenium/abstract/executors/cdp/network.py +252 -0
  39. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  40. osn_selenium/abstract/executors/cdp/page.py +347 -0
  41. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  42. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  43. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  44. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  45. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  46. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  47. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  48. osn_selenium/abstract/executors/cdp/security.py +26 -0
  49. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  50. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  51. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  52. osn_selenium/abstract/executors/cdp/target.py +125 -0
  53. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  54. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  55. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  56. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  57. osn_selenium/abstract/executors/javascript.py +203 -0
  58. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  59. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  60. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  61. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  62. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  63. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  64. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  65. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  66. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  67. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  68. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  69. osn_selenium/abstract/instances/alert.py +67 -0
  70. osn_selenium/abstract/instances/browser.py +76 -0
  71. osn_selenium/abstract/instances/browsing_context.py +310 -0
  72. osn_selenium/abstract/instances/dialog.py +107 -0
  73. osn_selenium/abstract/instances/fedcm.py +133 -0
  74. osn_selenium/abstract/instances/mobile.py +79 -0
  75. osn_selenium/abstract/instances/network.py +100 -0
  76. osn_selenium/abstract/instances/permissions.py +52 -0
  77. osn_selenium/abstract/instances/script.py +109 -0
  78. osn_selenium/abstract/instances/shadow_root.py +81 -0
  79. osn_selenium/abstract/instances/storage.py +98 -0
  80. osn_selenium/abstract/instances/switch_to.py +104 -0
  81. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  82. osn_selenium/abstract/instances/web_element.py +395 -0
  83. osn_selenium/abstract/instances/web_extension.py +70 -0
  84. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  85. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  86. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  87. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  88. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  89. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  90. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  91. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  92. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  93. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  94. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  95. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  96. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  97. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  98. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  99. osn_selenium/abstract/webdriver/core/base.py +298 -0
  100. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  101. osn_selenium/abstract/webdriver/core/components.py +82 -0
  102. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  103. osn_selenium/abstract/webdriver/core/element.py +55 -0
  104. osn_selenium/abstract/webdriver/core/file.py +82 -0
  105. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  106. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  107. osn_selenium/abstract/webdriver/core/script.py +88 -0
  108. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  109. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  110. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  111. osn_selenium/abstract/webdriver/core/window.py +237 -0
  112. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  113. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  114. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  115. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  116. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  117. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  118. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  119. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  120. osn_selenium/base_mixin.py +122 -0
  121. osn_selenium/browsers_handler/__init__.py +47 -17
  122. osn_selenium/browsers_handler/_linux.py +226 -0
  123. osn_selenium/browsers_handler/_windows.py +21 -14
  124. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  125. osn_selenium/dev_tools/_decorators.py +140 -0
  126. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  127. osn_selenium/dev_tools/_functions.py +174 -0
  128. osn_selenium/dev_tools/_system_utils.py +35 -0
  129. osn_selenium/dev_tools/_typehints.py +32 -0
  130. osn_selenium/dev_tools/_validators.py +227 -0
  131. osn_selenium/dev_tools/_wrappers.py +95 -0
  132. osn_selenium/dev_tools/domains/__init__.py +7 -40
  133. osn_selenium/dev_tools/domains/abstract.py +98 -254
  134. osn_selenium/dev_tools/domains/fetch.py +229 -906
  135. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  136. osn_selenium/dev_tools/filters.py +40 -0
  137. osn_selenium/dev_tools/logger/main.py +226 -0
  138. osn_selenium/dev_tools/logger/models.py +232 -0
  139. osn_selenium/dev_tools/logger/target.py +258 -0
  140. osn_selenium/dev_tools/manager/__init__.py +16 -0
  141. osn_selenium/dev_tools/manager/base.py +147 -0
  142. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  143. osn_selenium/dev_tools/manager/logging.py +153 -0
  144. osn_selenium/dev_tools/manager/settings.py +89 -0
  145. osn_selenium/dev_tools/manager/targets.py +175 -0
  146. osn_selenium/dev_tools/models.py +49 -0
  147. osn_selenium/dev_tools/settings.py +135 -0
  148. osn_selenium/dev_tools/target/__init__.py +16 -0
  149. osn_selenium/dev_tools/target/base.py +438 -0
  150. osn_selenium/dev_tools/target/detach.py +54 -0
  151. osn_selenium/dev_tools/target/discovery.py +112 -0
  152. osn_selenium/dev_tools/target/events.py +120 -0
  153. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  154. osn_selenium/dev_tools/target/lifecycle.py +179 -0
  155. osn_selenium/dev_tools/target/logging.py +155 -0
  156. osn_selenium/exceptions/__init__.py +1 -0
  157. osn_selenium/exceptions/base.py +9 -0
  158. osn_selenium/exceptions/configuration.py +84 -0
  159. osn_selenium/exceptions/devtools.py +114 -0
  160. osn_selenium/exceptions/flags.py +45 -0
  161. osn_selenium/exceptions/instance.py +92 -0
  162. osn_selenium/exceptions/javascript.py +31 -0
  163. osn_selenium/exceptions/logic.py +31 -0
  164. osn_selenium/exceptions/path.py +77 -0
  165. osn_selenium/exceptions/platform.py +33 -0
  166. osn_selenium/exceptions/protocol.py +86 -0
  167. osn_selenium/exceptions/webdriver.py +44 -0
  168. osn_selenium/exceptions/window.py +63 -0
  169. osn_selenium/executors/__init__.py +1 -0
  170. osn_selenium/executors/sync/__init__.py +1 -0
  171. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  172. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  173. osn_selenium/executors/sync/cdp/animation.py +50 -0
  174. osn_selenium/executors/sync/cdp/audits.py +48 -0
  175. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  176. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  177. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  178. osn_selenium/executors/sync/cdp/browser.py +131 -0
  179. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  180. osn_selenium/executors/sync/cdp/cast.py +38 -0
  181. osn_selenium/executors/sync/cdp/console.py +24 -0
  182. osn_selenium/executors/sync/cdp/css.py +187 -0
  183. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  184. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  185. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  186. osn_selenium/executors/sync/cdp/dom.py +310 -0
  187. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  188. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  189. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  190. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  191. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  192. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  193. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  194. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  195. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  196. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  197. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  198. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  199. osn_selenium/executors/sync/cdp/input.py +233 -0
  200. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  201. osn_selenium/executors/sync/cdp/io.py +33 -0
  202. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  203. osn_selenium/executors/sync/cdp/log.py +35 -0
  204. osn_selenium/executors/sync/cdp/media.py +21 -0
  205. osn_selenium/executors/sync/cdp/memory.py +62 -0
  206. osn_selenium/executors/sync/cdp/network.py +287 -0
  207. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  208. osn_selenium/executors/sync/cdp/page.py +365 -0
  209. osn_selenium/executors/sync/cdp/performance.py +33 -0
  210. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  211. osn_selenium/executors/sync/cdp/preload.py +21 -0
  212. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  213. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  214. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  215. osn_selenium/executors/sync/cdp/schema.py +23 -0
  216. osn_selenium/executors/sync/cdp/security.py +30 -0
  217. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  218. osn_selenium/executors/sync/cdp/storage.py +151 -0
  219. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  220. osn_selenium/executors/sync/cdp/target.py +147 -0
  221. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  222. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  223. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  224. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  225. osn_selenium/executors/sync/javascript.py +79 -0
  226. osn_selenium/executors/trio_threads/__init__.py +1 -0
  227. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  228. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  229. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  230. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  231. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  232. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  233. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  234. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  235. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  236. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  237. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  238. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  239. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  240. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  241. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  242. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  243. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  244. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  245. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  246. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  247. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  248. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  249. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  250. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  251. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  252. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  253. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  254. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  255. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  256. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  257. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  258. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  259. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  260. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  261. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  262. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  263. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  264. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  265. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  266. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  267. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  268. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  269. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  270. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  271. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  272. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  273. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  274. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  275. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  276. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  277. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  278. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  279. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  280. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  281. osn_selenium/executors/trio_threads/javascript.py +90 -0
  282. osn_selenium/executors/unified/__init__.py +1 -0
  283. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  284. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  285. osn_selenium/executors/unified/cdp/animation.py +50 -0
  286. osn_selenium/executors/unified/cdp/audits.py +45 -0
  287. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  288. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  289. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  290. osn_selenium/executors/unified/cdp/browser.py +143 -0
  291. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  292. osn_selenium/executors/unified/cdp/cast.py +32 -0
  293. osn_selenium/executors/unified/cdp/console.py +18 -0
  294. osn_selenium/executors/unified/cdp/css.py +237 -0
  295. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  296. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  297. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  298. osn_selenium/executors/unified/cdp/dom.py +380 -0
  299. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  300. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  301. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  302. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  303. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  304. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  305. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  306. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  307. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  308. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  309. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  310. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  311. osn_selenium/executors/unified/cdp/input.py +254 -0
  312. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  313. osn_selenium/executors/unified/cdp/io.py +29 -0
  314. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  315. osn_selenium/executors/unified/cdp/log.py +29 -0
  316. osn_selenium/executors/unified/cdp/media.py +15 -0
  317. osn_selenium/executors/unified/cdp/memory.py +59 -0
  318. osn_selenium/executors/unified/cdp/network.py +323 -0
  319. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  320. osn_selenium/executors/unified/cdp/page.py +410 -0
  321. osn_selenium/executors/unified/cdp/performance.py +27 -0
  322. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  323. osn_selenium/executors/unified/cdp/preload.py +15 -0
  324. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  325. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  326. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  327. osn_selenium/executors/unified/cdp/schema.py +17 -0
  328. osn_selenium/executors/unified/cdp/security.py +27 -0
  329. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  330. osn_selenium/executors/unified/cdp/storage.py +178 -0
  331. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  332. osn_selenium/executors/unified/cdp/target.py +165 -0
  333. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  334. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  335. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  336. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  337. osn_selenium/executors/unified/javascript.py +108 -0
  338. osn_selenium/flags/__init__.py +1 -0
  339. osn_selenium/flags/_functions.py +45 -0
  340. osn_selenium/flags/_typehints.py +34 -0
  341. osn_selenium/flags/_validators.py +101 -0
  342. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +165 -243
  343. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +133 -371
  344. osn_selenium/flags/chrome.py +259 -0
  345. osn_selenium/flags/edge.py +259 -0
  346. osn_selenium/flags/models/__init__.py +1 -0
  347. osn_selenium/flags/models/base.py +130 -0
  348. osn_selenium/flags/models/blink.py +263 -0
  349. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  350. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  351. osn_selenium/flags/models/values.py +44 -0
  352. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  353. osn_selenium/flags/yandex.py +259 -0
  354. osn_selenium/instances/__init__.py +1 -0
  355. osn_selenium/instances/_functions.py +242 -0
  356. osn_selenium/instances/_typehints.py +148 -0
  357. osn_selenium/instances/_utils.py +143 -0
  358. osn_selenium/instances/convert.py +287 -0
  359. osn_selenium/instances/protocols.py +105 -0
  360. osn_selenium/instances/sync/__init__.py +1 -0
  361. osn_selenium/instances/sync/action_chains/__init__.py +26 -0
  362. osn_selenium/instances/sync/action_chains/base.py +74 -0
  363. osn_selenium/instances/sync/action_chains/click.py +61 -0
  364. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  365. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  366. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  367. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  368. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  369. osn_selenium/instances/sync/action_chains/move.py +46 -0
  370. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  371. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  372. osn_selenium/instances/sync/alert.py +69 -0
  373. osn_selenium/instances/sync/browser.py +72 -0
  374. osn_selenium/instances/sync/browsing_context.py +193 -0
  375. osn_selenium/instances/sync/dialog.py +81 -0
  376. osn_selenium/instances/sync/fedcm.py +92 -0
  377. osn_selenium/instances/sync/mobile.py +75 -0
  378. osn_selenium/instances/sync/network.py +90 -0
  379. osn_selenium/instances/sync/permissions.py +80 -0
  380. osn_selenium/instances/sync/script.py +77 -0
  381. osn_selenium/instances/sync/shadow_root.py +91 -0
  382. osn_selenium/instances/sync/storage.py +91 -0
  383. osn_selenium/instances/sync/switch_to.py +92 -0
  384. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  385. osn_selenium/instances/sync/web_element.py +179 -0
  386. osn_selenium/instances/sync/web_extension.py +77 -0
  387. osn_selenium/instances/trio_threads/__init__.py +1 -0
  388. osn_selenium/instances/trio_threads/action_chains/__init__.py +26 -0
  389. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  390. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  391. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  392. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  393. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  394. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  395. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  396. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  397. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  399. osn_selenium/instances/trio_threads/alert.py +87 -0
  400. osn_selenium/instances/trio_threads/browser.py +90 -0
  401. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  402. osn_selenium/instances/trio_threads/dialog.py +99 -0
  403. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  404. osn_selenium/instances/trio_threads/mobile.py +93 -0
  405. osn_selenium/instances/trio_threads/network.py +108 -0
  406. osn_selenium/instances/trio_threads/permissions.py +102 -0
  407. osn_selenium/instances/trio_threads/script.py +95 -0
  408. osn_selenium/instances/trio_threads/shadow_root.py +123 -0
  409. osn_selenium/instances/trio_threads/storage.py +109 -0
  410. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  411. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  412. osn_selenium/instances/trio_threads/web_element.py +217 -0
  413. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  414. osn_selenium/instances/unified/__init__.py +1 -0
  415. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  416. osn_selenium/instances/unified/action_chains/base.py +31 -0
  417. osn_selenium/instances/unified/action_chains/click.py +27 -0
  418. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  419. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  420. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  421. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  422. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  423. osn_selenium/instances/unified/action_chains/move.py +24 -0
  424. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  425. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  426. osn_selenium/instances/unified/alert.py +29 -0
  427. osn_selenium/instances/unified/browser.py +33 -0
  428. osn_selenium/instances/unified/browsing_context.py +151 -0
  429. osn_selenium/instances/unified/dialog.py +42 -0
  430. osn_selenium/instances/unified/fedcm.py +48 -0
  431. osn_selenium/instances/unified/mobile.py +36 -0
  432. osn_selenium/instances/unified/network.py +50 -0
  433. osn_selenium/instances/unified/permissions.py +43 -0
  434. osn_selenium/instances/unified/script.py +38 -0
  435. osn_selenium/instances/unified/shadow_root.py +46 -0
  436. osn_selenium/instances/unified/storage.py +48 -0
  437. osn_selenium/instances/unified/switch_to.py +49 -0
  438. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  439. osn_selenium/instances/unified/web_element.py +145 -0
  440. osn_selenium/instances/unified/web_extension.py +38 -0
  441. osn_selenium/javascript/__init__.py +1 -0
  442. osn_selenium/javascript/_functions.py +63 -0
  443. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  444. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  445. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  446. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  447. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  448. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  449. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  450. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  451. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  452. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  453. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  454. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  455. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  456. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  457. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  458. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  459. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  460. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  461. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  462. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  463. osn_selenium/javascript/functions.py +44 -0
  464. osn_selenium/javascript/models.py +35 -0
  465. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  466. osn_selenium/models.py +139 -0
  467. osn_selenium/webdrivers/_args_helpers.py +181 -0
  468. osn_selenium/webdrivers/_bridges.py +57 -0
  469. osn_selenium/webdrivers/_decorators.py +83 -0
  470. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  471. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  472. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  473. osn_selenium/webdrivers/_typehints.py +10 -0
  474. osn_selenium/webdrivers/protocols.py +50 -0
  475. osn_selenium/webdrivers/sync/__init__.py +1 -0
  476. osn_selenium/webdrivers/sync/blink/__init__.py +114 -0
  477. osn_selenium/webdrivers/sync/blink/base.py +128 -0
  478. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  479. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  480. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  481. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  482. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  483. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  484. osn_selenium/webdrivers/sync/chrome/__init__.py +67 -0
  485. osn_selenium/webdrivers/sync/chrome/base.py +106 -0
  486. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  487. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  488. osn_selenium/webdrivers/sync/core/__init__.py +91 -0
  489. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  490. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  491. osn_selenium/webdrivers/sync/core/base.py +167 -0
  492. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  493. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  494. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  495. osn_selenium/webdrivers/sync/core/element.py +42 -0
  496. osn_selenium/webdrivers/sync/core/file.py +40 -0
  497. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  498. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  499. osn_selenium/webdrivers/sync/core/script.py +53 -0
  500. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  501. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  502. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  503. osn_selenium/webdrivers/sync/core/window.py +99 -0
  504. osn_selenium/webdrivers/sync/edge/__init__.py +67 -0
  505. osn_selenium/webdrivers/sync/edge/base.py +102 -0
  506. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  507. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  508. osn_selenium/webdrivers/sync/yandex/__init__.py +67 -0
  509. osn_selenium/webdrivers/sync/yandex/base.py +99 -0
  510. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  511. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  512. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  513. osn_selenium/webdrivers/trio_threads/blink/__init__.py +124 -0
  514. osn_selenium/webdrivers/trio_threads/blink/base.py +133 -0
  515. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  516. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  517. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  518. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  519. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  520. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  521. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +81 -0
  522. osn_selenium/webdrivers/trio_threads/chrome/base.py +107 -0
  523. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  524. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  525. osn_selenium/webdrivers/trio_threads/core/__init__.py +109 -0
  526. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  527. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  528. osn_selenium/webdrivers/trio_threads/core/base.py +191 -0
  529. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  530. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  531. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  532. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  533. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  534. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  535. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  536. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  537. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  538. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  539. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  540. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  541. osn_selenium/webdrivers/trio_threads/edge/__init__.py +81 -0
  542. osn_selenium/webdrivers/trio_threads/edge/base.py +103 -0
  543. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  544. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  545. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +81 -0
  546. osn_selenium/webdrivers/trio_threads/yandex/base.py +100 -0
  547. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  548. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  549. osn_selenium/webdrivers/unified/__init__.py +1 -0
  550. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  551. osn_selenium/webdrivers/unified/blink/base.py +131 -0
  552. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  553. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  554. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  555. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  556. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  557. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  558. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  559. osn_selenium/webdrivers/unified/chrome/base.py +54 -0
  560. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  561. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  562. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  563. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  564. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  565. osn_selenium/webdrivers/unified/core/base.py +132 -0
  566. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  567. osn_selenium/webdrivers/unified/core/components.py +32 -0
  568. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  569. osn_selenium/webdrivers/unified/core/element.py +24 -0
  570. osn_selenium/webdrivers/unified/core/file.py +35 -0
  571. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  572. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  573. osn_selenium/webdrivers/unified/core/script.py +32 -0
  574. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  575. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  576. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  577. osn_selenium/webdrivers/unified/core/window.py +135 -0
  578. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  579. osn_selenium/webdrivers/unified/edge/base.py +52 -0
  580. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  581. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  582. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  583. osn_selenium/webdrivers/unified/yandex/base.py +54 -0
  584. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  585. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  586. osn_selenium-1.0.0.dist-info/METADATA +239 -0
  587. osn_selenium-1.0.0.dist-info/RECORD +608 -0
  588. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/WHEEL +1 -1
  589. osn_selenium/captcha_workers/__init__.py +0 -26
  590. osn_selenium/dev_tools/_types.py +0 -22
  591. osn_selenium/dev_tools/errors.py +0 -89
  592. osn_selenium/dev_tools/logger.py +0 -558
  593. osn_selenium/dev_tools/manager.py +0 -1551
  594. osn_selenium/dev_tools/utils.py +0 -509
  595. osn_selenium/errors.py +0 -16
  596. osn_selenium/types.py +0 -118
  597. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  598. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  599. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  600. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  601. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  602. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  603. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  604. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  605. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  606. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  607. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  608. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  609. osn_selenium/webdrivers/_functions.py +0 -504
  610. osn_selenium/webdrivers/types.py +0 -390
  611. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  612. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  613. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  614. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  615. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  616. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  617. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  618. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  619. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  620. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  621. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  622. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  623. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  624. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  628. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,181 @@
1
+ import trio
2
+ from typing import Any, Callable, Dict
3
+ from osn_selenium.instances.protocols import AnyInstanceWrapper
4
+ from osn_selenium.exceptions.protocol import (
5
+ ProtocolComplianceError
6
+ )
7
+ from osn_selenium.webdrivers._typehints import (
8
+ ANY_WEBDRIVER_PROTOCOL_TYPEHINT
9
+ )
10
+ from osn_selenium.instances.sync.web_element import (
11
+ WebElement as SyncWebElement
12
+ )
13
+ from selenium.webdriver.remote.webelement import (
14
+ WebElement as SeleniumWebElement
15
+ )
16
+ from osn_selenium.webdrivers.protocols import (
17
+ SyncWebDriver,
18
+ TrioThreadWebDriver
19
+ )
20
+ from osn_selenium.instances.trio_threads.web_element import (
21
+ WebElement as TrioThreadWebElement
22
+ )
23
+ from osn_selenium.instances.convert import (
24
+ get_sync_instance_wrapper,
25
+ get_trio_thread_instance_wrapper
26
+ )
27
+
28
+
29
+ __all__ = [
30
+ "build_cdp_kwargs",
31
+ "get_wrap_args_function",
32
+ "unwrap_args",
33
+ "wrap_sync_args",
34
+ "wrap_trio_thread_args"
35
+ ]
36
+
37
+
38
+ def unwrap_args(args: Any) -> Any:
39
+ """
40
+ Recursively unwraps objects by extracting the legacy Selenium object from wrappers.
41
+
42
+ Args:
43
+ args (Any): Data structure containing potential instance wrappers.
44
+
45
+ Returns:
46
+ Any: Data structure with raw Selenium objects.
47
+ """
48
+
49
+ if isinstance(args, list):
50
+ return [unwrap_args(arg) for arg in args]
51
+
52
+ if isinstance(args, set):
53
+ return {unwrap_args(arg) for arg in args}
54
+
55
+ if isinstance(args, tuple):
56
+ return (unwrap_args(arg) for arg in args)
57
+
58
+ if isinstance(args, dict):
59
+ return {unwrap_args(key): unwrap_args(value) for key, value in args.items()}
60
+
61
+ if isinstance(args, AnyInstanceWrapper):
62
+ return args.legacy
63
+
64
+ return args
65
+
66
+
67
+ def wrap_trio_thread_args(args: Any, lock: trio.Lock, limiter: trio.CapacityLimiter) -> Any:
68
+ """
69
+ Recursively wraps Selenium WebElements into TrioThreadWebElement instances.
70
+
71
+ Args:
72
+ args (Any): Data structure containing potential Selenium WebElements.
73
+ lock (trio.Lock): Trio lock for synchronization.
74
+ limiter (trio.CapacityLimiter): Trio capacity limiter.
75
+
76
+ Returns:
77
+ Any: Data structure with wrapped elements.
78
+ """
79
+
80
+ if isinstance(args, list):
81
+ return [wrap_trio_thread_args(arg, lock=lock, limiter=limiter) for arg in args]
82
+
83
+ if isinstance(args, set):
84
+ return {wrap_trio_thread_args(arg, lock=lock, limiter=limiter) for arg in args}
85
+
86
+ if isinstance(args, tuple):
87
+ return (wrap_trio_thread_args(arg, lock=lock, limiter=limiter) for arg in args)
88
+
89
+ if isinstance(args, dict):
90
+ return {
91
+ wrap_trio_thread_args(key, lock=lock, limiter=limiter): wrap_trio_thread_args(value, lock=lock, limiter=limiter)
92
+ for key, value in args.items()
93
+ }
94
+
95
+ if isinstance(args, SeleniumWebElement):
96
+ return get_trio_thread_instance_wrapper(
97
+ wrapper_class=TrioThreadWebElement,
98
+ legacy_object=args,
99
+ lock=lock,
100
+ limiter=limiter,
101
+ )
102
+
103
+ return args
104
+
105
+
106
+ def wrap_sync_args(args: Any) -> Any:
107
+ """
108
+ Recursively wraps Selenium WebElements into SyncWebElement instances.
109
+
110
+ Args:
111
+ args (Any): Data structure containing potential Selenium WebElements.
112
+
113
+ Returns:
114
+ Any: Data structure with wrapped elements.
115
+ """
116
+
117
+ if isinstance(args, list):
118
+ return [wrap_sync_args(arg) for arg in args]
119
+
120
+ if isinstance(args, set):
121
+ return {wrap_sync_args(arg) for arg in args}
122
+
123
+ if isinstance(args, tuple):
124
+ return (wrap_sync_args(arg) for arg in args)
125
+
126
+ if isinstance(args, dict):
127
+ return {wrap_sync_args(key): wrap_sync_args(value) for key, value in args.items()}
128
+
129
+ if isinstance(args, SeleniumWebElement):
130
+ return get_sync_instance_wrapper(wrapper_class=SyncWebElement, legacy_object=args)
131
+
132
+ return args
133
+
134
+
135
+ def get_wrap_args_function(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[[Any], Any]:
136
+ """
137
+ Determines the appropriate argument wrapping function based on the driver's architecture.
138
+
139
+ Args:
140
+ driver (ANY_WEBDRIVER_PROTOCOL): The driver instance.
141
+
142
+ Returns:
143
+ Callable[[Any], Any]: A function to wrap elements.
144
+
145
+ Raises:
146
+ ExpectedTypeError: If the driver instance type is not supported.
147
+ """
148
+
149
+ if isinstance(driver, SyncWebDriver) and driver._architecture_impl == "sync":
150
+ def wrapper(args: Any) -> Any:
151
+ return wrap_sync_args(args)
152
+
153
+ return wrapper
154
+
155
+ if isinstance(driver, TrioThreadWebDriver) and driver._architecture_impl == "trio_threads":
156
+ def wrapper(args: Any) -> Any:
157
+ return wrap_trio_thread_args(args, lock=driver.lock, limiter=driver.capacity_limiter)
158
+
159
+ return wrapper
160
+
161
+ raise ProtocolComplianceError(instance=driver, expected_protocols=(SyncWebDriver, TrioThreadWebDriver))
162
+
163
+
164
+ def build_cdp_kwargs(**kwargs: Any) -> Dict[str, Any]:
165
+ """
166
+ Builds a dictionary of keyword arguments for a CDP command, excluding None values.
167
+
168
+ Args:
169
+ **kwargs (Any): Keyword arguments to filter.
170
+
171
+ Returns:
172
+ Dict[str, Any]: A dictionary containing only the non-None keyword arguments.
173
+ """
174
+
175
+ dict_ = {}
176
+
177
+ for key, value in kwargs.items():
178
+ if value is not None:
179
+ dict_[key] = value
180
+
181
+ return dict_
@@ -0,0 +1,57 @@
1
+ from typing import Any, Callable, Dict
2
+ from osn_selenium.webdrivers._typehints import (
3
+ ANY_WEBDRIVER_PROTOCOL_TYPEHINT
4
+ )
5
+ from osn_selenium.webdrivers._args_helpers import (
6
+ get_wrap_args_function,
7
+ unwrap_args
8
+ )
9
+
10
+
11
+ __all__ = ["get_cdp_executor_bridge", "get_js_executor_bridge"]
12
+
13
+
14
+ def get_js_executor_bridge(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[[str, Any], Any]:
15
+ """
16
+ Creates a bridge function for executing JavaScript in the browser.
17
+
18
+ Args:
19
+ driver (ANY_WEBDRIVER_PROTOCOL): The driver instance.
20
+
21
+ Returns:
22
+ Callable[[str, Any], Any]: A wrapper for execute_script.
23
+ """
24
+
25
+ def wrapper(script: str, *args: Any) -> Any:
26
+ args = unwrap_args(args)
27
+
28
+ result = driver._driver_impl.execute_script(script, *args)
29
+
30
+ return wrapper_function(result)
31
+
32
+ wrapper_function = get_wrap_args_function(driver=driver)
33
+
34
+ return wrapper
35
+
36
+
37
+ def get_cdp_executor_bridge(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[[str, Dict[str, Any]], Any]:
38
+ """
39
+ Creates a bridge function for executing CDP commands in the browser.
40
+
41
+ Args:
42
+ driver (ANY_WEBDRIVER_PROTOCOL): The driver instance.
43
+
44
+ Returns:
45
+ Callable[[str, Dict[str, Any]], Any]: A wrapper for execute_cdp_cmd.
46
+ """
47
+
48
+ def wrapper(cmd: str, cmd_args: Dict[str, Any]) -> Any:
49
+ cmd_args = unwrap_args(cmd_args)
50
+
51
+ result = driver._driver_impl.execute_cdp_cmd(cmd, cmd_args)
52
+
53
+ return wrapper_function(result)
54
+
55
+ wrapper_function = get_wrap_args_function(driver=driver)
56
+
57
+ return wrapper
@@ -0,0 +1,83 @@
1
+ import inspect
2
+ import functools
3
+ from typing import (
4
+ Any,
5
+ Callable,
6
+ ParamSpec,
7
+ TypeVar
8
+ )
9
+ from osn_selenium.exceptions.instance import NotExpectedTypeError
10
+
11
+
12
+ __all__ = ["requires_driver"]
13
+
14
+ _METHOD_INPUT = ParamSpec("_METHOD_INPUT")
15
+ _METHOD_OUTPUT = TypeVar("_METHOD_OUTPUT")
16
+ _METHOD = TypeVar("_METHOD", bound=Callable[..., Any])
17
+
18
+
19
+ def requires_driver(func: _METHOD) -> _METHOD:
20
+ """
21
+ A decorator that ensures a '_ensure_driver' method is called before
22
+ executing the decorated method.
23
+
24
+ This decorator handles both synchronous and asynchronous methods,
25
+ calling '_ensure_driver' on the instance (self) before delegating
26
+ to the original method.
27
+
28
+ Args:
29
+ func (_METHOD): The method to decorate.
30
+
31
+ Returns:
32
+ _METHOD: The wrapped synchronous or asynchronous method.
33
+ """
34
+
35
+ @functools.wraps(func)
36
+ def sync_wrapper(
37
+ self: object,
38
+ *args: _METHOD_INPUT.args,
39
+ **kwargs: _METHOD_INPUT.kwargs
40
+ ) -> _METHOD_OUTPUT:
41
+ """
42
+ Synchronous wrapper for methods decorated with requires_driver.
43
+
44
+ Args:
45
+ self (object): The instance on which the method is called.
46
+ *args (_METHOD_INPUT.args): Positional arguments for the wrapped method.
47
+ **kwargs (_METHOD_INPUT.kwargs): Keyword arguments for the wrapped method.
48
+
49
+ Returns:
50
+ _METHOD_OUTPUT: The result of the wrapped method.
51
+ """
52
+
53
+ getattr(self, "_ensure_driver")()
54
+ return func(self, *args, **kwargs)
55
+
56
+ @functools.wraps(func)
57
+ async def async_wrapper(
58
+ self: object,
59
+ *args: _METHOD_INPUT.args,
60
+ **kwargs: _METHOD_INPUT.kwargs
61
+ ) -> _METHOD_OUTPUT:
62
+ """
63
+ Asynchronous wrapper for methods decorated with requires_driver.
64
+
65
+ Args:
66
+ self (object): The instance on which the method is called.
67
+ *args (_METHOD_INPUT.args): Positional arguments for the wrapped method.
68
+ **kwargs (_METHOD_INPUT.kwargs): Keyword arguments for the wrapped method.
69
+
70
+ Returns:
71
+ _METHOD_OUTPUT: The result of the wrapped method.
72
+ """
73
+
74
+ getattr(self, "_ensure_driver")()
75
+ return await func(self, *args, **kwargs)
76
+
77
+ if inspect.iscoroutinefunction(func):
78
+ return async_wrapper
79
+
80
+ if inspect.isfunction(func):
81
+ return sync_wrapper
82
+
83
+ raise NotExpectedTypeError(expected_type=["coroutine function", "function"], received_instance=func)
@@ -0,0 +1,113 @@
1
+ import re
2
+ import psutil
3
+ from typing import Iterator, Optional
4
+ from osn_selenium._functions import validate_path
5
+ from osn_selenium._typehints import PATH_TYPEHINT
6
+ from osn_system_utils.api._utils import LOCALHOST_IPS
7
+ from osn_selenium.webdrivers._executable_tables.models import ExecutablesTableRow
8
+
9
+
10
+ __all__ = [
11
+ "find_browser_previous_session",
12
+ "get_active_executables_table",
13
+ "get_found_profile_dir"
14
+ ]
15
+
16
+
17
+ def get_found_profile_dir(row: ExecutablesTableRow, profile_dir_command: str) -> Optional[str]:
18
+ """
19
+ Extracts the profile directory path from the command line of a running process.
20
+
21
+ Args:
22
+ row (ExecutablesTableRow): The data row containing the PID of the process.
23
+ profile_dir_command (str): The command line pattern to search for, using `{value}` as placeholder.
24
+
25
+ Returns:
26
+ Optional[str]: The extracted profile directory path if found, otherwise None.
27
+ """
28
+
29
+ try:
30
+ proc = psutil.Process(row.pid)
31
+ cmdline_args = proc.cmdline()
32
+
33
+ found_command_line = " ".join(cmdline_args)
34
+ pattern = profile_dir_command.format(value="(.*?)")
35
+
36
+ found_profile_dir = re.search(pattern=pattern, string=found_command_line)
37
+
38
+ if found_profile_dir is not None:
39
+ result = found_profile_dir.group(1)
40
+
41
+ return result
42
+ except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
43
+ return None
44
+
45
+ return None
46
+
47
+
48
+ def get_active_executables_table(browser_exe: PATH_TYPEHINT) -> Iterator[ExecutablesTableRow]:
49
+ """
50
+ Iterates through active network connections to find processes matching the browser executable.
51
+
52
+ Args:
53
+ browser_exe (PATH_TYPEHINT): Path or name of the browser executable.
54
+
55
+ Returns:
56
+ Iterator[ExecutablesTableRow]: An iterator of matching process information rows.
57
+ """
58
+
59
+ target_name = validate_path(path=browser_exe).name
60
+
61
+ for conn in psutil.net_connections(kind="inet"):
62
+ if (
63
+ conn.status != psutil.CONN_LISTEN
64
+ or not conn.laddr
65
+ or conn.laddr.ip not in LOCALHOST_IPS
66
+ or not conn.pid
67
+ ):
68
+ continue
69
+
70
+ try:
71
+ process = psutil.Process(conn.pid)
72
+ process_name = process.name()
73
+
74
+ if process_name.lower() == target_name.lower():
75
+ yield ExecutablesTableRow(
76
+ executable=process_name,
77
+ address=f"{conn.laddr.ip}:{conn.laddr.port}",
78
+ pid=conn.pid,
79
+ )
80
+ except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
81
+ continue
82
+
83
+
84
+ def find_browser_previous_session(
85
+ browser_exe: PATH_TYPEHINT,
86
+ profile_dir_command: str,
87
+ profile_dir: Optional[str]
88
+ ) -> Optional[int]:
89
+ """
90
+ Finds the port number of a previously opened browser session, if it exists.
91
+
92
+ This function checks for an existing browser session by examining network connections.
93
+ It searches for listening connections associated with the given browser executable and profile directory.
94
+
95
+ Args:
96
+ browser_exe (PATH_TYPEHINT): Path to the browser executable or just the executable name.
97
+ profile_dir_command (str): Command line pattern to find the profile directory argument.
98
+ Should use `{value}` as a placeholder for the directory path.
99
+ profile_dir (Optional[str]): The expected profile directory path to match against.
100
+
101
+ Returns:
102
+ Optional[int]: The port number of the previous session if found and matched, otherwise None.
103
+ """
104
+
105
+ ip_pattern = re.compile(r"127\.0\.0\.1:(\d+)")
106
+
107
+ for row in get_active_executables_table(browser_exe=browser_exe):
108
+ found_profile_dir = get_found_profile_dir(row=row, profile_dir_command=profile_dir_command)
109
+
110
+ if found_profile_dir == profile_dir:
111
+ return int(re.search(pattern=ip_pattern, string=row.address).group(1))
112
+
113
+ return None
@@ -0,0 +1,19 @@
1
+ from osn_selenium.models import DictModel
2
+
3
+
4
+ __all__ = ["ExecutablesTableRow"]
5
+
6
+
7
+ class ExecutablesTableRow(DictModel):
8
+ """
9
+ Represents a row in the executables table containing process information.
10
+
11
+ Attributes:
12
+ executable (str): The name of the executable file.
13
+ address (str): The network address (IP:Port) the process is listening on.
14
+ pid (int): The process identifier.
15
+ """
16
+
17
+ executable: str
18
+ address: str
19
+ pid: int
@@ -0,0 +1,10 @@
1
+ from typing import Union
2
+ from osn_selenium.webdrivers.protocols import (
3
+ SyncWebDriver,
4
+ TrioThreadWebDriver
5
+ )
6
+
7
+
8
+ __all__ = ["ANY_WEBDRIVER_PROTOCOL_TYPEHINT"]
9
+
10
+ ANY_WEBDRIVER_PROTOCOL_TYPEHINT = Union[SyncWebDriver, TrioThreadWebDriver]
@@ -0,0 +1,50 @@
1
+ import trio
2
+ from typing import (
3
+ Optional,
4
+ Protocol,
5
+ runtime_checkable
6
+ )
7
+ from selenium.webdriver.remote.webdriver import (
8
+ WebDriver as legacyWebDriver
9
+ )
10
+
11
+
12
+ __all__ = ["SyncWebDriver", "TrioThreadWebDriver"]
13
+
14
+
15
+ @runtime_checkable
16
+ class TrioThreadWebDriver(Protocol):
17
+ """
18
+ Protocol for a WebDriver that operates within a Trio thread pool.
19
+ """
20
+
21
+ @property
22
+ def architecture(self) -> str:
23
+ ...
24
+
25
+ @property
26
+ def capacity_limiter(self) -> trio.CapacityLimiter:
27
+ ...
28
+
29
+ @property
30
+ def driver(self) -> Optional[legacyWebDriver]:
31
+ ...
32
+
33
+ @property
34
+ def lock(self) -> trio.Lock:
35
+ ...
36
+
37
+
38
+ @runtime_checkable
39
+ class SyncWebDriver(Protocol):
40
+ """
41
+ Protocol for a synchronous WebDriver.
42
+ """
43
+
44
+ @property
45
+ def architecture(self) -> str:
46
+ ...
47
+
48
+ @property
49
+ def driver(self) -> Optional[legacyWebDriver]:
50
+ ...
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,114 @@
1
+ from typing import Optional, Type
2
+ from osn_selenium.models import WindowRect
3
+ from osn_selenium._typehints import PATH_TYPEHINT
4
+ from osn_selenium.flags.blink import BlinkFlagsManager
5
+ from osn_selenium.flags.models.blink import BlinkFlags
6
+ from osn_selenium.webdrivers.sync.core import CoreWebDriver
7
+ from osn_selenium.webdrivers.sync.blink.base import BlinkBaseMixin
8
+ from osn_selenium.webdrivers.sync.blink.casting import BlinkCastingMixin
9
+ from osn_selenium.webdrivers.sync.blink.logging import BlinkLoggingMixin
10
+ from osn_selenium.webdrivers.sync.blink.network import BlinkNetworkMixin
11
+ from osn_selenium.webdrivers.sync.blink.features import BlinkFeaturesMixin
12
+ from osn_selenium.webdrivers.sync.blink.settings import BlinkSettingsMixin
13
+ from osn_selenium.webdrivers.sync.blink.lifecycle import BlinkLifecycleMixin
14
+ from osn_selenium.abstract.webdriver.blink import (
15
+ AbstractBlinkWebDriver
16
+ )
17
+
18
+
19
+ __all__ = ["BlinkWebDriver"]
20
+
21
+
22
+ class BlinkWebDriver(
23
+ BlinkBaseMixin,
24
+ BlinkCastingMixin,
25
+ BlinkFeaturesMixin,
26
+ BlinkLifecycleMixin,
27
+ BlinkLoggingMixin,
28
+ BlinkNetworkMixin,
29
+ BlinkSettingsMixin,
30
+ CoreWebDriver,
31
+ AbstractBlinkWebDriver
32
+ ):
33
+ """
34
+ Concrete Blink WebDriver implementation combining all functional mixins.
35
+
36
+ This class aggregates lifecycle management, element interaction, navigation,
37
+ and browser-specific features into a single usable driver instance.
38
+ """
39
+
40
+ def __init__(
41
+ self,
42
+ browser_exe: Optional[PATH_TYPEHINT],
43
+ browser_name_in_system: str,
44
+ webdriver_path: str,
45
+ use_browser_exe: bool = True,
46
+ flags_manager_type: Type[BlinkFlagsManager] = BlinkFlagsManager,
47
+ flags: Optional[BlinkFlags] = None,
48
+ start_page_url: str = "",
49
+ implicitly_wait: int = 5,
50
+ page_load_timeout: int = 5,
51
+ script_timeout: int = 5,
52
+ window_rect: Optional[WindowRect] = None,
53
+ ):
54
+ """
55
+ Initializes the BlinkWebDriver instance.
56
+
57
+ This constructor sets up the necessary components for controlling a Blink-based browser,
58
+ including paths, flag managers, timeouts, and integration with DevTools and Trio.
59
+ It also initializes properties related to console encoding and IP pattern matching
60
+ for managing browser processes.
61
+
62
+ Args:
63
+ browser_exe (Optional[PATH_TYPEHINT]): The path to the browser executable
64
+ (e.g., `chrome.exe` or `msedge.exe`). If None, the browser executable will not be
65
+ managed directly by this class (e.g., for remote WebDriver connections where the
66
+ browser is already running).
67
+ browser_name_in_system (str): The common name of the browser executable in the system
68
+ (e.g., "Chrome", "Edge"). Used to auto-detect `browser_exe` if `use_browser_exe` is True.
69
+ webdriver_path (str): The file path to the WebDriver executable (e.g., `chromedriver.exe`).
70
+ use_browser_exe (bool): If True, the browser executable path will be
71
+ automatically determined based on `browser_name_in_system` if `browser_exe`
72
+ is not explicitly provided. If False, `browser_exe` must be None.
73
+ Defaults to True.
74
+ flags_manager_type (Type[BlinkFlagsManager]): The type of flags manager to use.
75
+ Defaults to `BlinkFlagsManager`, which is suitable for Chrome/Edge.
76
+ flags (Optional[BlinkFlags]): Initial browser flags or options
77
+ specific to Blink-based browsers. Can be a `BlinkFlags` object or a generic mapping.
78
+ Defaults to None.
79
+ start_page_url (str): The URL that the browser will attempt to navigate to
80
+ immediately after starting. Defaults to an empty string.
81
+ implicitly_wait (int): The default implicit wait time in seconds for element searches.
82
+ Defaults to 5.
83
+ page_load_timeout (int): The default page load timeout in seconds. Defaults to 5.
84
+ script_timeout (int): The default asynchronous script timeout in seconds. Defaults to 5.
85
+ window_rect (Optional[WindowRect]): The initial window size and position. If None,
86
+ the browser's default window size will be used. Defaults to None.
87
+ """
88
+
89
+ CoreWebDriver.__init__(
90
+ self,
91
+ webdriver_path=webdriver_path,
92
+ flags_manager_type=flags_manager_type,
93
+ flags=flags,
94
+ implicitly_wait=implicitly_wait,
95
+ page_load_timeout=page_load_timeout,
96
+ script_timeout=script_timeout,
97
+ window_rect=window_rect,
98
+ )
99
+
100
+ BlinkBaseMixin.__init__(
101
+ self,
102
+ browser_exe=browser_exe,
103
+ browser_name_in_system=browser_name_in_system,
104
+ use_browser_exe=use_browser_exe,
105
+ webdriver_path=webdriver_path,
106
+ architecture="sync",
107
+ flags_manager_type=flags_manager_type,
108
+ flags=flags,
109
+ start_page_url=start_page_url,
110
+ implicitly_wait=implicitly_wait,
111
+ page_load_timeout=page_load_timeout,
112
+ script_timeout=script_timeout,
113
+ window_rect=window_rect,
114
+ )