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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. osn_selenium/_functions.py +84 -0
  2. osn_selenium/_typehints.py +19 -0
  3. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  4. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  5. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  6. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  7. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  8. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  9. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  10. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  11. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  12. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  13. osn_selenium/abstract/executors/cdp/console.py +18 -0
  14. osn_selenium/abstract/executors/cdp/css.py +197 -0
  15. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  16. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  17. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  18. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  19. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  20. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  21. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  22. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  23. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  24. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  25. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  26. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  27. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  28. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  29. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  30. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  31. osn_selenium/abstract/executors/cdp/input.py +158 -0
  32. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  33. osn_selenium/abstract/executors/cdp/io.py +24 -0
  34. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  35. osn_selenium/abstract/executors/cdp/log.py +27 -0
  36. osn_selenium/abstract/executors/cdp/media.py +14 -0
  37. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  38. osn_selenium/abstract/executors/cdp/network.py +252 -0
  39. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  40. osn_selenium/abstract/executors/cdp/page.py +347 -0
  41. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  42. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  43. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  44. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  45. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  46. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  47. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  48. osn_selenium/abstract/executors/cdp/security.py +26 -0
  49. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  50. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  51. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  52. osn_selenium/abstract/executors/cdp/target.py +125 -0
  53. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  54. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  55. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  56. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  57. osn_selenium/abstract/executors/javascript.py +203 -0
  58. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  59. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  60. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  61. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  62. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  63. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  64. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  65. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  66. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  67. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  68. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  69. osn_selenium/abstract/instances/alert.py +67 -0
  70. osn_selenium/abstract/instances/browser.py +76 -0
  71. osn_selenium/abstract/instances/browsing_context.py +310 -0
  72. osn_selenium/abstract/instances/dialog.py +107 -0
  73. osn_selenium/abstract/instances/fedcm.py +133 -0
  74. osn_selenium/abstract/instances/mobile.py +79 -0
  75. osn_selenium/abstract/instances/network.py +100 -0
  76. osn_selenium/abstract/instances/permissions.py +52 -0
  77. osn_selenium/abstract/instances/script.py +109 -0
  78. osn_selenium/abstract/instances/shadow_root.py +81 -0
  79. osn_selenium/abstract/instances/storage.py +98 -0
  80. osn_selenium/abstract/instances/switch_to.py +104 -0
  81. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  82. osn_selenium/abstract/instances/web_element.py +395 -0
  83. osn_selenium/abstract/instances/web_extension.py +70 -0
  84. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  85. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  86. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  87. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  88. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  89. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  90. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  91. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  92. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  93. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  94. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  95. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  96. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  97. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  98. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  99. osn_selenium/abstract/webdriver/core/base.py +298 -0
  100. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  101. osn_selenium/abstract/webdriver/core/components.py +82 -0
  102. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  103. osn_selenium/abstract/webdriver/core/element.py +55 -0
  104. osn_selenium/abstract/webdriver/core/file.py +82 -0
  105. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  106. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  107. osn_selenium/abstract/webdriver/core/script.py +88 -0
  108. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  109. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  110. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  111. osn_selenium/abstract/webdriver/core/window.py +237 -0
  112. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  113. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  114. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  115. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  116. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  117. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  118. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  119. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  120. osn_selenium/base_mixin.py +122 -0
  121. osn_selenium/browsers_handler/__init__.py +47 -17
  122. osn_selenium/browsers_handler/_linux.py +226 -0
  123. osn_selenium/browsers_handler/_windows.py +21 -14
  124. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  125. osn_selenium/dev_tools/_decorators.py +140 -0
  126. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  127. osn_selenium/dev_tools/_functions.py +174 -0
  128. osn_selenium/dev_tools/_system_utils.py +35 -0
  129. osn_selenium/dev_tools/_typehints.py +32 -0
  130. osn_selenium/dev_tools/_validators.py +227 -0
  131. osn_selenium/dev_tools/_wrappers.py +95 -0
  132. osn_selenium/dev_tools/domains/__init__.py +7 -40
  133. osn_selenium/dev_tools/domains/abstract.py +98 -254
  134. osn_selenium/dev_tools/domains/fetch.py +229 -906
  135. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  136. osn_selenium/dev_tools/filters.py +40 -0
  137. osn_selenium/dev_tools/logger/main.py +226 -0
  138. osn_selenium/dev_tools/logger/models.py +232 -0
  139. osn_selenium/dev_tools/logger/target.py +258 -0
  140. osn_selenium/dev_tools/manager/__init__.py +16 -0
  141. osn_selenium/dev_tools/manager/base.py +147 -0
  142. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  143. osn_selenium/dev_tools/manager/logging.py +153 -0
  144. osn_selenium/dev_tools/manager/settings.py +89 -0
  145. osn_selenium/dev_tools/manager/targets.py +175 -0
  146. osn_selenium/dev_tools/models.py +49 -0
  147. osn_selenium/dev_tools/settings.py +135 -0
  148. osn_selenium/dev_tools/target/__init__.py +16 -0
  149. osn_selenium/dev_tools/target/base.py +438 -0
  150. osn_selenium/dev_tools/target/detach.py +54 -0
  151. osn_selenium/dev_tools/target/discovery.py +112 -0
  152. osn_selenium/dev_tools/target/events.py +120 -0
  153. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  154. osn_selenium/dev_tools/target/lifecycle.py +179 -0
  155. osn_selenium/dev_tools/target/logging.py +155 -0
  156. osn_selenium/exceptions/__init__.py +1 -0
  157. osn_selenium/exceptions/base.py +9 -0
  158. osn_selenium/exceptions/configuration.py +84 -0
  159. osn_selenium/exceptions/devtools.py +114 -0
  160. osn_selenium/exceptions/flags.py +45 -0
  161. osn_selenium/exceptions/instance.py +92 -0
  162. osn_selenium/exceptions/javascript.py +31 -0
  163. osn_selenium/exceptions/logic.py +31 -0
  164. osn_selenium/exceptions/path.py +77 -0
  165. osn_selenium/exceptions/platform.py +33 -0
  166. osn_selenium/exceptions/protocol.py +86 -0
  167. osn_selenium/exceptions/webdriver.py +44 -0
  168. osn_selenium/exceptions/window.py +63 -0
  169. osn_selenium/executors/__init__.py +1 -0
  170. osn_selenium/executors/sync/__init__.py +1 -0
  171. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  172. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  173. osn_selenium/executors/sync/cdp/animation.py +50 -0
  174. osn_selenium/executors/sync/cdp/audits.py +48 -0
  175. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  176. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  177. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  178. osn_selenium/executors/sync/cdp/browser.py +131 -0
  179. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  180. osn_selenium/executors/sync/cdp/cast.py +38 -0
  181. osn_selenium/executors/sync/cdp/console.py +24 -0
  182. osn_selenium/executors/sync/cdp/css.py +187 -0
  183. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  184. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  185. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  186. osn_selenium/executors/sync/cdp/dom.py +310 -0
  187. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  188. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  189. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  190. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  191. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  192. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  193. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  194. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  195. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  196. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  197. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  198. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  199. osn_selenium/executors/sync/cdp/input.py +233 -0
  200. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  201. osn_selenium/executors/sync/cdp/io.py +33 -0
  202. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  203. osn_selenium/executors/sync/cdp/log.py +35 -0
  204. osn_selenium/executors/sync/cdp/media.py +21 -0
  205. osn_selenium/executors/sync/cdp/memory.py +62 -0
  206. osn_selenium/executors/sync/cdp/network.py +287 -0
  207. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  208. osn_selenium/executors/sync/cdp/page.py +365 -0
  209. osn_selenium/executors/sync/cdp/performance.py +33 -0
  210. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  211. osn_selenium/executors/sync/cdp/preload.py +21 -0
  212. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  213. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  214. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  215. osn_selenium/executors/sync/cdp/schema.py +23 -0
  216. osn_selenium/executors/sync/cdp/security.py +30 -0
  217. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  218. osn_selenium/executors/sync/cdp/storage.py +151 -0
  219. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  220. osn_selenium/executors/sync/cdp/target.py +147 -0
  221. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  222. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  223. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  224. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  225. osn_selenium/executors/sync/javascript.py +79 -0
  226. osn_selenium/executors/trio_threads/__init__.py +1 -0
  227. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  228. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  229. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  230. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  231. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  232. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  233. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  234. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  235. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  236. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  237. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  238. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  239. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  240. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  241. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  242. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  243. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  244. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  245. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  246. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  247. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  248. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  249. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  250. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  251. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  252. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  253. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  254. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  255. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  256. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  257. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  258. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  259. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  260. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  261. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  262. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  263. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  264. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  265. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  266. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  267. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  268. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  269. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  270. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  271. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  272. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  273. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  274. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  275. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  276. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  277. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  278. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  279. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  280. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  281. osn_selenium/executors/trio_threads/javascript.py +90 -0
  282. osn_selenium/executors/unified/__init__.py +1 -0
  283. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  284. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  285. osn_selenium/executors/unified/cdp/animation.py +50 -0
  286. osn_selenium/executors/unified/cdp/audits.py +45 -0
  287. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  288. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  289. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  290. osn_selenium/executors/unified/cdp/browser.py +143 -0
  291. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  292. osn_selenium/executors/unified/cdp/cast.py +32 -0
  293. osn_selenium/executors/unified/cdp/console.py +18 -0
  294. osn_selenium/executors/unified/cdp/css.py +237 -0
  295. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  296. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  297. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  298. osn_selenium/executors/unified/cdp/dom.py +380 -0
  299. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  300. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  301. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  302. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  303. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  304. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  305. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  306. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  307. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  308. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  309. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  310. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  311. osn_selenium/executors/unified/cdp/input.py +254 -0
  312. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  313. osn_selenium/executors/unified/cdp/io.py +29 -0
  314. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  315. osn_selenium/executors/unified/cdp/log.py +29 -0
  316. osn_selenium/executors/unified/cdp/media.py +15 -0
  317. osn_selenium/executors/unified/cdp/memory.py +59 -0
  318. osn_selenium/executors/unified/cdp/network.py +323 -0
  319. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  320. osn_selenium/executors/unified/cdp/page.py +410 -0
  321. osn_selenium/executors/unified/cdp/performance.py +27 -0
  322. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  323. osn_selenium/executors/unified/cdp/preload.py +15 -0
  324. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  325. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  326. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  327. osn_selenium/executors/unified/cdp/schema.py +17 -0
  328. osn_selenium/executors/unified/cdp/security.py +27 -0
  329. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  330. osn_selenium/executors/unified/cdp/storage.py +178 -0
  331. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  332. osn_selenium/executors/unified/cdp/target.py +165 -0
  333. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  334. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  335. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  336. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  337. osn_selenium/executors/unified/javascript.py +108 -0
  338. osn_selenium/flags/__init__.py +1 -0
  339. osn_selenium/flags/_functions.py +45 -0
  340. osn_selenium/flags/_typehints.py +34 -0
  341. osn_selenium/flags/_validators.py +101 -0
  342. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +165 -243
  343. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +133 -371
  344. osn_selenium/flags/chrome.py +259 -0
  345. osn_selenium/flags/edge.py +259 -0
  346. osn_selenium/flags/models/__init__.py +1 -0
  347. osn_selenium/flags/models/base.py +130 -0
  348. osn_selenium/flags/models/blink.py +263 -0
  349. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  350. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  351. osn_selenium/flags/models/values.py +44 -0
  352. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  353. osn_selenium/flags/yandex.py +259 -0
  354. osn_selenium/instances/__init__.py +1 -0
  355. osn_selenium/instances/_functions.py +242 -0
  356. osn_selenium/instances/_typehints.py +148 -0
  357. osn_selenium/instances/_utils.py +143 -0
  358. osn_selenium/instances/convert.py +287 -0
  359. osn_selenium/instances/protocols.py +105 -0
  360. osn_selenium/instances/sync/__init__.py +1 -0
  361. osn_selenium/instances/sync/action_chains/__init__.py +26 -0
  362. osn_selenium/instances/sync/action_chains/base.py +74 -0
  363. osn_selenium/instances/sync/action_chains/click.py +61 -0
  364. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  365. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  366. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  367. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  368. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  369. osn_selenium/instances/sync/action_chains/move.py +46 -0
  370. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  371. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  372. osn_selenium/instances/sync/alert.py +69 -0
  373. osn_selenium/instances/sync/browser.py +72 -0
  374. osn_selenium/instances/sync/browsing_context.py +193 -0
  375. osn_selenium/instances/sync/dialog.py +81 -0
  376. osn_selenium/instances/sync/fedcm.py +92 -0
  377. osn_selenium/instances/sync/mobile.py +75 -0
  378. osn_selenium/instances/sync/network.py +90 -0
  379. osn_selenium/instances/sync/permissions.py +80 -0
  380. osn_selenium/instances/sync/script.py +77 -0
  381. osn_selenium/instances/sync/shadow_root.py +91 -0
  382. osn_selenium/instances/sync/storage.py +91 -0
  383. osn_selenium/instances/sync/switch_to.py +92 -0
  384. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  385. osn_selenium/instances/sync/web_element.py +179 -0
  386. osn_selenium/instances/sync/web_extension.py +77 -0
  387. osn_selenium/instances/trio_threads/__init__.py +1 -0
  388. osn_selenium/instances/trio_threads/action_chains/__init__.py +26 -0
  389. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  390. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  391. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  392. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  393. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  394. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  395. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  396. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  397. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  399. osn_selenium/instances/trio_threads/alert.py +87 -0
  400. osn_selenium/instances/trio_threads/browser.py +90 -0
  401. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  402. osn_selenium/instances/trio_threads/dialog.py +99 -0
  403. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  404. osn_selenium/instances/trio_threads/mobile.py +93 -0
  405. osn_selenium/instances/trio_threads/network.py +108 -0
  406. osn_selenium/instances/trio_threads/permissions.py +102 -0
  407. osn_selenium/instances/trio_threads/script.py +95 -0
  408. osn_selenium/instances/trio_threads/shadow_root.py +123 -0
  409. osn_selenium/instances/trio_threads/storage.py +109 -0
  410. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  411. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  412. osn_selenium/instances/trio_threads/web_element.py +217 -0
  413. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  414. osn_selenium/instances/unified/__init__.py +1 -0
  415. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  416. osn_selenium/instances/unified/action_chains/base.py +31 -0
  417. osn_selenium/instances/unified/action_chains/click.py +27 -0
  418. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  419. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  420. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  421. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  422. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  423. osn_selenium/instances/unified/action_chains/move.py +24 -0
  424. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  425. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  426. osn_selenium/instances/unified/alert.py +29 -0
  427. osn_selenium/instances/unified/browser.py +33 -0
  428. osn_selenium/instances/unified/browsing_context.py +151 -0
  429. osn_selenium/instances/unified/dialog.py +42 -0
  430. osn_selenium/instances/unified/fedcm.py +48 -0
  431. osn_selenium/instances/unified/mobile.py +36 -0
  432. osn_selenium/instances/unified/network.py +50 -0
  433. osn_selenium/instances/unified/permissions.py +43 -0
  434. osn_selenium/instances/unified/script.py +38 -0
  435. osn_selenium/instances/unified/shadow_root.py +46 -0
  436. osn_selenium/instances/unified/storage.py +48 -0
  437. osn_selenium/instances/unified/switch_to.py +49 -0
  438. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  439. osn_selenium/instances/unified/web_element.py +145 -0
  440. osn_selenium/instances/unified/web_extension.py +38 -0
  441. osn_selenium/javascript/__init__.py +1 -0
  442. osn_selenium/javascript/_functions.py +63 -0
  443. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  444. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  445. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  446. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  447. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  448. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  449. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  450. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  451. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  452. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  453. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  454. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  455. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  456. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  457. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  458. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  459. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  460. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  461. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  462. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  463. osn_selenium/javascript/functions.py +44 -0
  464. osn_selenium/javascript/models.py +35 -0
  465. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  466. osn_selenium/models.py +139 -0
  467. osn_selenium/webdrivers/_args_helpers.py +181 -0
  468. osn_selenium/webdrivers/_bridges.py +57 -0
  469. osn_selenium/webdrivers/_decorators.py +83 -0
  470. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  471. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  472. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  473. osn_selenium/webdrivers/_typehints.py +10 -0
  474. osn_selenium/webdrivers/protocols.py +50 -0
  475. osn_selenium/webdrivers/sync/__init__.py +1 -0
  476. osn_selenium/webdrivers/sync/blink/__init__.py +114 -0
  477. osn_selenium/webdrivers/sync/blink/base.py +128 -0
  478. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  479. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  480. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  481. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  482. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  483. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  484. osn_selenium/webdrivers/sync/chrome/__init__.py +67 -0
  485. osn_selenium/webdrivers/sync/chrome/base.py +106 -0
  486. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  487. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  488. osn_selenium/webdrivers/sync/core/__init__.py +91 -0
  489. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  490. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  491. osn_selenium/webdrivers/sync/core/base.py +167 -0
  492. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  493. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  494. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  495. osn_selenium/webdrivers/sync/core/element.py +42 -0
  496. osn_selenium/webdrivers/sync/core/file.py +40 -0
  497. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  498. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  499. osn_selenium/webdrivers/sync/core/script.py +53 -0
  500. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  501. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  502. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  503. osn_selenium/webdrivers/sync/core/window.py +99 -0
  504. osn_selenium/webdrivers/sync/edge/__init__.py +67 -0
  505. osn_selenium/webdrivers/sync/edge/base.py +102 -0
  506. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  507. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  508. osn_selenium/webdrivers/sync/yandex/__init__.py +67 -0
  509. osn_selenium/webdrivers/sync/yandex/base.py +99 -0
  510. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  511. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  512. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  513. osn_selenium/webdrivers/trio_threads/blink/__init__.py +124 -0
  514. osn_selenium/webdrivers/trio_threads/blink/base.py +133 -0
  515. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  516. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  517. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  518. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  519. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  520. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  521. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +81 -0
  522. osn_selenium/webdrivers/trio_threads/chrome/base.py +107 -0
  523. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  524. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  525. osn_selenium/webdrivers/trio_threads/core/__init__.py +109 -0
  526. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  527. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  528. osn_selenium/webdrivers/trio_threads/core/base.py +191 -0
  529. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  530. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  531. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  532. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  533. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  534. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  535. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  536. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  537. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  538. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  539. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  540. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  541. osn_selenium/webdrivers/trio_threads/edge/__init__.py +81 -0
  542. osn_selenium/webdrivers/trio_threads/edge/base.py +103 -0
  543. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  544. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  545. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +81 -0
  546. osn_selenium/webdrivers/trio_threads/yandex/base.py +100 -0
  547. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  548. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  549. osn_selenium/webdrivers/unified/__init__.py +1 -0
  550. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  551. osn_selenium/webdrivers/unified/blink/base.py +131 -0
  552. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  553. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  554. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  555. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  556. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  557. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  558. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  559. osn_selenium/webdrivers/unified/chrome/base.py +54 -0
  560. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  561. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  562. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  563. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  564. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  565. osn_selenium/webdrivers/unified/core/base.py +132 -0
  566. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  567. osn_selenium/webdrivers/unified/core/components.py +32 -0
  568. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  569. osn_selenium/webdrivers/unified/core/element.py +24 -0
  570. osn_selenium/webdrivers/unified/core/file.py +35 -0
  571. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  572. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  573. osn_selenium/webdrivers/unified/core/script.py +32 -0
  574. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  575. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  576. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  577. osn_selenium/webdrivers/unified/core/window.py +135 -0
  578. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  579. osn_selenium/webdrivers/unified/edge/base.py +52 -0
  580. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  581. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  582. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  583. osn_selenium/webdrivers/unified/yandex/base.py +54 -0
  584. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  585. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  586. osn_selenium-1.0.0.dist-info/METADATA +239 -0
  587. osn_selenium-1.0.0.dist-info/RECORD +608 -0
  588. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/WHEEL +1 -1
  589. osn_selenium/captcha_workers/__init__.py +0 -26
  590. osn_selenium/dev_tools/_types.py +0 -22
  591. osn_selenium/dev_tools/errors.py +0 -89
  592. osn_selenium/dev_tools/logger.py +0 -558
  593. osn_selenium/dev_tools/manager.py +0 -1551
  594. osn_selenium/dev_tools/utils.py +0 -509
  595. osn_selenium/errors.py +0 -16
  596. osn_selenium/types.py +0 -118
  597. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  598. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  599. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  600. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  601. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  602. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  603. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  604. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  605. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  606. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  607. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  608. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  609. osn_selenium/webdrivers/_functions.py +0 -504
  610. osn_selenium/webdrivers/types.py +0 -390
  611. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  612. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  613. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  614. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  615. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  616. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  617. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  618. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  619. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  620. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  621. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  622. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  623. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  624. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  628. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,26 +0,0 @@
