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,120 @@
1
+ import trio
2
+ from typing import List, TYPE_CHECKING
3
+ from osn_selenium.exceptions.devtools import CDPEndExceptions
4
+ from osn_selenium.dev_tools.target.logging import LoggingMixin
5
+
6
+
7
+ __all__ = ["EventHandlersMixin"]
8
+
9
+ if TYPE_CHECKING:
10
+ from osn_selenium.dev_tools.domains.abstract import (AbstractDomainSettings, AbstractEventSettings)
11
+
12
+
13
+ class EventHandlersMixin(LoggingMixin):
14
+ """
15
+ Mixin for handling generic DevTools domain events.
16
+ """
17
+
18
+ async def _run_event_handler(
19
+ self,
20
+ domain_handler_ready_event: trio.Event,
21
+ event_config: "AbstractEventSettings"
22
+ ):
23
+ """
24
+ Runs a specific event handler listener loop.
25
+
26
+ Listens for events of the type specified in `event_config` and invokes the configured `handle_function`.
27
+
28
+ Args:
29
+ domain_handler_ready_event (trio.Event): Event to signal that this specific handler is ready.
30
+ event_config (AbstractEventSettings): Configuration for the specific event.
31
+
32
+ Raises:
33
+ CDPEndExceptions: If connection issues occur.
34
+ BaseException: If initialization fails.
35
+ """
36
+
37
+ await self.log_cdp_step(message=f"Event handler '{event_config.class_to_use_path}' starting.")
38
+
39
+ try:
40
+ receiver_channel: trio.MemoryReceiveChannel = self.cdp_session.listen(
41
+ self.devtools_package.get(event_config.class_to_use_path),
42
+ buffer_size=event_config.listen_buffer_size
43
+ )
44
+ channel_stopped_event = trio.Event()
45
+
46
+ self._events_receive_channels[event_config.class_to_use_path] = (receiver_channel, channel_stopped_event)
47
+
48
+ domain_handler_ready_event.set()
49
+ handler = event_config.handle_function
50
+ except CDPEndExceptions as error:
51
+ raise error
52
+ except BaseException as error:
53
+ await self.log_cdp_error(error=error)
54
+ raise error
55
+
56
+ await self.log_cdp_step(message=f"Event handler '{event_config.class_to_use_path}' started.")
57
+
58
+ keep_alive = True
59
+ while keep_alive:
60
+ try:
61
+ event = await receiver_channel.receive()
62
+ self._nursery_object.start_soon(handler, self, event_config, event)
63
+ except* CDPEndExceptions:
64
+ keep_alive = False
65
+ except* BaseException as error:
66
+ await self.log_cdp_error(error=error)
67
+ keep_alive = False
68
+
69
+ channel_stopped_event.set()
70
+
71
+ async def _run_events_handlers(
72
+ self,
73
+ events_ready_event: trio.Event,
74
+ domain_config: "AbstractDomainSettings"
75
+ ):
76
+ """
77
+ Sets up and runs event handlers for a specific domain.
78
+
79
+ Iterates through the domain configuration and starts a separate task for each configured event handler.
80
+
81
+ Args:
82
+ events_ready_event (trio.Event): Event to signal when all handlers for the domain are ready.
83
+ domain_config (AbstractDomainSettings): Configuration for the domain events.
84
+
85
+ Raises:
86
+ CDPEndExceptions: If connection issues occur.
87
+ BaseException: If other errors occur during setup.
88
+ """
89
+
90
+ await self.log_cdp_step(
91
+ message=f"Domain '{domain_config.name}' events handlers setup started."
92
+ )
93
+
94
+ try:
95
+ events_handlers_ready_events: List[trio.Event] = []
96
+
97
+ for event_name, event_config in domain_config.handlers.model_dump(exclude_none=True).items():
98
+ if event_config is not None:
99
+ event_handler_ready_event = trio.Event()
100
+ events_handlers_ready_events.append(event_handler_ready_event)
101
+
102
+ self._nursery_object.start_soon(
103
+ self._run_event_handler,
104
+ event_handler_ready_event,
105
+ getattr(domain_config.handlers, event_name)
106
+ )
107
+
108
+ for event_handler_ready_event in events_handlers_ready_events:
109
+ await event_handler_ready_event.wait()
110
+
111
+ events_ready_event.set()
112
+
113
+ await self.log_cdp_step(
114
+ message=f"Domain '{domain_config.name}' events handlers setup complete."
115
+ )
116
+ except* CDPEndExceptions as error:
117
+ raise error
118
+ except* BaseException as error:
119
+ await self.log_cdp_error(error=error)
120
+ raise error
@@ -0,0 +1,126 @@
1
+ import trio
2
+ from osn_selenium.dev_tools.models import FingerprintData
3
+ from osn_selenium.exceptions.devtools import CDPEndExceptions
4
+ from osn_selenium.dev_tools.target.logging import LoggingMixin
5
+ from osn_selenium.dev_tools._functions import execute_cdp_command
6
+
7
+
8
+ __all__ = ["FingerprintMixin"]
9
+
10
+
11
+ class FingerprintMixin(LoggingMixin):
12
+ """
13
+ Mixin for detecting and logging fingerprinting attempts in the browser.
14
+ """
15
+
16
+ async def _run_fingerprint_detect_listener(self, ready_event: trio.Event):
17
+ """
18
+ Runs the listener for fingerprint detection events from the browser.
19
+
20
+ Args:
21
+ ready_event (trio.Event): Event to signal when the listener is set up and ready.
22
+
23
+ Raises:
24
+ CDPEndExceptions: If a CDP connection error occurs.
25
+ BaseException: If any other error occurs.
26
+ """
27
+
28
+ await self.log_cdp_step(message="Fingerprint detection listener starting.")
29
+
30
+ try:
31
+ BindingCalled = self.devtools_package.get("runtime.BindingCalled")
32
+
33
+ self._fingerprint_receive_channel = self.cdp_session.listen(BindingCalled, buffer_size=100)
34
+
35
+ ready_event.set()
36
+ except CDPEndExceptions as error:
37
+ raise error
38
+ except BaseException as error:
39
+ await self.log_cdp_error(error=error)
40
+ raise error
41
+
42
+ await self.log_cdp_step(message="Fingerprint detection listener started.")
43
+
44
+ keep_alive = True
45
+ while keep_alive:
46
+ try:
47
+ event = await self._fingerprint_receive_channel.receive()
48
+
49
+ if event.name == "__osn_fingerprint_report__":
50
+ fingerprint_data = FingerprintData.model_validate_json(event.payload)
51
+
52
+ await self.log_fingerprint(level="Detect", data=fingerprint_data)
53
+ except* CDPEndExceptions:
54
+ keep_alive = False
55
+ except* BaseException as error:
56
+ await self.log_cdp_error(error=error)
57
+
58
+ async def _setup_fingerprint_injection(self, ready_event: trio.Event):
59
+ """
60
+ Injects the fingerprint detection scripts into the browser page.
61
+
62
+ Enables necessary domains (Page, Runtime), adds the reporting binding,
63
+ and evaluates the fingerprint injection script on new document creation.
64
+
65
+ Args:
66
+ ready_event (trio.Event): Event to signal when injection setup is complete.
67
+
68
+ Raises:
69
+ CDPEndExceptions: If a CDP connection error occurs.
70
+ BaseException: If any other error occurs.
71
+ """
72
+
73
+ if self._fingerprint_injection_script:
74
+ try:
75
+ await execute_cdp_command(
76
+ self=self,
77
+ cdp_error_mode="pass"
78
+ if not self._is_main_target
79
+ else "log",
80
+ error_mode="pass"
81
+ if not self._is_main_target
82
+ else "log",
83
+ function=self.devtools_package.get("page.enable"),
84
+ )
85
+ await execute_cdp_command(
86
+ self=self,
87
+ cdp_error_mode="pass"
88
+ if not self._is_main_target
89
+ else "log",
90
+ error_mode="pass"
91
+ if not self._is_main_target
92
+ else "log",
93
+ function=self.devtools_package.get("runtime.enable"),
94
+ )
95
+
96
+ await execute_cdp_command(
97
+ self=self,
98
+ cdp_error_mode="pass"
99
+ if not self._is_main_target
100
+ else "log",
101
+ error_mode="pass"
102
+ if not self._is_main_target
103
+ else "log",
104
+ function=self.devtools_package.get("runtime.add_binding"),
105
+ name="__osn_fingerprint_report__",
106
+ )
107
+
108
+ await execute_cdp_command(
109
+ self=self,
110
+ cdp_error_mode="pass"
111
+ if not self._is_main_target
112
+ else "log_without_args",
113
+ error_mode="pass"
114
+ if not self._is_main_target
115
+ else "log_without_args",
116
+ function=self.devtools_package.get("page.add_script_to_evaluate_on_new_document"),
117
+ source=self._fingerprint_injection_script,
118
+ run_immediately=True,
119
+ )
120
+
121
+ self._nursery_object.start_soon(self._run_fingerprint_detect_listener, ready_event)
122
+ except* CDPEndExceptions as error:
123
+ raise error
124
+ except* BaseException as error:
125
+ await self.log_cdp_error(error=error)
126
+ raise error
@@ -0,0 +1,179 @@
1
+ import trio
2
+ from typing import List
3
+ from osn_selenium.dev_tools.target.detach import DetachMixin
4
+ from osn_selenium.exceptions.devtools import CDPEndExceptions
5
+ from osn_selenium.dev_tools.target.discovery import DiscoveryMixin
6
+ from osn_selenium.dev_tools.target.events import EventHandlersMixin
7
+ from osn_selenium.dev_tools.logger.target import build_target_logger
8
+ from osn_selenium.dev_tools.target.fingerprint import FingerprintMixin
9
+ from selenium.webdriver.common.bidi.cdp import (
10
+ BrowserError,
11
+ open_cdp
12
+ )
13
+ from osn_selenium.dev_tools._decorators import (
14
+ background_task_decorator
15
+ )
16
+ from osn_selenium.dev_tools._functions import (
17
+ execute_cdp_command,
18
+ wait_one
19
+ )
20
+
21
+
22
+ __all__ = ["LifecycleMixin"]
23
+
24
+
25
+ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, FingerprintMixin):
26
+ """
27
+ Mixin managing the main lifecycle of the DevTools target (setup, run, close).
28
+ """
29
+
30
+ async def _close_instances(self):
31
+ """
32
+ Closes all active resources, channels, and loggers associated with the target.
33
+ """
34
+
35
+ if self._new_target_receive_channel is not None:
36
+ await self._new_target_receive_channel[0].aclose()
37
+ await self._new_target_receive_channel[1].wait()
38
+ self._new_target_receive_channel = None
39
+
40
+ if self._detached_receive_channel is not None:
41
+ await self._detached_receive_channel.aclose()
42
+ self._detached_receive_channel = None
43
+
44
+ if self._logger_cdp_send_channel is not None:
45
+ await self._logger_cdp_send_channel.aclose()
46
+ self._logger_cdp_send_channel = None
47
+
48
+ if self._logger_fingerprint_send_channel is not None:
49
+ await self._logger_fingerprint_send_channel.aclose()
50
+ self._logger_fingerprint_send_channel = None
51
+
52
+ if self._logger is not None:
53
+ await self._logger.close()
54
+ self._logger = None
55
+
56
+ for channel in self._events_receive_channels.values():
57
+ await channel[0].aclose()
58
+ await channel[1].wait()
59
+
60
+ self._events_receive_channels = {}
61
+
62
+ if self.background_task_ended is not None:
63
+ await self.background_task_ended.wait()
64
+ self.background_task_ended = None
65
+
66
+ async def _setup_target(self):
67
+ """
68
+ Configures the target session by enabling domains and starting listeners.
69
+
70
+ Enables configured CDP domains, starts event listeners for them,
71
+ and initializes target discovery and detach monitoring.
72
+
73
+ Raises:
74
+ CDPEndExceptions: If connection issues occur.
75
+ BaseException: If setup fails.
76
+ """
77
+
78
+ try:
79
+ await self.log_cdp_step(message="Target setup started.")
80
+
81
+ await self._setup_new_targets_attaching()
82
+
83
+ target_ready_events: List[trio.Event] = []
84
+
85
+ new_targets_listener_ready_event = trio.Event()
86
+ target_ready_events.append(new_targets_listener_ready_event)
87
+
88
+ fingerprint_detecting_ready_event = trio.Event()
89
+ target_ready_events.append(fingerprint_detecting_ready_event)
90
+
91
+ self._nursery_object.start_soon(self._run_new_targets_listener, new_targets_listener_ready_event)
92
+ self._nursery_object.start_soon(self._setup_fingerprint_injection, fingerprint_detecting_ready_event)
93
+ self._nursery_object.start_soon(self._run_detach_checking)
94
+
95
+ if self._domains_settings:
96
+ for domain_name, domain_config in self._domains_settings.model_dump(exclude_none=True).items():
97
+ if domain_config.get("enable_func_path", None) is not None:
98
+ enable_func_kwargs = domain_config.get("enable_func_kwargs", {})
99
+
100
+ if (
101
+ domain_config["include_target_types"]
102
+ and self.type_ in domain_config["include_target_types"]
103
+ or domain_config["exclude_target_types"]
104
+ and self.type_ not in domain_config["exclude_target_types"]
105
+ ):
106
+ await execute_cdp_command(
107
+ self=self,
108
+ error_mode="log",
109
+ function=self.devtools_package.get(domain_config["enable_func_path"]),
110
+ **enable_func_kwargs
111
+ )
112
+
113
+ domain_handlers_ready_event = trio.Event()
114
+ target_ready_events.append(domain_handlers_ready_event)
115
+ self._nursery_object.start_soon(
116
+ self._run_events_handlers,
117
+ domain_handlers_ready_event,
118
+ getattr(self._domains_settings, domain_name)
119
+ )
120
+
121
+ for domain_handlers_ready_event in target_ready_events:
122
+ await domain_handlers_ready_event.wait()
123
+
124
+ await execute_cdp_command(
125
+ self=self,
126
+ error_mode="log",
127
+ function=self.devtools_package.get("runtime.run_if_waiting_for_debugger"),
128
+ )
129
+
130
+ await self.log_cdp_step(message="Target setup complete.")
131
+ except* CDPEndExceptions as error:
132
+ raise error
133
+ except* BaseException as error:
134
+ await self.log_cdp_error(error=error)
135
+ raise error
136
+
137
+ async def run(self):
138
+ """
139
+ Starts the main lifecycle loop of the target.
140
+
141
+ Initializes logging, establishes the CDP session, sets up event handling,
142
+ runs background tasks, and waits for exit signals.
143
+
144
+ Raises:
145
+ BaseException: Handles and logs various exceptions during the lifecycle.
146
+ """
147
+
148
+ try:
149
+ self._logger_cdp_send_channel, self._logger_fingerprint_send_channel, self._logger = build_target_logger(self.target_data, self._nursery_object, self._logger_settings)
150
+
151
+ if self._cdp_target_type_log_accepted:
152
+ await self._logger.run()
153
+
154
+ await self.log_cdp_step(message=f"Target '{self.target_id}' added.")
155
+
156
+ async with open_cdp(self.websocket_url) as new_connection:
157
+ target_id_instance = self.devtools_package.get("target.TargetID").from_json(self.target_id)
158
+
159
+ async with new_connection.open_session(target_id_instance) as new_session:
160
+ self._cdp_session = new_session
161
+
162
+ await self._setup_target()
163
+
164
+ if self._target_background_task is not None:
165
+ self._nursery_object.start_soon(background_task_decorator(self._target_background_task), self)
166
+
167
+ await wait_one(self.exit_event, self.about_to_stop_event)
168
+ except* (BrowserError, RuntimeError):
169
+ self.about_to_stop_event.set()
170
+ except* CDPEndExceptions:
171
+ self.about_to_stop_event.set()
172
+ except* BaseException as error:
173
+ self.about_to_stop_event.set()
174
+ await self.log_cdp_error(error=error)
175
+ finally:
176
+ await self._close_instances()
177
+ await self._remove_target_func(self)
178
+
179
+ self.stopped_event.set()
@@ -0,0 +1,155 @@
1
+ import trio
2
+ import inspect
3
+ import warnings
4
+ from datetime import datetime
5
+ from osn_selenium.dev_tools.target.base import BaseMixin
6
+ from osn_selenium.dev_tools.models import FingerprintData
7
+ from typing import (
8
+ Any,
9
+ Dict,
10
+ Optional,
11
+ TYPE_CHECKING
12
+ )
13
+ from osn_selenium.dev_tools._exception_helpers import (
14
+ extract_exception_trace,
15
+ log_exception
16
+ )
17
+ from osn_selenium.dev_tools.logger.models import (
18
+ CDPTargetLogEntry,
19
+ FingerprintTargetLogEntry
20
+ )
21
+
22
+
23
+ __all__ = ["LoggingMixin"]
24
+
25
+ if TYPE_CHECKING:
26
+ from osn_selenium.dev_tools._typehints import CDP_LOG_LEVELS_TYPEHINT, FINGERPRINT_LOG_LEVELS_TYPEHINT
27
+
28
+
29
+ class LoggingMixin(BaseMixin):
30
+ """
31
+ Mixin for handling logging operations within a DevTools target.
32
+ """
33
+
34
+ async def log_cdp(
35
+ self,
36
+ level: "CDP_LOG_LEVELS_TYPEHINT",
37
+ message: str,
38
+ extra_data: Optional[Dict[str, Any]] = None
39
+ ):
40
+ """
41
+ Records a CDP log entry.
42
+
43
+ If logging is accepted for this target type, the entry is sent to the target-specific
44
+ logger channel.
45
+
46
+ Args:
47
+ level (CDPLogLevelsType): The severity level (e.g., 'INFO', 'ERROR').
48
+ message (str): The log message.
49
+ extra_data (Optional[Dict[str, Any]]): Additional data to log.
50
+ """
51
+
52
+ log_entry = CDPTargetLogEntry(
53
+ target_data=self.target_data,
54
+ message=message,
55
+ level=level,
56
+ datetime=datetime.now(),
57
+ extra_data=extra_data
58
+ )
59
+
60
+ await self._add_cdp_log_func(log_entry)
61
+
62
+ if self.target_type_log_accepted and self._logger is not None and self._logger_cdp_send_channel is not None:
63
+ await self._cdp_log_stats.add_log(log_entry)
64
+ await self._logger.run()
65
+
66
+ try:
67
+ self._logger_cdp_send_channel.send_nowait(log_entry)
68
+ except trio.WouldBlock:
69
+ warnings.warn(
70
+ f"WARNING: Log channel for session {self.target_id} is full. Log dropped:\n{log_entry.model_dump_json(indent=4)}"
71
+ )
72
+ except trio.BrokenResourceError:
73
+ warnings.warn(
74
+ f"WARNING: Log channel for session {self.target_id} is broken. Log dropped:\n{log_entry.model_dump_json(indent=4)}"
75
+ )
76
+
77
+ async def log_cdp_error(self, error: BaseException, extra_data: Optional[Dict[str, Any]] = None):
78
+ """
79
+ Logs an error with exception traceback and context.
80
+
81
+ Args:
82
+ error (BaseException): The exception to log.
83
+ extra_data (Optional[Dict[str, Any]]): Additional context data.
84
+ """
85
+
86
+ stack = inspect.stack()
87
+ extra_data_ = {
88
+ "frame": str(stack[1].frame),
89
+ "source_function": " <- ".join(stack_.function for stack_ in stack[1:]),
90
+ "target_data": self.target_data.model_dump(),
91
+ }
92
+
93
+ if extra_data is not None:
94
+ extra_data_.update(extra_data)
95
+
96
+ await self.log_cdp(
97
+ level="ERROR",
98
+ message=extract_exception_trace(error),
99
+ extra_data=extra_data_
100
+ )
101
+ log_exception(exception=error, extra_data=extra_data_)
102
+
103
+ async def log_cdp_step(self, message: str, extra_data: Optional[Dict[str, Any]] = None):
104
+ """
105
+ Logs a 'step' or informational message at INFO level.
106
+
107
+ Automatically includes the source function in the extra data.
108
+
109
+ Args:
110
+ message (str): The log message.
111
+ extra_data (Optional[Dict[str, Any]]): Additional context data.
112
+ """
113
+
114
+ stack = inspect.stack()
115
+ extra_data_ = {"source_function": " <- ".join(stack_.function for stack_ in stack[1:])}
116
+
117
+ if extra_data is not None:
118
+ extra_data_.update(extra_data)
119
+
120
+ await self.log_cdp(level="INFO", message=message, extra_data=extra_data_)
121
+
122
+ async def log_fingerprint(self, level: "FINGERPRINT_LOG_LEVELS_TYPEHINT", data: FingerprintData):
123
+ """
124
+ Records a fingerprint detection log entry.
125
+
126
+ Args:
127
+ level ("FingerprintLogLevelsType"): The log level (e.g., "Detect").
128
+ data (FingerprintData): The detected fingerprint data.
129
+ """
130
+
131
+ log_entry = FingerprintTargetLogEntry(
132
+ target_data=self.target_data,
133
+ level=level,
134
+ api=data.api,
135
+ used_method=data.used_method,
136
+ datetime=datetime.now(),
137
+ stacktrace=data.stacktrace,
138
+ )
139
+
140
+ await self._add_fingerprint_log_func(log_entry)
141
+
142
+ if self.target_type_log_accepted and self._logger is not None and self._logger_fingerprint_send_channel is not None:
143
+ await self._fingerprint_log_stats.add_log(log_entry)
144
+ await self._logger.run()
145
+
146
+ try:
147
+ self._logger_fingerprint_send_channel.send_nowait(log_entry)
148
+ except trio.WouldBlock:
149
+ warnings.warn(
150
+ f"WARNING: Log channel for session {self.target_id} is full. Log dropped:\n{log_entry.model_dump_json(indent=4)}"
151
+ )
152
+ except trio.BrokenResourceError:
153
+ warnings.warn(
154
+ f"WARNING: Log channel for session {self.target_id} is broken. Log dropped:\n{log_entry.model_dump_json(indent=4)}"
155
+ )
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,9 @@
1
+ __all__ = ["OSNSeleniumError"]
2
+
3
+
4
+ class OSNSeleniumError(Exception):
5
+ """
6
+ Base exception class for all errors in the OSN Selenium library.
7
+ """
8
+
9
+ pass
@@ -0,0 +1,84 @@
1
+ from typing import Any, Iterable, Union
2
+ from osn_selenium._functions import flatten_types
3
+ from osn_selenium.exceptions.base import OSNSeleniumError
4
+ from osn_selenium._typehints import (
5
+ TYPES_FOR_FLATTENING_TYPEHINT
6
+ )
7
+
8
+
9
+ __all__ = [
10
+ "ConfigurationError",
11
+ "DuplicationError",
12
+ "NotExpectedTypeError",
13
+ "NotExpectedValueError"
14
+ ]
15
+
16
+
17
+ class ConfigurationError(OSNSeleniumError):
18
+ """
19
+ Base class for configuration-related errors.
20
+ """
21
+
22
+ pass
23
+
24
+
25
+ class NotExpectedValueError(ConfigurationError):
26
+ """
27
+ Error raised when a configuration value is not among the expected valid values.
28
+ """
29
+
30
+ def __init__(self, value_name: str, value: Any, valid_values: Iterable[Any]) -> None:
31
+ """
32
+ Initializes NotExpectedValueError.
33
+
34
+ Args:
35
+ value_name (str): The name of the configuration parameter.
36
+ value (Any): The invalid value provided.
37
+ valid_values (Iterable[Any]): A collection of acceptable values.
38
+ """
39
+
40
+ super().__init__(
41
+ f"Invalid '{value_name}' value ({str(value)}. Valid values: {', '.join(str(valid_value) for valid_value in valid_values)}."
42
+ )
43
+
44
+
45
+ class NotExpectedTypeError(ConfigurationError):
46
+ """
47
+ Error raised when a configuration value has an invalid type.
48
+ """
49
+
50
+ def __init__(
51
+ self,
52
+ value_name: str,
53
+ value: Any,
54
+ valid_types: Union[TYPES_FOR_FLATTENING_TYPEHINT, Iterable[TYPES_FOR_FLATTENING_TYPEHINT]]
55
+ ) -> None:
56
+ """
57
+ Initializes NotExpectedTypeError.
58
+
59
+ Args:
60
+ value_name (str): The name of the configuration parameter.
61
+ value (Any): The value with the incorrect type.
62
+ valid_types (Union[TYPE_FOR_FLATTENING, Iterable[TYPE_FOR_FLATTENING]]): The expected type or types.
63
+ """
64
+
65
+ super().__init__(
66
+ f"Invalid '{value_name}' type ({str(value)}. Valid types: {', '.join(flatten_types(valid_types))}."
67
+ )
68
+
69
+
70
+ class DuplicationError(ConfigurationError):
71
+ """
72
+ Error raised when a configuration parameter contains duplicated values.
73
+ """
74
+
75
+ def __init__(self, value_name: str, duplicated_values: Union[str, Iterable[str]]) -> None:
76
+ """
77
+ Initializes DuplicationError.
78
+
79
+ Args:
80
+ value_name (str): The name of the parameter.
81
+ duplicated_values (Union[str, Iterable[str]]): The value or values that were duplicated.
82
+ """
83
+
84
+ super().__init__(f"'{value_name}' has been duplicated: {', '.join(duplicated_values)}.")