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