1
- from typing import (
2
- Callable,
3
- TYPE_CHECKING,
4
- TypedDict
5
- )
6
-
7
-
8
- if TYPE_CHECKING:
9
- from osn_selenium.webdrivers.BaseDriver.webdriver import BrowserWebDriver
10
-
11
-
12
- class CaptchaWorkerSettings(TypedDict):
13
- """
14
- Typed dictionary for defining a captcha worker.
15
-
16
- Attributes:
17
- name (str): A unique name for the captcha worker.
18
- check_func (Callable[["BrowserWebDriver"], bool]): A callable function that takes a
19
- `BrowserWebDriver` instance and returns `True` if a captcha is detected.
20
- solve_func (Callable[["BrowserWebDriver"], None]): A callable function that takes a
21
- `BrowserWebDriver` instance and attempts to solve the captcha.
22
- """
23
-
24
- name: str
25
- check_func: Callable[["BrowserWebDriver"], bool]
26
- solve_func: Callable[["BrowserWebDriver"], None]
@@ -1,22 +0,0 @@
1
- from typing import (
2
- Awaitable,
3
- Callable,
4
- Literal,
5
- TYPE_CHECKING
6
- )
7
-
8
-
9
- if TYPE_CHECKING:
10
- from osn_selenium.dev_tools.manager import DevToolsTarget
11
-
12
-
13
- devtools_background_func_type = Callable[["DevToolsTarget"], Awaitable[None]]
14
- LogLevelsType = Literal[
15
- "INFO",
16
- "ERROR",
17
- "DEBUG",
18
- "WARNING",
19
- "RequestPaused",
20
- "AuthRequired",
21
- "Building Kwargs"
22
- ]
@@ -1,89 +0,0 @@
1
- import trio
2
- from selenium.webdriver.common.bidi.cdp import CdpConnectionClosed
3
-
4
-
5
- class WrongHandlerSettingsTypeError(Exception):
6
- """
7
- Custom exception raised when the event handler settings type is incorrect.
8
-
9
- This exception is raised when the provided handler settings is not a dictionary,
10
- but expected to be for proper configuration of event handlers.
11
- """
12
-
13
- def __init__(self, handler_settings_type: type):
14
- """
15
- Initializes WrongHandlerSettingsTypeError with the incorrect settings type.
16
-
17
- Args:
18
- handler_settings_type (type): The type of the handler settings that caused the error.
19
- """
20
-
21
- super().__init__(
22
- f"Wrong event handler settings type ({handler_settings_type}). It must be a dict!"
23
- )
24
-
25
-
26
- class WrongHandlerSettingsError(Exception):
27
- """
28
- Custom exception raised when event handler settings are incorrect.
29
-
30
- This exception is raised if the provided handler settings dictionary does not contain
31
- exactly one of the expected keys, as specified in the `one_of` attribute.
32
- """
33
-
34
- def __init__(self, handler_settings: dict, one_of: list[str]):
35
- """
36
- Initializes WrongHandlerSettingsError with the incorrect handler settings and expected keys.
37
-
38
- Args:
39
- handler_settings (dict[str, Any]): The dictionary of handler settings that caused the error.
40
- one_of (Sequence[str]): A list of expected keys, exactly one of which should be in `handler_settings`.
41
- """
42
-
43
- super().__init__(
44
- f"Wrong event handler settings ({handler_settings})\n\nIt must contain exactly one of {one_of} keys!"
45
- )
46
-
47
-
48
- class CantEnterDevToolsContextError(Exception):
49
- """
50
- Custom exception raised when unable to enter the DevTools context.
51
-
52
- This exception is raised when the attempt to switch the WebDriver's context to
53
- the DevTools frame fails, preventing further DevTools interactions.
54
- """
55
-
56
- def __init__(self, reason: str):
57
- """
58
- Initializes CantEnterDevToolsContextError with the reason of failure.
59
-
60
- Args:
61
- reason (str): The reason why entering the DevTools context failed.
62
- """
63
-
64
- super().__init__(f"Can't enter devtools context! Reason: {reason}.")
65
-
66
-
67
- class BidiConnectionNotEstablishedError(Exception):
68
- """
69
- Custom exception raised when a BiDi connection is required but not established.
70
-
71
- This indicates that a DevTools operation was attempted before the `DevTools`
72
- context manager was entered, which establishes the necessary BiDi connection.
73
- """
74
-
75
- def __init__(self):
76
- """
77
- Initializes BidiConnectionNotEstablishedError.
78
- """
79
-
80
- super().__init__("Bidi connection not established. Enter the DevTools context first!")
81
-
82
-
83
- trio_end_exceptions = (trio.Cancelled, trio.EndOfChannel, trio.ClosedResourceError)
84
- cdp_end_exceptions = (
85
- trio.Cancelled,
86
- trio.EndOfChannel,
87
- trio.ClosedResourceError,
88
- CdpConnectionClosed
89
- )
@@ -1,558 +0,0 @@
1
- import json
2
- import trio
3
- from pathlib import Path
4
- from datetime import datetime
5
- from dataclasses import dataclass
6
- from osn_selenium.dev_tools._types import LogLevelsType
7
- from osn_selenium.dev_tools.errors import trio_end_exceptions
8
- from osn_selenium.dev_tools.utils import (
9
- _validate_log_filter,
10
- log_exception
11
- )
12
- from typing import (
13
- Any,
14
- Literal,
15
- Optional,
16
- Sequence,
17
- TYPE_CHECKING,
18
- Union
19
- )
20
-
21
-
22
- if TYPE_CHECKING:
23
- from osn_selenium.dev_tools.utils import TargetData
24
-
25
-
26
- @dataclass
27
- class LoggerSettings:
28
- """
29
- Settings for configuring the LoggerManager.
30
-
31
- Attributes:
32
- log_dir_path (Optional[Path]): The base directory where log files will be stored.
33
- If None, logging will only happen in memory and not be written to files.
34
- Defaults to None.
35
- renew_log (bool): If True and `log_dir_path` is provided, the log directory
36
- will be cleared (recreated) on initialization. Defaults to True.
37
- log_level_filter_mode (Literal["exclude", "include"]): The mode for filtering log levels.
38
- "exclude" means log levels in `log_level_filter` will be excluded.
39
- "include" means only log levels in `log_level_filter` will be included.
40
- Defaults to "exclude".
41
- log_level_filter (Optional[Union[LogLevelsType, Sequence[LogLevelsType]]]):
42
- A single log level or a sequence of log levels to filter by.
43
- Used in conjunction with `log_level_filter_mode`. Defaults to None.
44
- target_type_filter_mode (Literal["exclude", "include"]): The mode for filtering target types.
45
- "exclude" means target types in `target_type_filter` will be excluded.
46
- "include" means only target types in `target_type_filter` will be included.
47
- Defaults to "exclude".
48
- target_type_filter (Optional[Union[str, Sequence[str]]]):
49
- A single target type string or a sequence of target type strings to filter by.
50
- Used in conjunction with `target_type_filter_mode`. Defaults to None.
51
- """
52
-
53
- log_dir_path: Optional[Path] = None
54
- renew_log: bool = True
55
- log_level_filter_mode: Literal["exclude", "include"] = "exclude"
56
- log_level_filter: Optional[Union[LogLevelsType, Sequence[LogLevelsType]]] = None
57
- target_type_filter_mode: Literal["exclude", "include"] = "exclude"
58
- target_type_filter: Optional[Union[str, Sequence[str]]] = None
59
-
60
-
61
- @dataclass(frozen=True)
62
- class LogEntry:
63
- """
64
- Represents a single log entry with detailed information.
65
-
66
- Attributes:
67
- target_data ("TargetData"): Data about the target (browser tab/session) from which the log originated.
68
- message (str): The main log message.
69
- level (LogLevelsType): The severity level of the log (e.g., "INFO", "ERROR").
70
- timestamp (datetime): The exact time when the log entry was created.
71
- source_function (str): The name of the function that generated the log.
72
- extra_data (Optional[dict[str, Any]]): Optional additional data associated with the log.
73
- """
74
-
75
- target_data: "TargetData"
76
- message: str
77
- level: LogLevelsType
78
- timestamp: datetime
79
- source_function: str
80
- extra_data: Optional[dict[str, Any]] = None
81
-
82
- def to_json(self) -> dict[str, Any]:
83
- """
84
- Converts the log entry to a JSON-serializable dictionary.
85
-
86
- Returns:
87
- dict[str, Any]: A dictionary representation of the log entry.
88
- """
89
-
90
- log_dict = {
91
- "target_data": self.target_data.to_json(),
92
- "timestamp": self.timestamp.isoformat(),
93
- "level": self.level,
94
- "source_function": self.source_function,
95
- "message": self.message,
96
- }
97
-
98
- if self.extra_data is not None:
99
- log_dict["extra_data"] = {key: str(value) for key, value in self.extra_data.items()}
100
-
101
- return log_dict
102
-
103
- def to_string(self) -> str:
104
- """
105
- Converts the log entry to a human-readable string format.
106
-
107
- Returns:
108
- str: A multi-line string representation of the log entry.
109
- """
110
-
111
- return "\n\n".join(
112
- f"{key}: {json.dumps(value, indent=4, ensure_ascii=False)}"
113
- for key, value in self.to_json().items()
114
- )
115
-
116
-
117
- class TargetLogger:
118
- """
119
- Manages logging for a specific browser target (e.g., a tab or iframe).
120
-
121
- Each `TargetLogger` instance is responsible for writing log entries
122
- related to its associated `TargetData` to a dedicated file.
123
-
124
- Attributes:
125
- _target_data ("TargetData"): The data of the browser target this logger is associated with.
126
- _nursery_object (trio.Nursery): The Trio nursery for managing concurrent tasks.
127
- _receive_channel (trio.MemoryReceiveChannel[LogEntry]): The receive channel for log entries specific to this target.
128
- _log_level_filter (Callable[[Any], bool]): Filter function for log levels.
129
- _target_type_filter (Callable[[Any], bool]): Filter function for target types.
130
- _file_writing_stopped (Optional[trio.Event]): An event set when file writing task stops.
131
- _file_path (Optional[Path]): The path to the target-specific log file.
132
- _is_active (bool): Flag indicating if the target logger is active.
133
- """
134
-
135
- def __init__(
136
- self,
137
- target_data: "TargetData",
138
- nursery_object: trio.Nursery,
139
- receive_channel: trio.MemoryReceiveChannel[LogEntry],
140
- logger_settings: LoggerSettings,
141
- ):
142
- """
143
- Initializes the TargetLogger.
144
-
145
- Args:
146
- target_data ("TargetData"): The data of the browser target this logger will log for.
147
- nursery_object (trio.Nursery): The Trio nursery to spawn background tasks.
148
- """
149
-
150
- self._target_data = target_data
151
- self._nursery_object = nursery_object
152
- self._receive_channel = receive_channel
153
-
154
- self._log_level_filter = _validate_log_filter(
155
- logger_settings.log_level_filter_mode,
156
- logger_settings.log_level_filter
157
- )
158
-
159
- self._target_type_filter = _validate_log_filter(
160
- logger_settings.target_type_filter_mode,
161
- logger_settings.target_type_filter
162
- )
163
-
164
- self._file_writing_stopped: Optional[trio.Event] = None
165
-
166
- if logger_settings.log_dir_path is None:
167
- self._file_path = None
168
- else:
169
- self._file_path = logger_settings.log_dir_path.joinpath(f"{target_data.target_id}.txt")
170
-
171
- if self._file_path.exists():
172
- with open(self._file_path, "w", encoding="utf-8") as file:
173
- file.write("")
174
-
175
- self._is_active = False
176
-
177
- @property
178
- def is_active(self) -> bool:
179
- """
180
- Checks if the target logger is currently active.
181
-
182
- Returns:
183
- bool: True if the logger is active and running, False otherwise.
184
- """
185
-
186
- return self._is_active
187
-
188
- async def close(self):
189
- """
190
- Closes the target logger, including its receive channel.
191
- """
192
-
193
- if self._receive_channel is not None:
194
- await self._receive_channel.aclose()
195
- self._receive_channel = None
196
-
197
- if self._file_writing_stopped is not None:
198
- await self._file_writing_stopped.wait()
199
- self._file_writing_stopped = None
200
-
201
- self._is_active = False
202
-
203
- async def _write_file(self):
204
- """
205
- Asynchronously writes log entries to the target-specific file.
206
-
207
- This method continuously receives `LogEntry` objects from its channel
208
- and appends their string representation to the configured file,
209
- applying log level and target type filters.
210
- It runs as a background task.
211
-
212
- Raises:
213
- BaseException: If an unexpected error occurs during file writing.
214
- """
215
-
216
- try:
217
- end_of_entry = "\n\n" + "=" * 100 + "\n\n"
218
-
219
- async with await trio.open_file(self._file_path, "a+", encoding="utf-8") as file:
220
- async for log_entry in self._receive_channel:
221
- if self._log_level_filter(log_entry.level) and self._target_type_filter(log_entry.target_data.type_):
222
- await file.write(log_entry.to_string() + end_of_entry)
223
- except* trio_end_exceptions:
224
- pass
225
- except* BaseException as error:
226
- log_exception(error)
227
- finally:
228
- if self._file_writing_stopped is not None:
229
- self._file_writing_stopped.set()
230
-
231
- async def run(self):
232
- """Starts the target logger, setting up its receive channel and file writing task."""
233
-
234
- try:
235
- if not self._is_active:
236
- self._file_writing_stopped = trio.Event()
237
-
238
- if self._file_path is not None:
239
- self._nursery_object.start_soon(self._write_file,)
240
-
241
- self._is_active = True
242
- except* trio_end_exceptions:
243
- await self.close()
244
- except* BaseException as error:
245
- log_exception(error)
246
- await self.close()
247
-
248
-
249
- def build_target_logger(
250
- target_data: "TargetData",
251
- nursery_object: trio.Nursery,
252
- logger_settings: LoggerSettings
253
- ) -> tuple[trio.MemorySendChannel[LogEntry], TargetLogger]:
254
- """
255
- Builds and initializes a `TargetLogger` instance along with its send channel.
256
-
257
- Args:
258
- target_data ("TargetData"): The data for the target this logger will serve.
259
- nursery_object (trio.Nursery): The Trio nursery to associate with the logger for background tasks.
260
- logger_settings (LoggerSettings): The logger configuration settings.
261
-
262
- Returns:
263
- tuple[trio.MemorySendChannel[LogEntry], TargetLogger]: A tuple containing
264
- the send channel for `LogEntry` objects and the initialized `TargetLogger` instance.
265
- """
266
-
267
- send_channel, receive_channel = trio.open_memory_channel(1000)
268
- target_logger = TargetLogger(target_data, nursery_object, receive_channel, logger_settings)
269
-
270
- return send_channel, target_logger
271
-
272
-
273
- @dataclass
274
- class LogLevelStats:
275
- """
276
- Dataclass to store statistics for a specific log level.
277
-
278
- Attributes:
279
- num_logs (int): The total number of logs recorded for this level.
280
- last_log_time (datetime): The timestamp of the most recent log entry for this level.
281
- """
282
-
283
- num_logs: int
284
- last_log_time: datetime
285
-
286
- def to_json(self) -> dict[str, Any]:
287
- """
288
- Converts the statistics to a JSON-serializable dictionary.
289
-
290
- Returns:
291
- dict[str, Any]: A dictionary representation of the log level statistics.
292
- """
293
-
294
- return {
295
- "num_logs": self.num_logs,
296
- "last_log_time": self.last_log_time.isoformat()
297
- }
298
-
299
-
300
- @dataclass
301
- class LoggerChannelStats:
302
- """
303
- Dataclass to store statistics for a specific logging channel (per target).
304
-
305
- Attributes:
306
- target_id (str): The unique ID of the target associated with this channel.
307
- title (str): The title of the target (e.g., page title).
308
- url (str): The URL of the target.
309
- num_logs (int): The total number of log entries for this channel.
310
- last_log_time (datetime): The timestamp of the most recent log entry for this channel.
311
- log_level_stats (dict[str, LogLevelStats]): A dictionary mapping log levels to their specific statistics.
312
- """
313
-
314
- target_id: str
315
- title: str
316
- url: str
317
- num_logs: int
318
- last_log_time: datetime
319
- log_level_stats: dict[str, LogLevelStats]
320
-
321
- async def add_log(self, log_entry: LogEntry):
322
- """
323
- Updates the channel statistics based on a new log entry.
324
-
325
- Args:
326
- log_entry (LogEntry): The new log entry to incorporate into the statistics.
327
- """
328
-
329
- self.num_logs += 1
330
- self.last_log_time = log_entry.timestamp
331
-
332
- if log_entry.level not in self.log_level_stats:
333
- self.log_level_stats[log_entry.level] = LogLevelStats(num_logs=1, last_log_time=log_entry.timestamp)
334
- else:
335
- self.log_level_stats[log_entry.level].num_logs += 1
336
- self.log_level_stats[log_entry.level].last_log_time = log_entry.timestamp
337
-
338
- def to_json(self) -> dict[str, Any]:
339
- """
340
- Converts the channel statistics to a JSON-serializable dictionary.
341
-
342
- Nested statistics objects are converted to their JSON representations.
343
-
344
- Returns:
345
- dict[str, Any]: A dictionary representation of the logger channel statistics.
346
- """
347
-
348
- return {
349
- "target_id": self.target_id,
350
- "title": self.title,
351
- "url": self.url,
352
- "num_logs": self.num_logs,
353
- "last_log_time": self.last_log_time.isoformat(),
354
- "log_level_stats": {
355
- log_level: log_level_stats.to_json()
356
- for log_level, log_level_stats in self.log_level_stats.items()
357
- }
358
- }
359
-
360
-
361
- @dataclass
362
- class TargetTypeStats:
363
- """
364
- Dataclass to store statistics for a specific target type.
365
-
366
- Attributes:
367
- num_targets (int): The count of targets of this type.
368
- """
369
-
370
- num_targets: int
371
-
372
- def to_json(self) -> dict[str, Any]:
373
- """
374
- Converts the statistics to a JSON-serializable dictionary.
375
-
376
- Returns:
377
- dict[str, Any]: A dictionary representation of the target type statistics.
378
- """
379
-
380
- return {"num_targets": self.num_targets}
381
-
382
-
383
- @dataclass(frozen=True)
384
- class MainLogEntry:
385
- """
386
- Represents a summary log entry for the entire logging system.
387
-
388
- Attributes:
389
- num_channels (int): The total number of active logging channels (targets).
390
- targets_types_stats (dict[str, TargetTypeStats]): Statistics grouped by target type.
391
- num_logs (int): The total number of log entries across all channels.
392
- log_level_stats (dict[str, LogLevelStats]): Overall statistics for each log level.
393
- channels_stats (Sequence[LoggerChannelStats]): A list of statistics for each active logging channel.
394
- """
395
-
396
- num_channels: int
397
- targets_types_stats: dict[str, TargetTypeStats]
398
- num_logs: int
399
- log_level_stats: dict[str, LogLevelStats]
400
- channels_stats: Sequence[LoggerChannelStats]
401
-
402
- def to_json(self) -> dict[str, Any]:
403
- """
404
- Converts the main log entry to a JSON-serializable dictionary.
405
-
406
- Nested statistics objects are converted to their JSON representations.
407
-
408
- Returns:
409
- dict[str, Any]: A dictionary representation of the main log entry.
410
- """
411
-
412
- return {
413
- "num_channels": self.num_channels,
414
- "targets_types_stats": {
415
- type_: target_type_stats.to_json()
416
- for type_, target_type_stats in self.targets_types_stats.items()
417
- },
418
- "num_logs": self.num_logs,
419
- "log_level_stats": {
420
- log_level: log_level_stats.to_json()
421
- for log_level, log_level_stats in self.log_level_stats.items()
422
- },
423
- "channels_stats": [channel_stats.to_json() for channel_stats in self.channels_stats]
424
- }
425
-
426
- def to_string(self) -> str:
427
- """
428
- Converts the main log entry to a human-readable string format.
429
-
430
- Returns:
431
- str: A multi-line string representation of the main log entry.
432
- """
433
-
434
- return "\n\n".join(
435
- f"{key}: {json.dumps(value, indent=4, ensure_ascii=False)}"
436
- for key, value in self.to_json().items()
437
- )
438
-
439
-
440
- class MainLogger:
441
- """
442
- Manages the main log file, summarizing overall logging activity.
443
-
444
- This logger is responsible for writing aggregated statistics about all active
445
- logging channels and target types to a designated file.
446
-
447
- Attributes:
448
- _nursery_object (trio.Nursery): The Trio nursery for managing concurrent tasks.
449
- _receive_channel (trio.MemoryReceiveChannel[MainLogEntry]): The receive channel for main log entries.
450
- _file_writing_stopped (Optional[trio.Event]): An event set when the file writing task stops.
451
- _is_active (bool): Flag indicating if the main logger is active.
452
- _file_path (Optional[Path]): The path to the main log file.
453
- """
454
-
455
- def __init__(
456
- self,
457
- logger_settings: LoggerSettings,
458
- nursery_object: trio.Nursery,
459
- receive_channel: trio.MemoryReceiveChannel[MainLogEntry]
460
- ):
461
- """
462
- Initializes the MainLogger.
463
-
464
- Args:
465
- logger_settings (LoggerSettings): The settings for logging, including log directory.
466
- nursery_object (trio.Nursery): The Trio nursery to spawn background tasks.
467
- receive_channel (trio.MemoryReceiveChannel[MainLogEntry]): The channel from which main log entries are received.
468
- """
469
-
470
- self._nursery_object = nursery_object
471
- self._receive_channel = receive_channel
472
- self._file_writing_stopped: Optional[trio.Event] = None
473
- self._is_active = False
474
-
475
- if logger_settings.log_dir_path is None:
476
- self._file_path = None
477
- else:
478
- self._file_path = logger_settings.log_dir_path.joinpath("__MAIN__.txt")
479
-
480
- async def close(self):
481
- """
482
- Closes the main logger, including its receive channel.
483
- """
484
-
485
- if self._receive_channel is not None:
486
- await self._receive_channel.aclose()
487
- self._receive_channel = None
488
-
489
- if self._file_writing_stopped is not None:
490
- await self._file_writing_stopped.wait()
491
-
492
- self._is_active = False
493
-
494
- async def _write_file(self):
495
- """
496
- Asynchronously writes main log entries to the file.
497
-
498
- This method continuously receives `MainLogEntry` objects from its channel
499
- and overwrites the configured file with their string representation.
500
- It runs as a background task.
501
-
502
- Raises:
503
- BaseException: If an unexpected error occurs during file writing.
504
- """
505
-
506
- try:
507
- async with await trio.open_file(self._file_path, "w+", encoding="utf-8") as file:
508
- async for log_entry in self._receive_channel:
509
- await file.write(log_entry.to_string())
510
- await file.seek(0)
511
- except* trio_end_exceptions:
512
- pass
513
- except* BaseException as error:
514
- log_exception(error)
515
- finally:
516
- if self._file_writing_stopped is not None:
517
- self._file_writing_stopped.set()
518
-
519
- async def run(self):
520
- """
521
- Starts the main logger, setting up its receive channel and file writing task.
522
-
523
- Raises:
524
- BaseException: If an error occurs during setup or if the logger fails to activate.
525
- """
526
-
527
- try:
528
- if not self._is_active:
529
- self._file_writing_stopped = trio.Event()
530
-
531
- if self._file_path is not None:
532
- self._nursery_object.start_soon(self._write_file,)
533
-
534
- self._is_active = True
535
- except* trio_end_exceptions:
536
- await self.close()
537
- except* BaseException as error:
538
- log_exception(error)
539
- await self.close()
540
-
541
-
542
- def build_main_logger(nursery_object: trio.Nursery, logger_settings: LoggerSettings) -> tuple[trio.MemorySendChannel[MainLogEntry], MainLogger]:
543
- """
544
- Builds and initializes a `MainLogger` instance along with its send channel.
545
-
546
- Args:
547
- nursery_object (trio.Nursery): The Trio nursery to associate with the logger for background tasks.
548
- logger_settings (LoggerSettings): The logger configuration settings.
549
-
550
- Returns:
551
- tuple[trio.MemorySendChannel[MainLogEntry], MainLogger]: A tuple containing
552
- the send channel for `MainLogEntry` objects and the initialized `MainLogger` instance.
553
- """
554
-
555
- send_channel, receive_channel = trio.open_memory_channel(1000)
556
- target_logger = MainLogger(logger_settings, nursery_object, receive_channel)
557
-
558
- return send_channel, target_logger