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,153 @@
1
+ import trio
2
+ from osn_selenium.dev_tools.manager.base import BaseMixin
3
+ from osn_selenium.exceptions.devtools import CDPEndExceptions
4
+ from osn_selenium.dev_tools._exception_helpers import log_exception
5
+ from osn_selenium.dev_tools.logger.models import (
6
+ CDPLogLevelStats,
7
+ CDPMainLogEntry,
8
+ CDPTargetLogEntry,
9
+ FingerprintAPIStats,
10
+ FingerprintLogLevelStats,
11
+ FingerprintMainLogEntry,
12
+ FingerprintTargetLogEntry
13
+ )
14
+
15
+
16
+ __all__ = ["LoggingMixin"]
17
+
18
+
19
+ class LoggingMixin(BaseMixin):
20
+ """
21
+ Mixin for aggregating logs from all targets in the DevTools manager.
22
+ """
23
+
24
+ async def _add_main_cdp_log(self):
25
+ """
26
+ Sends updated overall logging statistics to the main logger.
27
+
28
+ This method constructs a `MainLogEntry` with current statistics and
29
+ sends it to the `_main_logger_send_channel`. If the channel buffer is full,
30
+ the log is dropped silently.
31
+
32
+ Raises:
33
+ CDPEndExceptions: If a CDP connection error occurs.
34
+ BaseException: If any other error occurs during logging.
35
+ """
36
+
37
+ try:
38
+ if self._main_logger_cdp_send_channel is not None and self._main_logger is not None:
39
+ log_entry = CDPMainLogEntry(
40
+ num_channels=len(self._handling_targets),
41
+ targets_types_stats=self._cdp_targets_types_stats,
42
+ num_logs=self._num_cdp_logs,
43
+ log_level_stats=self._cdp_log_level_stats,
44
+ channels_stats=[
45
+ target.cdp_log_stats
46
+ for target in self._handling_targets.values()
47
+ if target.target_type_log_accepted
48
+ ],
49
+ )
50
+
51
+ self._main_logger_cdp_send_channel.send_nowait(log_entry)
52
+ except (trio.WouldBlock, trio.BrokenResourceError):
53
+ pass
54
+ except CDPEndExceptions as error:
55
+ raise error
56
+ except BaseException as error:
57
+ log_exception(error)
58
+ raise error
59
+
60
+ async def _add_cdp_log(self, log_entry: CDPTargetLogEntry):
61
+ """
62
+ Updates internal logging statistics based on a new log entry.
63
+
64
+ This method increments total log counts and updates per-channel and per-level statistics.
65
+ It also triggers an update to the main logger.
66
+
67
+ Args:
68
+ log_entry (CDPTargetLogEntry): The log entry to use for updating statistics.
69
+
70
+ Raises:
71
+ BaseException: Catches and logs any unexpected errors during the log aggregation process.
72
+ """
73
+
74
+ try:
75
+ self._num_cdp_logs += 1
76
+
77
+ if log_entry.level not in self._cdp_log_level_stats:
78
+ self._cdp_log_level_stats[log_entry.level] = CDPLogLevelStats(num_logs=1, last_log_time=log_entry.datetime)
79
+ else:
80
+ self._cdp_log_level_stats[log_entry.level].num_logs += 1
81
+ self._cdp_log_level_stats[log_entry.level].last_log_time = log_entry.datetime
82
+
83
+ await self._add_main_cdp_log()
84
+ except CDPEndExceptions:
85
+ pass
86
+ except BaseException as error:
87
+ log_exception(error)
88
+ raise error
89
+
90
+ async def _add_main_fingerprint_log(self):
91
+ """
92
+ Sends updated overall fingerprint logging statistics to the main logger.
93
+
94
+ Raises:
95
+ CDPEndExceptions: If a CDP connection error occurs.
96
+ BaseException: If any other error occurs during logging.
97
+ """
98
+
99
+ try:
100
+ if self._main_logger_fingerprint_send_channel is not None and self._main_logger is not None:
101
+ log_entry = FingerprintMainLogEntry(
102
+ num_channels=len(self._handling_targets),
103
+ apis_stats=self._fingerprint_categories_stats,
104
+ num_logs=self._num_fingerprint_logs,
105
+ log_level_stats=self._fingerprint_log_level_stats,
106
+ channels_stats=[
107
+ target.fingerprint_log_stats
108
+ for target in self._handling_targets.values()
109
+ if target.target_type_log_accepted
110
+ ],
111
+ )
112
+
113
+ self._main_logger_fingerprint_send_channel.send_nowait(log_entry)
114
+ except (trio.WouldBlock, trio.BrokenResourceError):
115
+ pass
116
+ except CDPEndExceptions as error:
117
+ raise error
118
+ except BaseException as error:
119
+ log_exception(error)
120
+ raise error
121
+
122
+ async def _add_fingerprint_log(self, log_entry: FingerprintTargetLogEntry):
123
+ """
124
+ Updates internal fingerprint logging statistics based on a new log entry.
125
+
126
+ Args:
127
+ log_entry (FingerprintTargetLogEntry): The log entry to use for updating statistics.
128
+
129
+ Raises:
130
+ BaseException: Catches and logs any unexpected errors during the log aggregation process.
131
+ """
132
+
133
+ try:
134
+ self._num_fingerprint_logs += 1
135
+
136
+ if log_entry.level not in self._fingerprint_log_level_stats:
137
+ self._fingerprint_log_level_stats[log_entry.level] = FingerprintLogLevelStats(num_logs=1, last_log_time=log_entry.datetime)
138
+ else:
139
+ self._fingerprint_log_level_stats[log_entry.level].num_logs += 1
140
+ self._fingerprint_log_level_stats[log_entry.level].last_log_time = log_entry.datetime
141
+
142
+ if log_entry.api not in self._fingerprint_categories_stats:
143
+ self._fingerprint_categories_stats[log_entry.api] = FingerprintAPIStats(num_logs=1, methods_stats={log_entry.used_method: 1})
144
+ else:
145
+ self._fingerprint_categories_stats[log_entry.api].num_logs += 1
146
+ self._fingerprint_categories_stats[log_entry.api].methods_stats[log_entry.used_method] = self._fingerprint_categories_stats[log_entry.api].methods_stats.get(log_entry.used_method, 0) + 1
147
+
148
+ await self._add_main_fingerprint_log()
149
+ except CDPEndExceptions:
150
+ pass
151
+ except BaseException as error:
152
+ log_exception(error)
153
+ raise error
@@ -0,0 +1,89 @@
1
+ from typing import Sequence, Union
2
+ from osn_selenium.dev_tools.manager.base import BaseMixin
3
+ from osn_selenium.dev_tools._decorators import warn_if_active
4
+ from osn_selenium.exceptions.configuration import NotExpectedTypeError
5
+ from osn_selenium.dev_tools.domains import (
6
+ DomainsSettings,
7
+ domains_classes_type,
8
+ domains_type
9
+ )
10
+
11
+
12
+ __all__ = ["SettingsMixin"]
13
+
14
+
15
+ class SettingsMixin(BaseMixin):
16
+ """
17
+ Mixin for managing DevTools domain settings (handlers and configurations).
18
+ """
19
+
20
+ @warn_if_active
21
+ def _remove_handler_settings(self, domain: domains_type):
22
+ """
23
+ Removes the settings for a specific domain.
24
+
25
+ This is an internal method intended to be used only when the DevTools context is not active.
26
+ It uses the `@warn_if_active` decorator to log a warning if called incorrectly.
27
+
28
+ Args:
29
+ domain (domains_type): The name of the domain to remove settings for.
30
+ """
31
+
32
+ if self._domains_settings is not None:
33
+ self._domains_settings.pop(domain, None)
34
+
35
+ def remove_domains_handlers(self, domains: Union[domains_type, Sequence[domains_type]]):
36
+ """
37
+ Removes handler settings for one or more DevTools domains.
38
+
39
+ This method can be called with a single domain name or a sequence of domain names.
40
+ It should only be called when the DevTools context is not active.
41
+
42
+ Args:
43
+ domains (Union[domains_type, Sequence[domains_type]]): A single domain name as a string,
44
+ or a sequence of domain names to be removed.
45
+
46
+ Raises:
47
+ TypeError: If the `domains` argument is not a string or a sequence of strings.
48
+ """
49
+
50
+ if isinstance(domains, str):
51
+ self._remove_handler_settings(domains)
52
+ elif isinstance(domains, Sequence) and all(isinstance(domain, str) for domain in domains):
53
+ for domain in domains:
54
+ self._remove_handler_settings(domain)
55
+ else:
56
+ raise NotExpectedTypeError(
57
+ value_name="domains",
58
+ value=domains,
59
+ valid_types=("str", "Sequence[str]")
60
+ )
61
+
62
+ @warn_if_active
63
+ def _set_handler_settings(self, domain: domains_type, settings: domains_classes_type):
64
+ """
65
+ Sets the handler settings for a specific domain.
66
+
67
+ This is an internal method intended to be used only when the DevTools context is not active.
68
+ It uses the `@warn_if_active` decorator to log a warning if called incorrectly.
69
+
70
+ Args:
71
+ domain (domains_type): The name of the domain to configure.
72
+ settings (domains_classes_type): The configuration settings for the domain.
73
+ """
74
+
75
+ setattr(self._domains_settings, domain, settings)
76
+
77
+ def set_domains_handlers(self, settings: DomainsSettings):
78
+ """
79
+ Sets handler settings for multiple domains from a DomainsSettings object.
80
+
81
+ This method iterates through the provided settings and applies them to the corresponding domains.
82
+ It should only be called when the DevTools context is not active.
83
+
84
+ Args:
85
+ settings (DomainsSettings): An object containing the configuration for one or more domains.
86
+ """
87
+
88
+ for domain_name, domain_settings in settings.model_dump(exclude_none=True).items():
89
+ self._set_handler_settings(domain_name, domain_settings)
@@ -0,0 +1,175 @@
1
+ from typing import Any, List, Optional
2
+ from osn_selenium.dev_tools.models import TargetData
3
+ from osn_selenium.dev_tools.target import DevToolsTarget
4
+ from osn_selenium.dev_tools.manager.logging import LoggingMixin
5
+ from osn_selenium.dev_tools._exception_helpers import log_exception
6
+ from osn_selenium.dev_tools.logger.models import CDPTargetTypeStats
7
+ from osn_selenium.exceptions.devtools import (
8
+ BidiConnectionNotEstablishedError,
9
+ CDPEndExceptions
10
+ )
11
+
12
+
13
+ __all__ = ["TargetsMixin"]
14
+
15
+
16
+ class TargetsMixin(LoggingMixin):
17
+ """
18
+ Mixin for adding, removing, and retrieving DevTools targets.
19
+ """
20
+
21
+ async def _remove_target(self, target: DevToolsTarget) -> Optional[bool]:
22
+ """
23
+ Removes a target ID from the List of currently handled targets.
24
+
25
+ This method also triggers the removal of the target's specific logger channel
26
+ and updates overall logging statistics.
27
+
28
+ Args:
29
+ target (DevToolsTarget): The target instance to remove.
30
+
31
+ Returns:
32
+ Optional[bool]: True if the target ID was successfully removed, False if it was not found.
33
+ Returns None if an exception occurs.
34
+ """
35
+
36
+ try:
37
+ async with self.targets_lock:
38
+ if target.target_id in self._handling_targets:
39
+ self._cdp_targets_types_stats[target.type_].num_targets -= 1
40
+
41
+ target = self._handling_targets.pop(target.target_id)
42
+ await target.log_cdp_step(message=f"Target '{target.target_id}' removed.")
43
+ await target.stop()
44
+
45
+ await self._add_main_cdp_log()
46
+
47
+ return True
48
+ else:
49
+ return False
50
+ except CDPEndExceptions:
51
+ pass
52
+ except BaseException as error:
53
+ log_exception(error)
54
+
55
+ async def _add_target(self, target_event: Any, is_main_target: bool = False) -> Optional[bool]:
56
+ """
57
+ Adds a new browser target to the manager based on a target event.
58
+
59
+ This method processes events like `TargetCreated` or `AttachedToTarget`
60
+ to initialize and manage new `DevToolsTarget` instances. It ensures
61
+ that targets are not added if the manager is closing or if they already exist.
62
+
63
+ Args:
64
+ target_event (Any): The event object containing target information.
65
+ Expected to have a `target_info` attribute or be the target info itself.
66
+
67
+ Returns:
68
+ Optional[bool]: True if a new target was successfully added and started,
69
+ False if the target already existed or was filtered,
70
+ or None if an error occurred.
71
+
72
+ Raises:
73
+ BaseException: Catches and logs any unexpected errors during target addition.
74
+ """
75
+
76
+ try:
77
+ if hasattr(target_event, "target_info"):
78
+ target_info = target_event.target_info
79
+ else:
80
+ target_info = target_event
81
+
82
+ async with self.targets_lock:
83
+ target_id = target_info.target_id
84
+
85
+ if self._is_closing:
86
+ return False
87
+
88
+ if target_id not in self._handling_targets:
89
+ self._handling_targets[target_id] = DevToolsTarget(
90
+ target_data=TargetData(
91
+ target_id=target_id,
92
+ type_=target_info.type_,
93
+ title=target_info.title,
94
+ url=target_info.url,
95
+ attached=target_info.attached,
96
+ can_access_opener=target_info.can_access_opener,
97
+ opener_id=target_info.opener_id,
98
+ opener_frame_id=target_info.opener_frame_id,
99
+ browser_context_id=target_info.browser_context_id,
100
+ subtype=target_info.subtype,
101
+ ),
102
+ is_main_target=is_main_target,
103
+ logger_settings=self._logger_settings,
104
+ domains_settings=self._domains_settings,
105
+ devtools_package=self._devtools_package,
106
+ websocket_url=self._websocket_url,
107
+ new_targets_filter_list=self._new_targets_filter,
108
+ new_targets_buffer_size=self._new_targets_buffer_size,
109
+ nursery=self._nursery_object,
110
+ exit_event=self.exit_event,
111
+ fingerprint_injection_script=self._fingerprint_injection_script,
112
+ target_background_task=self._target_background_task,
113
+ add_target_func=self._add_target,
114
+ remove_target_func=self._remove_target,
115
+ add_cdp_log_func=self._add_cdp_log,
116
+ add_fingerprint_log_func=self._add_fingerprint_log,
117
+ )
118
+
119
+ if target_info.type_ not in self._cdp_targets_types_stats:
120
+ self._cdp_targets_types_stats[target_info.type_] = CDPTargetTypeStats(num_targets=1)
121
+ else:
122
+ self._cdp_targets_types_stats[target_info.type_].num_targets += 1
123
+
124
+ await self._add_main_cdp_log()
125
+
126
+ self._nursery_object.start_soon(self._handling_targets[target_id].run)
127
+
128
+ return True
129
+ else:
130
+ self._handling_targets[target_id].type_ = target_info.type_
131
+ self._handling_targets[target_id].title = target_info.title
132
+ self._handling_targets[target_id].url = target_info.url
133
+ self._handling_targets[target_id].attached = target_info.attached
134
+ self._handling_targets[target_id].can_access_opener = target_info.can_access_opener
135
+ self._handling_targets[target_id].opener_id = target_info.opener_id
136
+ self._handling_targets[target_id].opener_frame_id = target_info.opener_frame_id
137
+ self._handling_targets[target_id].browser_context_id = target_info.browser_context_id
138
+ self._handling_targets[target_id].subtype = target_info.subtype
139
+
140
+ return False
141
+ except* CDPEndExceptions:
142
+ pass
143
+ except* BaseException as error:
144
+ log_exception(error)
145
+ raise error
146
+
147
+ async def _get_all_targets(self) -> List[Any]:
148
+ """
149
+ Retrieves a List of all currently active browser targets.
150
+
151
+ Returns:
152
+ List[Any]: A List of target objects, each containing information like target ID, type, and URL.
153
+
154
+ Raises:
155
+ BidiConnectionNotEstablishedError: If the BiDi connection is not active.
156
+ """
157
+
158
+ try:
159
+ if self._bidi_connection_object is not None:
160
+ targets_filter = self._devtools_package.get("target.TargetFilter")(
161
+ [
162
+ {"exclude": False, "type": "page"},
163
+ {"exclude": False, "type": "tab"},
164
+ {"exclude": True}
165
+ ]
166
+ )
167
+
168
+ return await self._bidi_connection_object.session.execute(self._devtools_package.get("target.get_targets")(targets_filter))
169
+
170
+ raise BidiConnectionNotEstablishedError()
171
+ except CDPEndExceptions as error:
172
+ raise error
173
+ except BaseException as error:
174
+ log_exception(error)
175
+ raise error
@@ -0,0 +1,49 @@
1
+ from typing import Optional
2
+ from osn_selenium._base_models import DictModel
3
+
4
+
5
+ __all__ = ["FingerprintData", "TargetData"]
6
+
7
+
8
+ class TargetData(DictModel):
9
+ """
10
+ Dataclass to hold essential information about a browser target.
11
+
12
+ Attributes:
13
+ target_id (Optional[str]): The unique identifier for the target.
14
+ type_ (Optional[str]): The type of the target (e.g., "page", "iframe", "worker").
15
+ title (Optional[str]): The title of the target (e.g., the page title).
16
+ url (Optional[str]): The URL of the target.
17
+ attached (Optional[bool]): Indicates if the DevTools session is currently attached to this target.
18
+ can_access_opener (Optional[bool]): Whether the target can access its opener.
19
+ opener_id (Optional[str]): The ID of the opener target.
20
+ opener_frame_id (Optional[str]): The ID of the opener frame.
21
+ browser_context_id (Optional[str]): The browser context ID associated with the target.
22
+ subtype (Optional[str]): Subtype of the target.
23
+ """
24
+
25
+ target_id: Optional[str] = None
26
+ type_: Optional[str] = None
27
+ title: Optional[str] = None
28
+ url: Optional[str] = None
29
+ attached: Optional[bool] = None
30
+ can_access_opener: Optional[bool] = None
31
+ opener_id: Optional[str] = None
32
+ opener_frame_id: Optional[str] = None
33
+ browser_context_id: Optional[str] = None
34
+ subtype: Optional[str] = None
35
+
36
+
37
+ class FingerprintData(DictModel):
38
+ """
39
+ Dataclass representing detected fingerprinting activity.
40
+
41
+ Attributes:
42
+ api (str): The API that was accessed.
43
+ used_method (str): The method called.
44
+ stacktrace (Optional[str]): The stack trace where the access occurred.
45
+ """
46
+
47
+ api: str
48
+ used_method: str
49
+ stacktrace: Optional[str]
@@ -0,0 +1,139 @@
1
+ from pathlib import Path
2
+ from pydantic import Field
3
+ from osn_selenium._base_models import DictModel
4
+ from osn_selenium.dev_tools.filters import TargetFilter
5
+ from osn_selenium.dev_tools.domains import DomainsSettings
6
+ from typing import (
7
+ Literal,
8
+ Optional,
9
+ Sequence,
10
+ Union
11
+ )
12
+ from osn_selenium.javascript.fingerprint import FingerprintSettings
13
+ from osn_selenium.dev_tools._typehints import (
14
+ CDP_LOG_LEVELS_TYPEHINT,
15
+ DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT,
16
+ FINGERPRINT_LOG_LEVELS_TYPEHINT
17
+ )
18
+
19
+
20
+ __all__ = [
21
+ "CDPLoggerSettings",
22
+ "DevToolsSettings",
23
+ "FingerprintLoggerSettings",
24
+ "LoggerSettings"
25
+ ]
26
+
27
+
28
+ class FingerprintLoggerSettings(DictModel):
29
+ """
30
+ Configuration settings for fingerprint logging.
31
+
32
+ Attributes:
33
+ buffer_size (int): The size of the log buffer. Defaults to 100.
34
+ log_level_filter_mode (Literal["exclude", "include"]): Mode for filtering log levels.
35
+ Defaults to "exclude".
36
+ log_level_filter (Optional[Union[FingerprintLogLevelsType, Sequence[FingerprintLogLevelsType]]]):
37
+ Specific log levels to filter based on the mode. Defaults to None.
38
+ category_filter_mode (Literal["exclude", "include"]): Mode for filtering categories.
39
+ Defaults to "exclude".
40
+ category_filter (Optional[Union[str, Sequence[str]]]): Specific categories to filter.
41
+ Defaults to None.
42
+ send_wait (bool): Whether to wait for the log to be sent. Defaults to False.
43
+ """
44
+
45
+ buffer_size: int = 100
46
+ log_level_filter_mode: Literal["exclude", "include"] = "exclude"
47
+ log_level_filter: Optional[
48
+ Union[
49
+ FINGERPRINT_LOG_LEVELS_TYPEHINT,
50
+ Sequence[FINGERPRINT_LOG_LEVELS_TYPEHINT]
51
+ ]
52
+ ] = None
53
+ category_filter_mode: Literal["exclude", "include"] = "exclude"
54
+ category_filter: Optional[Union[str, Sequence[str]]] = None
55
+ send_wait: bool = False
56
+
57
+
58
+ class CDPLoggerSettings(DictModel):
59
+ """
60
+ Configuration settings for Chrome DevTools Protocol (CDP) logging.
61
+
62
+ Attributes:
63
+ buffer_size (int): The size of the log buffer. Defaults to 100.
64
+ log_level_filter_mode (Literal["exclude", "include"]): The mode for filtering log levels.
65
+ "exclude" means log levels in `log_level_filter` will be excluded.
66
+ "include" means only log levels in `log_level_filter` will be included.
67
+ Defaults to "exclude".
68
+ log_level_filter (Optional[Union[CDPLogLevelsType, Sequence[CDPLogLevelsType]]]):
69
+ A single log level or a sequence of log levels to filter by.
70
+ Used in conjunction with `log_level_filter_mode`. Defaults to None.
71
+ target_type_filter_mode (Literal["exclude", "include"]): The mode for filtering target types.
72
+ "exclude" means target types in `target_type_filter` will be excluded.
73
+ "include" means only target types in `target_type_filter` will be included.
74
+ Defaults to "exclude".
75
+ target_type_filter (Optional[Union[str, Sequence[str]]]):
76
+ A single target type string or a sequence of target type strings to filter by.
77
+ Used in conjunction with `target_type_filter_mode`. Defaults to None.
78
+ send_wait (bool): Whether to wait for the log to be sent. Defaults to False.
79
+ """
80
+
81
+ buffer_size: int = 100
82
+ log_level_filter_mode: Literal["exclude", "include"] = "exclude"
83
+ log_level_filter: Optional[Union[CDP_LOG_LEVELS_TYPEHINT, Sequence[CDP_LOG_LEVELS_TYPEHINT]]] = None
84
+ target_type_filter_mode: Literal["exclude", "include"] = "exclude"
85
+ target_type_filter: Optional[Union[str, Sequence[str]]] = None
86
+ send_wait: bool = False
87
+
88
+
89
+ class LoggerSettings(DictModel):
90
+ """
91
+ Settings for configuring the LoggerManager.
92
+
93
+ Attributes:
94
+ dir_path (Optional[Path]): The base directory where log files will be stored.
95
+ If None, logging will only happen in memory and not be written to files.
96
+ Defaults to None.
97
+ renew_log (bool): Whether to clear/renew the log directory on startup. Defaults to True.
98
+ cdp_settings (Optional[CDPLoggerSettings]): Settings specific to CDP logging. Defaults to None.
99
+ fingerprint_settings (Optional[FingerprintLoggerSettings]): Settings specific to fingerprint logging.
100
+ Defaults to None.
101
+ """
102
+
103
+ dir_path: Optional[Path] = None
104
+ renew_log: bool = True
105
+ cdp_settings: Optional[CDPLoggerSettings] = None
106
+ fingerprint_settings: Optional[FingerprintLoggerSettings] = None
107
+
108
+
109
+ class DevToolsSettings(DictModel):
110
+ """
111
+ Settings for configuring the DevTools manager.
112
+
113
+ Attributes:
114
+ new_targets_filter (Optional[Sequence[TargetFilter]]): A sequence of `TargetFilter` objects
115
+ to control which new browser targets (e.g., tabs, iframes) DevTools should discover and attach to.
116
+ Defaults to None, meaning all targets are considered.
117
+ new_targets_buffer_size (int): The buffer size for the Trio memory channel
118
+ used to receive new target events. A larger buffer can prevent `trio.WouldBlock`
119
+ errors under high event load. Defaults to 100.
120
+ target_background_task (Optional[devtools_background_func_type]): An optional asynchronous function
121
+ that will be run as a background task for each attached DevTools target. This can be used
122
+ for custom per-target logic. Defaults to None.
123
+ logger_settings (Optional[LoggerSettings]): Configuration settings for the internal logging system.
124
+ If None, default logging settings will be used (no file logging by default).
125
+ Defaults to None.
126
+ fingerprint_settings (Optional[FingerprintSettings]): Configuration for fingerprint detection.
127
+ domains_settings (Optional[DomainsSettings]): Configuration settings for various DevTools domains.
128
+ """
129
+
130
+ new_targets_filter: Optional[Sequence[TargetFilter]] = None
131
+ new_targets_buffer_size: int = 100
132
+ target_background_task: Optional[DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT] = None
133
+ logger_settings: Optional[LoggerSettings] = Field(default_factory=LoggerSettings)
134
+ fingerprint_settings: Optional[FingerprintSettings] = None
135
+ domains_settings: Optional[DomainsSettings] = None
136
+
137
+
138
+ LoggerSettings.model_rebuild()
139
+ DevToolsSettings.model_rebuild()
@@ -0,0 +1,16 @@
1
+ from osn_selenium.dev_tools.target.lifecycle import LifecycleMixin
2
+
3
+
4
+ __all__ = ["DevToolsTarget"]
5
+
6
+
7
+ class DevToolsTarget(LifecycleMixin):
8
+ """
9
+ Manages the DevTools Protocol session and event handling for a specific browser target.
10
+
11
+ Each `DevToolsTarget` instance represents a single CDP target (e.g., a browser tab,
12
+ an iframe, or a service worker) and handles its dedicated CDP session, event listeners,
13
+ and associated logging.
14
+ """
15
+
16
+ pass