osn-selenium 0.0.0__py3-none-any.whl → 1.1.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 (635) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_functions.py +84 -0
  4. osn_selenium/_typehints.py +19 -0
  5. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  6. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  7. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  8. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  9. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  10. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  11. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  12. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  13. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  14. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  15. osn_selenium/abstract/executors/cdp/console.py +18 -0
  16. osn_selenium/abstract/executors/cdp/css.py +197 -0
  17. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  18. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  19. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  20. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  21. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  22. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  23. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  24. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  25. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  26. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  27. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  28. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  29. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  30. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  31. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  32. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  33. osn_selenium/abstract/executors/cdp/input.py +158 -0
  34. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  35. osn_selenium/abstract/executors/cdp/io.py +24 -0
  36. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  37. osn_selenium/abstract/executors/cdp/log.py +27 -0
  38. osn_selenium/abstract/executors/cdp/media.py +14 -0
  39. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  40. osn_selenium/abstract/executors/cdp/network.py +252 -0
  41. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  42. osn_selenium/abstract/executors/cdp/page.py +347 -0
  43. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  44. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  45. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  46. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  47. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  48. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  49. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  50. osn_selenium/abstract/executors/cdp/security.py +26 -0
  51. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  52. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  53. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  54. osn_selenium/abstract/executors/cdp/target.py +125 -0
  55. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  56. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  57. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  58. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  59. osn_selenium/abstract/executors/cdp.py +63 -0
  60. osn_selenium/abstract/executors/javascript.py +203 -0
  61. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  62. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  63. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  64. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  65. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  66. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  67. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  68. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  69. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  70. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  71. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  72. osn_selenium/abstract/instances/alert.py +67 -0
  73. osn_selenium/abstract/instances/browser.py +76 -0
  74. osn_selenium/abstract/instances/browsing_context.py +310 -0
  75. osn_selenium/abstract/instances/dialog.py +107 -0
  76. osn_selenium/abstract/instances/fedcm.py +133 -0
  77. osn_selenium/abstract/instances/mobile.py +79 -0
  78. osn_selenium/abstract/instances/network.py +100 -0
  79. osn_selenium/abstract/instances/permissions.py +52 -0
  80. osn_selenium/abstract/instances/script.py +109 -0
  81. osn_selenium/abstract/instances/shadow_root.py +81 -0
  82. osn_selenium/abstract/instances/storage.py +98 -0
  83. osn_selenium/abstract/instances/switch_to.py +104 -0
  84. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  85. osn_selenium/abstract/instances/web_element.py +395 -0
  86. osn_selenium/abstract/instances/web_extension.py +70 -0
  87. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  88. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  89. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  90. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  91. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  92. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  93. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  94. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  95. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  96. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  97. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  98. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  99. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  100. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  101. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  102. osn_selenium/abstract/webdriver/core/base.py +298 -0
  103. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  104. osn_selenium/abstract/webdriver/core/components.py +82 -0
  105. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  106. osn_selenium/abstract/webdriver/core/element.py +55 -0
  107. osn_selenium/abstract/webdriver/core/file.py +82 -0
  108. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  109. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  110. osn_selenium/abstract/webdriver/core/script.py +88 -0
  111. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  112. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  113. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  114. osn_selenium/abstract/webdriver/core/window.py +237 -0
  115. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  116. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  117. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  118. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  119. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  120. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  121. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  122. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  123. osn_selenium/base_mixin.py +122 -0
  124. osn_selenium/browsers_handler/__init__.py +47 -17
  125. osn_selenium/browsers_handler/_linux.py +226 -0
  126. osn_selenium/browsers_handler/_windows.py +21 -14
  127. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  128. osn_selenium/dev_tools/_decorators.py +149 -0
  129. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  130. osn_selenium/dev_tools/_functions.py +174 -0
  131. osn_selenium/dev_tools/_system_utils.py +35 -0
  132. osn_selenium/dev_tools/_typehints.py +35 -0
  133. osn_selenium/dev_tools/_validators.py +227 -0
  134. osn_selenium/dev_tools/_wrappers.py +92 -0
  135. osn_selenium/dev_tools/domains/__init__.py +7 -40
  136. osn_selenium/dev_tools/domains/abstract.py +98 -254
  137. osn_selenium/dev_tools/domains/fetch.py +229 -906
  138. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  139. osn_selenium/dev_tools/filters.py +40 -0
  140. osn_selenium/dev_tools/logger/main.py +214 -0
  141. osn_selenium/dev_tools/logger/models.py +232 -0
  142. osn_selenium/dev_tools/logger/target.py +278 -0
  143. osn_selenium/dev_tools/manager/__init__.py +16 -0
  144. osn_selenium/dev_tools/manager/base.py +124 -0
  145. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  146. osn_selenium/dev_tools/manager/logging.py +153 -0
  147. osn_selenium/dev_tools/manager/settings.py +89 -0
  148. osn_selenium/dev_tools/manager/targets.py +175 -0
  149. osn_selenium/dev_tools/models.py +49 -0
  150. osn_selenium/dev_tools/settings.py +139 -0
  151. osn_selenium/dev_tools/target/__init__.py +16 -0
  152. osn_selenium/dev_tools/target/base.py +427 -0
  153. osn_selenium/dev_tools/target/detach.py +54 -0
  154. osn_selenium/dev_tools/target/discovery.py +112 -0
  155. osn_selenium/dev_tools/target/events.py +120 -0
  156. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  157. osn_selenium/dev_tools/target/lifecycle.py +184 -0
  158. osn_selenium/dev_tools/target/logging.py +163 -0
  159. osn_selenium/exceptions/__init__.py +1 -0
  160. osn_selenium/exceptions/base.py +9 -0
  161. osn_selenium/exceptions/configuration.py +84 -0
  162. osn_selenium/exceptions/dependencies.py +60 -0
  163. osn_selenium/exceptions/devtools.py +114 -0
  164. osn_selenium/exceptions/flags.py +45 -0
  165. osn_selenium/exceptions/instance.py +92 -0
  166. osn_selenium/exceptions/javascript.py +31 -0
  167. osn_selenium/exceptions/logic.py +31 -0
  168. osn_selenium/exceptions/path.py +77 -0
  169. osn_selenium/exceptions/platform.py +33 -0
  170. osn_selenium/exceptions/protocol.py +86 -0
  171. osn_selenium/exceptions/webdriver.py +44 -0
  172. osn_selenium/exceptions/window.py +63 -0
  173. osn_selenium/executors/__init__.py +1 -0
  174. osn_selenium/executors/sync/__init__.py +1 -0
  175. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  176. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  177. osn_selenium/executors/sync/cdp/animation.py +50 -0
  178. osn_selenium/executors/sync/cdp/audits.py +48 -0
  179. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  180. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  181. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  182. osn_selenium/executors/sync/cdp/browser.py +131 -0
  183. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  184. osn_selenium/executors/sync/cdp/cast.py +38 -0
  185. osn_selenium/executors/sync/cdp/console.py +24 -0
  186. osn_selenium/executors/sync/cdp/css.py +187 -0
  187. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  188. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  189. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  190. osn_selenium/executors/sync/cdp/dom.py +310 -0
  191. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  192. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  193. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  194. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  195. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  196. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  197. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  198. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  199. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  200. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  201. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  202. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  203. osn_selenium/executors/sync/cdp/input.py +233 -0
  204. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  205. osn_selenium/executors/sync/cdp/io.py +33 -0
  206. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  207. osn_selenium/executors/sync/cdp/log.py +35 -0
  208. osn_selenium/executors/sync/cdp/media.py +21 -0
  209. osn_selenium/executors/sync/cdp/memory.py +62 -0
  210. osn_selenium/executors/sync/cdp/network.py +287 -0
  211. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  212. osn_selenium/executors/sync/cdp/page.py +365 -0
  213. osn_selenium/executors/sync/cdp/performance.py +33 -0
  214. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  215. osn_selenium/executors/sync/cdp/preload.py +21 -0
  216. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  217. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  218. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  219. osn_selenium/executors/sync/cdp/schema.py +23 -0
  220. osn_selenium/executors/sync/cdp/security.py +30 -0
  221. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  222. osn_selenium/executors/sync/cdp/storage.py +151 -0
  223. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  224. osn_selenium/executors/sync/cdp/target.py +147 -0
  225. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  226. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  227. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  228. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  229. osn_selenium/executors/sync/cdp.py +100 -0
  230. osn_selenium/executors/sync/javascript.py +79 -0
  231. osn_selenium/executors/trio_threads/__init__.py +1 -0
  232. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  233. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  234. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  235. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  236. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  237. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  238. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  239. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  240. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  241. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  242. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  243. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  244. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  245. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  246. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  247. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  248. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  249. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  250. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  251. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  252. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  253. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  254. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  255. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  256. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  257. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  258. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  259. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  260. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  261. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  262. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  263. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  264. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  265. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  266. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  267. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  268. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  269. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  270. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  271. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  272. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  273. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  274. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  275. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  276. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  277. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  278. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  279. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  280. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  281. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  282. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  283. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  284. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  285. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  286. osn_selenium/executors/trio_threads/cdp.py +104 -0
  287. osn_selenium/executors/trio_threads/javascript.py +90 -0
  288. osn_selenium/executors/unified/__init__.py +1 -0
  289. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  290. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  291. osn_selenium/executors/unified/cdp/animation.py +50 -0
  292. osn_selenium/executors/unified/cdp/audits.py +45 -0
  293. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  294. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  295. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  296. osn_selenium/executors/unified/cdp/browser.py +143 -0
  297. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  298. osn_selenium/executors/unified/cdp/cast.py +32 -0
  299. osn_selenium/executors/unified/cdp/console.py +18 -0
  300. osn_selenium/executors/unified/cdp/css.py +237 -0
  301. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  302. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  303. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  304. osn_selenium/executors/unified/cdp/dom.py +380 -0
  305. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  306. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  307. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  308. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  309. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  310. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  311. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  312. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  313. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  314. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  315. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  316. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  317. osn_selenium/executors/unified/cdp/input.py +254 -0
  318. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  319. osn_selenium/executors/unified/cdp/io.py +29 -0
  320. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  321. osn_selenium/executors/unified/cdp/log.py +29 -0
  322. osn_selenium/executors/unified/cdp/media.py +15 -0
  323. osn_selenium/executors/unified/cdp/memory.py +59 -0
  324. osn_selenium/executors/unified/cdp/network.py +323 -0
  325. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  326. osn_selenium/executors/unified/cdp/page.py +410 -0
  327. osn_selenium/executors/unified/cdp/performance.py +27 -0
  328. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  329. osn_selenium/executors/unified/cdp/preload.py +15 -0
  330. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  331. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  332. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  333. osn_selenium/executors/unified/cdp/schema.py +17 -0
  334. osn_selenium/executors/unified/cdp/security.py +27 -0
  335. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  336. osn_selenium/executors/unified/cdp/storage.py +178 -0
  337. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  338. osn_selenium/executors/unified/cdp/target.py +165 -0
  339. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  340. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  341. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  342. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  343. osn_selenium/executors/unified/javascript.py +104 -0
  344. osn_selenium/flags/__init__.py +1 -0
  345. osn_selenium/flags/_functions.py +45 -0
  346. osn_selenium/flags/_typehints.py +34 -0
  347. osn_selenium/flags/_validators.py +101 -0
  348. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
  349. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
  350. osn_selenium/flags/chrome.py +259 -0
  351. osn_selenium/flags/edge.py +259 -0
  352. osn_selenium/flags/models/__init__.py +1 -0
  353. osn_selenium/flags/models/base.py +130 -0
  354. osn_selenium/flags/models/blink.py +263 -0
  355. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  356. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  357. osn_selenium/flags/models/values.py +44 -0
  358. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  359. osn_selenium/flags/yandex.py +259 -0
  360. osn_selenium/instances/__init__.py +1 -0
  361. osn_selenium/instances/_functions.py +242 -0
  362. osn_selenium/instances/_typehints.py +148 -0
  363. osn_selenium/instances/_utils.py +143 -0
  364. osn_selenium/instances/convert.py +287 -0
  365. osn_selenium/instances/protocols.py +105 -0
  366. osn_selenium/instances/sync/__init__.py +1 -0
  367. osn_selenium/instances/sync/action_chains/__init__.py +32 -0
  368. osn_selenium/instances/sync/action_chains/base.py +74 -0
  369. osn_selenium/instances/sync/action_chains/click.py +61 -0
  370. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  371. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  372. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  373. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  374. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  375. osn_selenium/instances/sync/action_chains/move.py +46 -0
  376. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  377. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  378. osn_selenium/instances/sync/alert.py +69 -0
  379. osn_selenium/instances/sync/browser.py +72 -0
  380. osn_selenium/instances/sync/browsing_context.py +193 -0
  381. osn_selenium/instances/sync/dialog.py +81 -0
  382. osn_selenium/instances/sync/fedcm.py +92 -0
  383. osn_selenium/instances/sync/mobile.py +75 -0
  384. osn_selenium/instances/sync/network.py +90 -0
  385. osn_selenium/instances/sync/permissions.py +80 -0
  386. osn_selenium/instances/sync/script.py +77 -0
  387. osn_selenium/instances/sync/shadow_root.py +113 -0
  388. osn_selenium/instances/sync/storage.py +91 -0
  389. osn_selenium/instances/sync/switch_to.py +92 -0
  390. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  391. osn_selenium/instances/sync/web_element.py +179 -0
  392. osn_selenium/instances/sync/web_extension.py +77 -0
  393. osn_selenium/instances/trio_threads/__init__.py +1 -0
  394. osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
  395. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  396. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  397. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  399. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  400. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  401. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  402. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  403. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  404. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  405. osn_selenium/instances/trio_threads/alert.py +87 -0
  406. osn_selenium/instances/trio_threads/browser.py +90 -0
  407. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  408. osn_selenium/instances/trio_threads/dialog.py +99 -0
  409. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  410. osn_selenium/instances/trio_threads/mobile.py +93 -0
  411. osn_selenium/instances/trio_threads/network.py +108 -0
  412. osn_selenium/instances/trio_threads/permissions.py +102 -0
  413. osn_selenium/instances/trio_threads/script.py +95 -0
  414. osn_selenium/instances/trio_threads/shadow_root.py +154 -0
  415. osn_selenium/instances/trio_threads/storage.py +109 -0
  416. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  417. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  418. osn_selenium/instances/trio_threads/web_element.py +217 -0
  419. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  420. osn_selenium/instances/unified/__init__.py +1 -0
  421. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  422. osn_selenium/instances/unified/action_chains/base.py +31 -0
  423. osn_selenium/instances/unified/action_chains/click.py +27 -0
  424. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  425. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  426. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  427. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  428. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  429. osn_selenium/instances/unified/action_chains/move.py +24 -0
  430. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  431. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  432. osn_selenium/instances/unified/alert.py +29 -0
  433. osn_selenium/instances/unified/browser.py +33 -0
  434. osn_selenium/instances/unified/browsing_context.py +151 -0
  435. osn_selenium/instances/unified/dialog.py +42 -0
  436. osn_selenium/instances/unified/fedcm.py +48 -0
  437. osn_selenium/instances/unified/mobile.py +36 -0
  438. osn_selenium/instances/unified/network.py +50 -0
  439. osn_selenium/instances/unified/permissions.py +43 -0
  440. osn_selenium/instances/unified/script.py +38 -0
  441. osn_selenium/instances/unified/shadow_root.py +46 -0
  442. osn_selenium/instances/unified/storage.py +48 -0
  443. osn_selenium/instances/unified/switch_to.py +49 -0
  444. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  445. osn_selenium/instances/unified/web_element.py +145 -0
  446. osn_selenium/instances/unified/web_extension.py +38 -0
  447. osn_selenium/javascript/__init__.py +1 -0
  448. osn_selenium/javascript/_functions.py +63 -0
  449. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  450. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  451. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  452. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  453. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  454. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  455. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  456. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  457. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  458. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  459. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  460. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  461. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  462. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  463. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  464. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  465. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  466. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  467. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  468. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  469. osn_selenium/javascript/functions.py +44 -0
  470. osn_selenium/javascript/models.py +35 -0
  471. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  472. osn_selenium/models.py +94 -0
  473. osn_selenium/trio_threads_mixin.py +159 -0
  474. osn_selenium/webdrivers/_args_helpers.py +181 -0
  475. osn_selenium/webdrivers/_bridges.py +57 -0
  476. osn_selenium/webdrivers/_decorators.py +83 -0
  477. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  478. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  479. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  480. osn_selenium/webdrivers/_typehints.py +10 -0
  481. osn_selenium/webdrivers/protocols.py +50 -0
  482. osn_selenium/webdrivers/sync/__init__.py +1 -0
  483. osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
  484. osn_selenium/webdrivers/sync/blink/base.py +140 -0
  485. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  486. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  487. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  488. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  489. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  490. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  491. osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
  492. osn_selenium/webdrivers/sync/chrome/base.py +118 -0
  493. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  494. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  495. osn_selenium/webdrivers/sync/core/__init__.py +100 -0
  496. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  497. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  498. osn_selenium/webdrivers/sync/core/base.py +175 -0
  499. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  500. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  501. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  502. osn_selenium/webdrivers/sync/core/element.py +42 -0
  503. osn_selenium/webdrivers/sync/core/file.py +40 -0
  504. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  505. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  506. osn_selenium/webdrivers/sync/core/script.py +53 -0
  507. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  508. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  509. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  510. osn_selenium/webdrivers/sync/core/window.py +99 -0
  511. osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
  512. osn_selenium/webdrivers/sync/edge/base.py +114 -0
  513. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  514. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  515. osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
  516. osn_selenium/webdrivers/sync/yandex/base.py +111 -0
  517. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  518. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  519. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  520. osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
  521. osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
  522. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  523. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  524. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  525. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  526. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  527. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  528. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
  529. osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
  530. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  531. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  532. osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
  533. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  534. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  535. osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
  536. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  537. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  538. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  539. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  540. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  541. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  542. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  543. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  544. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  545. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  546. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  547. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  548. osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
  549. osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
  550. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  551. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  552. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
  553. osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
  554. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  555. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  556. osn_selenium/webdrivers/unified/__init__.py +1 -0
  557. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  558. osn_selenium/webdrivers/unified/blink/base.py +135 -0
  559. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  560. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  561. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  562. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  563. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  564. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  565. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  566. osn_selenium/webdrivers/unified/chrome/base.py +58 -0
  567. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  568. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  569. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  570. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  571. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  572. osn_selenium/webdrivers/unified/core/base.py +139 -0
  573. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  574. osn_selenium/webdrivers/unified/core/components.py +32 -0
  575. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  576. osn_selenium/webdrivers/unified/core/element.py +24 -0
  577. osn_selenium/webdrivers/unified/core/file.py +35 -0
  578. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  579. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  580. osn_selenium/webdrivers/unified/core/script.py +32 -0
  581. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  582. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  583. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  584. osn_selenium/webdrivers/unified/core/window.py +135 -0
  585. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  586. osn_selenium/webdrivers/unified/edge/base.py +56 -0
  587. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  588. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  589. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  590. osn_selenium/webdrivers/unified/yandex/base.py +58 -0
  591. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  592. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  593. osn_selenium-1.1.0.dist-info/METADATA +252 -0
  594. osn_selenium-1.1.0.dist-info/RECORD +615 -0
  595. {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
  596. osn_selenium/captcha_workers/__init__.py +0 -26
  597. osn_selenium/dev_tools/_types.py +0 -22
  598. osn_selenium/dev_tools/errors.py +0 -89
  599. osn_selenium/dev_tools/logger.py +0 -558
  600. osn_selenium/dev_tools/manager.py +0 -1551
  601. osn_selenium/dev_tools/utils.py +0 -509
  602. osn_selenium/errors.py +0 -16
  603. osn_selenium/types.py +0 -118
  604. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  605. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  606. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  607. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  608. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  609. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  610. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  611. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  612. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  613. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  614. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  615. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  616. osn_selenium/webdrivers/_functions.py +0 -504
  617. osn_selenium/webdrivers/types.py +0 -390
  618. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  619. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  620. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  621. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  622. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  623. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  624. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  628. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  629. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  630. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  631. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  632. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  633. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  634. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  635. {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,427 @@
1
+ import trio
2
+ from osn_selenium.dev_tools.models import TargetData
3
+ from selenium.webdriver.common.bidi.cdp import CdpSession
4
+ from osn_selenium.dev_tools._wrappers import DevToolsPackage
5
+ from osn_selenium.dev_tools.logger.target import TargetLogger
6
+ from typing import (
7
+ Any,
8
+ Callable,
9
+ Coroutine,
10
+ Dict,
11
+ Optional,
12
+ Sequence,
13
+ TYPE_CHECKING,
14
+ Tuple
15
+ )
16
+ from osn_selenium.dev_tools._validators import (
17
+ validate_target_event_filter,
18
+ validate_type_filter
19
+ )
20
+ from osn_selenium.dev_tools.logger.models import (
21
+ CDPLoggerChannelStats,
22
+ CDPTargetLogEntry,
23
+ FingerprintLoggerChannelStats,
24
+ FingerprintTargetLogEntry
25
+ )
26
+
27
+
28
+ __all__ = ["BaseMixin"]
29
+
30
+ if TYPE_CHECKING:
31
+ from osn_selenium.dev_tools.target import DevToolsTarget
32
+ from osn_selenium.dev_tools.domains import DomainsSettings
33
+ from osn_selenium.dev_tools.settings import LoggerSettings
34
+ from osn_selenium.dev_tools._typehints import DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT
35
+
36
+
37
+ class BaseMixin:
38
+ """
39
+ Base mixin for DevToolsTarget providing initialization, properties, and logging functionality.
40
+
41
+ This class handles the core state of a DevTools target, including its data, logging channels,
42
+ filter configurations, and synchronization primitives.
43
+
44
+ Attributes:
45
+ target_data (TargetData): The essential data identifying the target (id, type, url, etc.).
46
+ devtools_package (DevToolsPackage): The wrapper for the DevTools protocol module.
47
+ websocket_url (Optional[str]): The WebSocket URL used to connect to this target.
48
+ exit_event (trio.Event): Event to signal global exit.
49
+ started_event (trio.Event): Event set when the target handling has started.
50
+ about_to_stop_event (trio.Event): Event set when the target is about to stop.
51
+ stopped_event (trio.Event): Event set when the target handling has fully stopped.
52
+ background_task_ended (Optional[trio.Event]): Event set when the background task completes.
53
+ """
54
+
55
+ def __init__(
56
+ self,
57
+ target_data: TargetData,
58
+ is_main_target: bool,
59
+ logger_settings: "LoggerSettings",
60
+ domains_settings: Optional["DomainsSettings"],
61
+ devtools_package: DevToolsPackage,
62
+ websocket_url: Optional[str],
63
+ new_targets_filter_list: Sequence[Dict[str, Any]],
64
+ new_targets_buffer_size: int,
65
+ nursery: trio.Nursery,
66
+ exit_event: trio.Event,
67
+ fingerprint_injection_script: Optional[str],
68
+ target_background_task: Optional["DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT"],
69
+ add_target_func: Callable[[Any], Coroutine[Any, Any, bool]],
70
+ remove_target_func: Callable[["DevToolsTarget"], Coroutine[Any, Any, Optional[bool]]],
71
+ add_cdp_log_func: Callable[[CDPTargetLogEntry], Coroutine[Any, Any, None]],
72
+ add_fingerprint_log_func: Callable[[FingerprintTargetLogEntry], Coroutine[Any, Any, None]],
73
+ ):
74
+ """
75
+ Initializes the BaseMixin.
76
+
77
+ Args:
78
+ target_data (TargetData): Information about the target.
79
+ is_main_target (bool): Whether this is the primary target.
80
+ logger_settings ("LoggerSettings"): Configuration for logging.
81
+ domains_settings (Optional["DomainsSettings"]): Configuration for enabled domains and handlers.
82
+ devtools_package (DevToolsPackage): Access to CDP commands and events.
83
+ websocket_url (Optional[str]): The debugger URL.
84
+ new_targets_filter_list (Sequence[Mapping[str, Any]]): Filters for discovering new targets.
85
+ new_targets_buffer_size (int): Buffer size for new target events.
86
+ nursery (trio.Nursery): Trio nursery for background tasks.
87
+ exit_event (trio.Event): Signal to stop all operations.
88
+ fingerprint_injection_script (Optional[str]): JS script to inject into the target.
89
+ target_background_task (Optional[devtools_background_func_type]): Optional background task to run.
90
+ add_target_func (Callable[[Any], Coroutine[Any, Any, bool]]): Callback to add a new target.
91
+ remove_target_func (Callable[[DevToolsTarget], Coroutine[Any, Any, Optional[bool]]]): Callback to remove this target.
92
+ add_cdp_log_func (Callable[[CDPTargetLogEntry], Coroutine[Any, Any, None]]): Callback to record a CDP log entry.
93
+ add_fingerprint_log_func (Callable[[FingerprintTargetLogEntry], Coroutine[Any, Any, None]]): Callback to record a fingerprint log entry.
94
+ """
95
+
96
+ self.target_data = target_data
97
+ self._is_main_target = is_main_target
98
+ self._logger_settings = logger_settings
99
+ self._domains_settings = domains_settings
100
+ self.devtools_package = devtools_package
101
+ self.websocket_url = websocket_url
102
+ self._new_targets_filter_list = new_targets_filter_list
103
+ self._new_targets_buffer_size = new_targets_buffer_size
104
+ self._nursery_object = nursery
105
+ self.exit_event = exit_event
106
+ self._target_background_task = target_background_task
107
+ self._add_target_func = add_target_func
108
+ self._remove_target_func = remove_target_func
109
+ self._add_cdp_log_func = add_cdp_log_func
110
+ self._add_fingerprint_log_func = add_fingerprint_log_func
111
+ self._fingerprint_injection_script = fingerprint_injection_script
112
+
113
+ self._new_targets_events_filters = validate_target_event_filter(filter_=new_targets_filter_list)
114
+
115
+ self._cdp_target_type_log_accepted = validate_type_filter(
116
+ type_=self.type_,
117
+ filter_mode=self._logger_settings.cdp_settings.target_type_filter_mode,
118
+ filter_instances=self._logger_settings.cdp_settings.target_type_filter
119
+ )
120
+
121
+ self._cdp_log_stats = CDPLoggerChannelStats(
122
+ target_id=target_data.target_id,
123
+ title=target_data.title,
124
+ url=target_data.url,
125
+ )
126
+
127
+ self._fingerprint_log_stats = FingerprintLoggerChannelStats(
128
+ target_id=target_data.target_id,
129
+ title=target_data.title,
130
+ url=target_data.url,
131
+ )
132
+
133
+ self.started_event = trio.Event()
134
+ self.about_to_stop_event = trio.Event()
135
+ self.background_task_ended: Optional[trio.Event] = None
136
+ self.stopped_event = trio.Event()
137
+ self._logger_cdp_send_channel: Optional[trio.MemorySendChannel[CDPTargetLogEntry]] = None
138
+ self._logger_fingerprint_send_channel: Optional[trio.MemorySendChannel[FingerprintTargetLogEntry]] = None
139
+ self._logger: Optional[TargetLogger] = None
140
+ self._cdp_session: Optional[CdpSession] = None
141
+ self._new_target_receive_channel: Optional[Tuple[trio.MemoryReceiveChannel, trio.Event]] = None
142
+ self._detached_receive_channel: Optional[trio.MemoryReceiveChannel] = None
143
+ self._events_receive_channels: Dict[str, Tuple[trio.MemoryReceiveChannel, trio.Event]] = {}
144
+ self._cancel_scopes: Dict[str, trio.CancelScope] = {}
145
+
146
+ @property
147
+ def type_(self) -> Optional[str]:
148
+ """
149
+ Gets the type of the target (e.g., 'page', 'iframe').
150
+
151
+ Returns:
152
+ Optional[str]: The target type.
153
+ """
154
+
155
+ return self.target_data.type_
156
+
157
+ @type_.setter
158
+ def type_(self, value: Optional[str]) -> None:
159
+ """
160
+ Sets the target type and re-evaluates log filtering.
161
+
162
+ Args:
163
+ value (Optional[str]): The new target type.
164
+ """
165
+
166
+ self._cdp_target_type_log_accepted = validate_type_filter(
167
+ type_=value,
168
+ filter_mode=self._logger_settings.cdp_settings.target_type_filter_mode,
169
+ filter_instances=self._logger_settings.cdp_settings.target_type_filter
170
+ )
171
+ self.target_data.type_ = value
172
+
173
+ @property
174
+ def attached(self) -> Optional[bool]:
175
+ """
176
+ Checks if the target is currently attached.
177
+
178
+ Returns:
179
+ Optional[bool]: True if attached, False otherwise.
180
+ """
181
+
182
+ return self.target_data.attached
183
+
184
+ @attached.setter
185
+ def attached(self, value: Optional[bool]) -> None:
186
+ """
187
+ Sets the attached status.
188
+
189
+ Args:
190
+ value (Optional[bool]): The new attached status.
191
+ """
192
+
193
+ self.target_data.attached = value
194
+
195
+ @property
196
+ def browser_context_id(self) -> Optional[str]:
197
+ """
198
+ Gets the browser context ID.
199
+
200
+ Returns:
201
+ Optional[str]: The browser context ID.
202
+ """
203
+
204
+ return self.target_data.browser_context_id
205
+
206
+ @browser_context_id.setter
207
+ def browser_context_id(self, value: Optional[str]) -> None:
208
+ """
209
+ Sets the browser context ID.
210
+
211
+ Args:
212
+ value (Optional[str]): The new browser context ID.
213
+ """
214
+
215
+ self.target_data.browser_context_id = value
216
+
217
+ @property
218
+ def can_access_opener(self) -> Optional[bool]:
219
+ """
220
+ Checks if the target can access its opener.
221
+
222
+ Returns:
223
+ Optional[bool]: True if accessible, False otherwise.
224
+ """
225
+
226
+ return self.target_data.can_access_opener
227
+
228
+ @can_access_opener.setter
229
+ def can_access_opener(self, value: Optional[bool]) -> None:
230
+ """
231
+ Sets whether the target can access its opener.
232
+
233
+ Args:
234
+ value (Optional[bool]): Access status.
235
+ """
236
+
237
+ self.target_data.can_access_opener = value
238
+
239
+ @property
240
+ def cancel_scopes(self) -> Dict[str, trio.CancelScope]:
241
+ """
242
+ Provides access to the dictionary of cancellation scopes.
243
+
244
+ Returns:
245
+ Dict[str, trio.CancelScope]: The cancel scopes dictionary.
246
+ """
247
+
248
+ return self._cancel_scopes
249
+
250
+ @property
251
+ def cdp_log_stats(self) -> CDPLoggerChannelStats:
252
+ """
253
+ Gets the CDP logging statistics for this target channel.
254
+
255
+ Returns:
256
+ CDPLoggerChannelStats: The statistics object.
257
+ """
258
+
259
+ return self._cdp_log_stats
260
+
261
+ @property
262
+ def cdp_session(self) -> CdpSession:
263
+ """
264
+ Gets the active CDP session for this target.
265
+
266
+ Returns:
267
+ CdpSession: The CDP session object.
268
+ """
269
+
270
+ return self._cdp_session
271
+
272
+ @property
273
+ def fingerprint_log_stats(self) -> FingerprintLoggerChannelStats:
274
+ """
275
+ Gets the fingerprint logging statistics for this target channel.
276
+
277
+ Returns:
278
+ FingerprintLoggerChannelStats: The statistics object.
279
+ """
280
+
281
+ return self._fingerprint_log_stats
282
+
283
+ @property
284
+ def opener_frame_id(self) -> Optional[str]:
285
+ """
286
+ Gets the ID of the opener frame.
287
+
288
+ Returns:
289
+ Optional[str]: The opener frame ID.
290
+ """
291
+
292
+ return self.target_data.opener_frame_id
293
+
294
+ @opener_frame_id.setter
295
+ def opener_frame_id(self, value: Optional[str]) -> None:
296
+ """
297
+ Sets the ID of the opener frame.
298
+
299
+ Args:
300
+ value (Optional[str]): The new opener frame ID.
301
+ """
302
+
303
+ self.target_data.opener_frame_id = value
304
+
305
+ @property
306
+ def opener_id(self) -> Optional[str]:
307
+ """
308
+ Gets the ID of the opener target.
309
+
310
+ Returns:
311
+ Optional[str]: The opener ID.
312
+ """
313
+
314
+ return self.target_data.opener_id
315
+
316
+ @opener_id.setter
317
+ def opener_id(self, value: Optional[str]) -> None:
318
+ """
319
+ Sets the ID of the opener target.
320
+
321
+ Args:
322
+ value (Optional[str]): The new opener ID.
323
+ """
324
+
325
+ self.target_data.opener_id = value
326
+
327
+ @property
328
+ def subtype(self) -> Optional[str]:
329
+ """
330
+ Gets the subtype of the target.
331
+
332
+ Returns:
333
+ Optional[str]: The subtype.
334
+ """
335
+
336
+ return self.target_data.subtype
337
+
338
+ @subtype.setter
339
+ def subtype(self, value: Optional[str]) -> None:
340
+ """
341
+ Sets the subtype of the target.
342
+
343
+ Args:
344
+ value (Optional[str]): The new subtype.
345
+ """
346
+
347
+ self.target_data.subtype = value
348
+
349
+ @property
350
+ def target_id(self) -> Optional[str]:
351
+ """
352
+ Gets the unique target ID.
353
+
354
+ Returns:
355
+ Optional[str]: The target ID.
356
+ """
357
+
358
+ return self.target_data.target_id
359
+
360
+ @target_id.setter
361
+ def target_id(self, value: Optional[str]) -> None:
362
+ """
363
+ Sets the target ID and updates log stats.
364
+
365
+ Args:
366
+ value (Optional[str]): The new target ID.
367
+ """
368
+
369
+ self._cdp_log_stats.target_id = value
370
+ self.target_data.target_id = value
371
+
372
+ @property
373
+ def target_type_log_accepted(self) -> bool:
374
+ """
375
+ Checks if logging is accepted for this target type.
376
+
377
+ Returns:
378
+ bool: True if logging is allowed, False otherwise.
379
+ """
380
+
381
+ return self._cdp_target_type_log_accepted
382
+
383
+ @property
384
+ def title(self) -> Optional[str]:
385
+ """
386
+ Gets the title of the target.
387
+
388
+ Returns:
389
+ Optional[str]: The title.
390
+ """
391
+
392
+ return self.target_data.title
393
+
394
+ @title.setter
395
+ def title(self, value: Optional[str]) -> None:
396
+ """
397
+ Sets the title of the target and updates log stats.
398
+
399
+ Args:
400
+ value (Optional[str]): The new title.
401
+ """
402
+
403
+ self._cdp_log_stats.title = value
404
+ self.target_data.title = value
405
+
406
+ @property
407
+ def url(self) -> Optional[str]:
408
+ """
409
+ Gets the URL of the target.
410
+
411
+ Returns:
412
+ Optional[str]: The URL.
413
+ """
414
+
415
+ return self.target_data.url
416
+
417
+ @url.setter
418
+ def url(self, value: Optional[str]) -> None:
419
+ """
420
+ Sets the URL of the target and updates log stats.
421
+
422
+ Args:
423
+ value (Optional[str]): The new URL.
424
+ """
425
+
426
+ self._cdp_log_stats.url = value
427
+ self.target_data.url = value
@@ -0,0 +1,54 @@
1
+ import trio
2
+ from osn_selenium.exceptions.devtools import CDPEndExceptions
3
+ from osn_selenium.dev_tools.target.logging import LoggingMixin
4
+
5
+
6
+ __all__ = ["DetachMixin"]
7
+
8
+
9
+ class DetachMixin(LoggingMixin):
10
+ """
11
+ Mixin for monitoring target detach, crash, or destruction events.
12
+ """
13
+
14
+ async def stop(self):
15
+ """
16
+ Signals the target to begin its shutdown process.
17
+
18
+ Sets the `about_to_stop_event` which allows the main loop to exit.
19
+ """
20
+
21
+ self.about_to_stop_event.set()
22
+
23
+ async def _run_detach_checking(self):
24
+ """
25
+ Continuously listens for CDP events indicating the target is no longer available.
26
+
27
+ Monitors `TargetCrashed`, `TargetDestroyed`, and `DetachedFromTarget` events.
28
+ If the target associated with this instance is affected, it triggers the stop sequence.
29
+ """
30
+
31
+ TargetCrashed = self.devtools_package.get("target.TargetCrashed")
32
+ TargetDestroyed = self.devtools_package.get("target.TargetDestroyed")
33
+ DetachedFromTarget = self.devtools_package.get("target.DetachedFromTarget")
34
+
35
+ self._detached_receive_channel: trio.MemoryReceiveChannel = self.cdp_session.listen(TargetCrashed, TargetDestroyed, DetachedFromTarget, buffer_size=10)
36
+
37
+ should_stop = False
38
+ break_ = False
39
+
40
+ while not should_stop and not break_:
41
+ try:
42
+ event = await self._detached_receive_channel.receive()
43
+
44
+ if isinstance(event, (TargetCrashed, TargetDestroyed, DetachedFromTarget,)):
45
+ if event.target_id == self.target_id:
46
+ should_stop = True
47
+ except* CDPEndExceptions:
48
+ break_ = True
49
+ except* BaseException as error:
50
+ await self.log_cdp_error(error=error)
51
+ break_ = True
52
+
53
+ if should_stop:
54
+ await self.stop()
@@ -0,0 +1,112 @@
1
+ import trio
2
+ from typing import Tuple
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
+ from osn_selenium.dev_tools._validators import (
7
+ validate_target_event
8
+ )
9
+
10
+
11
+ __all__ = ["DiscoveryMixin"]
12
+
13
+
14
+ class DiscoveryMixin(LoggingMixin):
15
+ """
16
+ Mixin for discovering and attaching to new DevTools targets.
17
+ """
18
+
19
+ async def _run_new_targets_listener(self, new_targets_listener_ready_event: trio.Event):
20
+ """
21
+ Listens for `TargetCreated` and `TargetInfoChanged` events to manage new targets.
22
+
23
+ Attaches to valid new targets and adds them to the management system.
24
+
25
+ Args:
26
+ new_targets_listener_ready_event (trio.Event): Event to signal that the listener is successfully started.
27
+
28
+ Raises:
29
+ CDPEndExceptions: If connection issues occur during initialization.
30
+ BaseException: If other errors occur during initialization.
31
+ """
32
+
33
+ await self.log_cdp_step(message="New Targets listener starting.")
34
+
35
+ try:
36
+ self._new_target_receive_channel: Tuple[trio.MemoryReceiveChannel, trio.Event] = (
37
+ self.cdp_session.listen(
38
+ self.devtools_package.get("target.TargetCreated"),
39
+ # self.devtools_package.get("target.AttachedToTarget"),
40
+ self.devtools_package.get("target.TargetInfoChanged"),
41
+ buffer_size=self._new_targets_buffer_size
42
+ ),
43
+ trio.Event()
44
+ )
45
+ new_targets_listener_ready_event.set()
46
+ except CDPEndExceptions as error:
47
+ raise error
48
+ except BaseException as error:
49
+ await self.log_cdp_error(error=error)
50
+ raise error
51
+
52
+ await self.log_cdp_step(message="New Targets listener started.")
53
+
54
+ keep_alive = True
55
+ while keep_alive:
56
+ try:
57
+ event = await self._new_target_receive_channel[0].receive()
58
+
59
+ if validate_target_event(event=event, filter_=self._new_targets_events_filters):
60
+ await execute_cdp_command(
61
+ self=self,
62
+ error_mode="log",
63
+ function=self.devtools_package.get("target.attach_to_target"),
64
+ target_id=event.target_info.target_id,
65
+ flatten=True
66
+ )
67
+
68
+ self._nursery_object.start_soon(self._add_target_func, event)
69
+ except* CDPEndExceptions:
70
+ keep_alive = False
71
+ except* BaseException as error:
72
+ await self.log_cdp_error(error=error)
73
+ keep_alive = False
74
+
75
+ self._new_target_receive_channel[1].set()
76
+
77
+ async def _setup_new_targets_attaching(self):
78
+ """
79
+ Configures the target to discover and auto-attach to new targets.
80
+
81
+ Executes CDP commands to set discovery mode and auto-attach behavior
82
+ based on the configured filters.
83
+
84
+ Raises:
85
+ CDPEndExceptions: If the connection closes during setup.
86
+ BaseException: If other errors occur.
87
+ """
88
+
89
+ try:
90
+ target_filter = self.devtools_package.get("target.TargetFilter")(self._new_targets_filter_list) if self._new_targets_filter_list is not None else None
91
+
92
+ await execute_cdp_command(
93
+ self=self,
94
+ error_mode="log",
95
+ function=self.devtools_package.get("target.set_discover_targets"),
96
+ discover=True,
97
+ filter_=target_filter,
98
+ )
99
+ await execute_cdp_command(
100
+ self=self,
101
+ error_mode="log",
102
+ function=self.devtools_package.get("target.set_auto_attach"),
103
+ auto_attach=True,
104
+ wait_for_debugger_on_start=True,
105
+ flatten=True,
106
+ filter_=target_filter,
107
+ )
108
+ except CDPEndExceptions as error:
109
+ raise error
110
+ except BaseException as error:
111
+ await self.log_cdp_error(error=error)
112
+ raise error
@@ -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