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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. osn_selenium/_functions.py +84 -0
  2. osn_selenium/_typehints.py +19 -0
  3. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  4. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  5. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  6. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  7. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  8. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  9. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  10. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  11. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  12. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  13. osn_selenium/abstract/executors/cdp/console.py +18 -0
  14. osn_selenium/abstract/executors/cdp/css.py +197 -0
  15. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  16. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  17. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  18. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  19. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  20. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  21. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  22. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  23. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  24. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  25. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  26. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  27. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  28. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  29. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  30. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  31. osn_selenium/abstract/executors/cdp/input.py +158 -0
  32. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  33. osn_selenium/abstract/executors/cdp/io.py +24 -0
  34. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  35. osn_selenium/abstract/executors/cdp/log.py +27 -0
  36. osn_selenium/abstract/executors/cdp/media.py +14 -0
  37. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  38. osn_selenium/abstract/executors/cdp/network.py +252 -0
  39. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  40. osn_selenium/abstract/executors/cdp/page.py +347 -0
  41. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  42. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  43. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  44. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  45. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  46. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  47. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  48. osn_selenium/abstract/executors/cdp/security.py +26 -0
  49. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  50. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  51. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  52. osn_selenium/abstract/executors/cdp/target.py +125 -0
  53. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  54. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  55. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  56. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  57. osn_selenium/abstract/executors/javascript.py +203 -0
  58. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  59. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  60. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  61. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  62. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  63. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  64. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  65. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  66. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  67. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  68. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  69. osn_selenium/abstract/instances/alert.py +67 -0
  70. osn_selenium/abstract/instances/browser.py +76 -0
  71. osn_selenium/abstract/instances/browsing_context.py +310 -0
  72. osn_selenium/abstract/instances/dialog.py +107 -0
  73. osn_selenium/abstract/instances/fedcm.py +133 -0
  74. osn_selenium/abstract/instances/mobile.py +79 -0
  75. osn_selenium/abstract/instances/network.py +100 -0
  76. osn_selenium/abstract/instances/permissions.py +52 -0
  77. osn_selenium/abstract/instances/script.py +109 -0
  78. osn_selenium/abstract/instances/shadow_root.py +81 -0
  79. osn_selenium/abstract/instances/storage.py +98 -0
  80. osn_selenium/abstract/instances/switch_to.py +104 -0
  81. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  82. osn_selenium/abstract/instances/web_element.py +395 -0
  83. osn_selenium/abstract/instances/web_extension.py +70 -0
  84. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  85. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  86. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  87. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  88. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  89. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  90. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  91. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  92. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  93. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  94. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  95. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  96. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  97. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  98. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  99. osn_selenium/abstract/webdriver/core/base.py +298 -0
  100. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  101. osn_selenium/abstract/webdriver/core/components.py +82 -0
  102. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  103. osn_selenium/abstract/webdriver/core/element.py +55 -0
  104. osn_selenium/abstract/webdriver/core/file.py +82 -0
  105. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  106. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  107. osn_selenium/abstract/webdriver/core/script.py +88 -0
  108. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  109. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  110. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  111. osn_selenium/abstract/webdriver/core/window.py +237 -0
  112. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  113. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  114. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  115. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  116. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  117. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  118. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  119. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  120. osn_selenium/base_mixin.py +122 -0
  121. osn_selenium/browsers_handler/__init__.py +47 -17
  122. osn_selenium/browsers_handler/_linux.py +226 -0
  123. osn_selenium/browsers_handler/_windows.py +21 -14
  124. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  125. osn_selenium/dev_tools/_decorators.py +140 -0
  126. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  127. osn_selenium/dev_tools/_functions.py +174 -0
  128. osn_selenium/dev_tools/_system_utils.py +35 -0
  129. osn_selenium/dev_tools/_typehints.py +32 -0
  130. osn_selenium/dev_tools/_validators.py +227 -0
  131. osn_selenium/dev_tools/_wrappers.py +95 -0
  132. osn_selenium/dev_tools/domains/__init__.py +7 -40
  133. osn_selenium/dev_tools/domains/abstract.py +98 -254
  134. osn_selenium/dev_tools/domains/fetch.py +229 -906
  135. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  136. osn_selenium/dev_tools/filters.py +40 -0
  137. osn_selenium/dev_tools/logger/main.py +226 -0
  138. osn_selenium/dev_tools/logger/models.py +232 -0
  139. osn_selenium/dev_tools/logger/target.py +258 -0
  140. osn_selenium/dev_tools/manager/__init__.py +16 -0
  141. osn_selenium/dev_tools/manager/base.py +147 -0
  142. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  143. osn_selenium/dev_tools/manager/logging.py +153 -0
  144. osn_selenium/dev_tools/manager/settings.py +89 -0
  145. osn_selenium/dev_tools/manager/targets.py +175 -0
  146. osn_selenium/dev_tools/models.py +49 -0
  147. osn_selenium/dev_tools/settings.py +135 -0
  148. osn_selenium/dev_tools/target/__init__.py +16 -0
  149. osn_selenium/dev_tools/target/base.py +438 -0
  150. osn_selenium/dev_tools/target/detach.py +54 -0
  151. osn_selenium/dev_tools/target/discovery.py +112 -0
  152. osn_selenium/dev_tools/target/events.py +120 -0
  153. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  154. osn_selenium/dev_tools/target/lifecycle.py +179 -0
  155. osn_selenium/dev_tools/target/logging.py +155 -0
  156. osn_selenium/exceptions/__init__.py +1 -0
  157. osn_selenium/exceptions/base.py +9 -0
  158. osn_selenium/exceptions/configuration.py +84 -0
  159. osn_selenium/exceptions/devtools.py +114 -0
  160. osn_selenium/exceptions/flags.py +45 -0
  161. osn_selenium/exceptions/instance.py +92 -0
  162. osn_selenium/exceptions/javascript.py +31 -0
  163. osn_selenium/exceptions/logic.py +31 -0
  164. osn_selenium/exceptions/path.py +77 -0
  165. osn_selenium/exceptions/platform.py +33 -0
  166. osn_selenium/exceptions/protocol.py +86 -0
  167. osn_selenium/exceptions/webdriver.py +44 -0
  168. osn_selenium/exceptions/window.py +63 -0
  169. osn_selenium/executors/__init__.py +1 -0
  170. osn_selenium/executors/sync/__init__.py +1 -0
  171. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  172. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  173. osn_selenium/executors/sync/cdp/animation.py +50 -0
  174. osn_selenium/executors/sync/cdp/audits.py +48 -0
  175. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  176. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  177. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  178. osn_selenium/executors/sync/cdp/browser.py +131 -0
  179. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  180. osn_selenium/executors/sync/cdp/cast.py +38 -0
  181. osn_selenium/executors/sync/cdp/console.py +24 -0
  182. osn_selenium/executors/sync/cdp/css.py +187 -0
  183. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  184. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  185. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  186. osn_selenium/executors/sync/cdp/dom.py +310 -0
  187. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  188. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  189. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  190. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  191. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  192. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  193. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  194. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  195. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  196. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  197. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  198. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  199. osn_selenium/executors/sync/cdp/input.py +233 -0
  200. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  201. osn_selenium/executors/sync/cdp/io.py +33 -0
  202. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  203. osn_selenium/executors/sync/cdp/log.py +35 -0
  204. osn_selenium/executors/sync/cdp/media.py +21 -0
  205. osn_selenium/executors/sync/cdp/memory.py +62 -0
  206. osn_selenium/executors/sync/cdp/network.py +287 -0
  207. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  208. osn_selenium/executors/sync/cdp/page.py +365 -0
  209. osn_selenium/executors/sync/cdp/performance.py +33 -0
  210. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  211. osn_selenium/executors/sync/cdp/preload.py +21 -0
  212. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  213. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  214. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  215. osn_selenium/executors/sync/cdp/schema.py +23 -0
  216. osn_selenium/executors/sync/cdp/security.py +30 -0
  217. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  218. osn_selenium/executors/sync/cdp/storage.py +151 -0
  219. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  220. osn_selenium/executors/sync/cdp/target.py +147 -0
  221. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  222. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  223. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  224. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  225. osn_selenium/executors/sync/javascript.py +79 -0
  226. osn_selenium/executors/trio_threads/__init__.py +1 -0
  227. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  228. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  229. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  230. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  231. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  232. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  233. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  234. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  235. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  236. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  237. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  238. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  239. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  240. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  241. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  242. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  243. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  244. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  245. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  246. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  247. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  248. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  249. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  250. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  251. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  252. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  253. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  254. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  255. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  256. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  257. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  258. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  259. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  260. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  261. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  262. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  263. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  264. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  265. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  266. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  267. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  268. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  269. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  270. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  271. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  272. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  273. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  274. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  275. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  276. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  277. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  278. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  279. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  280. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  281. osn_selenium/executors/trio_threads/javascript.py +90 -0
  282. osn_selenium/executors/unified/__init__.py +1 -0
  283. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  284. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  285. osn_selenium/executors/unified/cdp/animation.py +50 -0
  286. osn_selenium/executors/unified/cdp/audits.py +45 -0
  287. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  288. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  289. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  290. osn_selenium/executors/unified/cdp/browser.py +143 -0
  291. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  292. osn_selenium/executors/unified/cdp/cast.py +32 -0
  293. osn_selenium/executors/unified/cdp/console.py +18 -0
  294. osn_selenium/executors/unified/cdp/css.py +237 -0
  295. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  296. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  297. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  298. osn_selenium/executors/unified/cdp/dom.py +380 -0
  299. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  300. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  301. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  302. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  303. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  304. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  305. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  306. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  307. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  308. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  309. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  310. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  311. osn_selenium/executors/unified/cdp/input.py +254 -0
  312. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  313. osn_selenium/executors/unified/cdp/io.py +29 -0
  314. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  315. osn_selenium/executors/unified/cdp/log.py +29 -0
  316. osn_selenium/executors/unified/cdp/media.py +15 -0
  317. osn_selenium/executors/unified/cdp/memory.py +59 -0
  318. osn_selenium/executors/unified/cdp/network.py +323 -0
  319. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  320. osn_selenium/executors/unified/cdp/page.py +410 -0
  321. osn_selenium/executors/unified/cdp/performance.py +27 -0
  322. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  323. osn_selenium/executors/unified/cdp/preload.py +15 -0
  324. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  325. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  326. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  327. osn_selenium/executors/unified/cdp/schema.py +17 -0
  328. osn_selenium/executors/unified/cdp/security.py +27 -0
  329. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  330. osn_selenium/executors/unified/cdp/storage.py +178 -0
  331. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  332. osn_selenium/executors/unified/cdp/target.py +165 -0
  333. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  334. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  335. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  336. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  337. osn_selenium/executors/unified/javascript.py +108 -0
  338. osn_selenium/flags/__init__.py +1 -0
  339. osn_selenium/flags/_functions.py +45 -0
  340. osn_selenium/flags/_typehints.py +34 -0
  341. osn_selenium/flags/_validators.py +101 -0
  342. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +165 -243
  343. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +133 -371
  344. osn_selenium/flags/chrome.py +259 -0
  345. osn_selenium/flags/edge.py +259 -0
  346. osn_selenium/flags/models/__init__.py +1 -0
  347. osn_selenium/flags/models/base.py +130 -0
  348. osn_selenium/flags/models/blink.py +263 -0
  349. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  350. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  351. osn_selenium/flags/models/values.py +44 -0
  352. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  353. osn_selenium/flags/yandex.py +259 -0
  354. osn_selenium/instances/__init__.py +1 -0
  355. osn_selenium/instances/_functions.py +242 -0
  356. osn_selenium/instances/_typehints.py +148 -0
  357. osn_selenium/instances/_utils.py +143 -0
  358. osn_selenium/instances/convert.py +287 -0
  359. osn_selenium/instances/protocols.py +105 -0
  360. osn_selenium/instances/sync/__init__.py +1 -0
  361. osn_selenium/instances/sync/action_chains/__init__.py +26 -0
  362. osn_selenium/instances/sync/action_chains/base.py +74 -0
  363. osn_selenium/instances/sync/action_chains/click.py +61 -0
  364. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  365. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  366. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  367. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  368. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  369. osn_selenium/instances/sync/action_chains/move.py +46 -0
  370. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  371. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  372. osn_selenium/instances/sync/alert.py +69 -0
  373. osn_selenium/instances/sync/browser.py +72 -0
  374. osn_selenium/instances/sync/browsing_context.py +193 -0
  375. osn_selenium/instances/sync/dialog.py +81 -0
  376. osn_selenium/instances/sync/fedcm.py +92 -0
  377. osn_selenium/instances/sync/mobile.py +75 -0
  378. osn_selenium/instances/sync/network.py +90 -0
  379. osn_selenium/instances/sync/permissions.py +80 -0
  380. osn_selenium/instances/sync/script.py +77 -0
  381. osn_selenium/instances/sync/shadow_root.py +91 -0
  382. osn_selenium/instances/sync/storage.py +91 -0
  383. osn_selenium/instances/sync/switch_to.py +92 -0
  384. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  385. osn_selenium/instances/sync/web_element.py +179 -0
  386. osn_selenium/instances/sync/web_extension.py +77 -0
  387. osn_selenium/instances/trio_threads/__init__.py +1 -0
  388. osn_selenium/instances/trio_threads/action_chains/__init__.py +26 -0
  389. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  390. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  391. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  392. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  393. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  394. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  395. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  396. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  397. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  399. osn_selenium/instances/trio_threads/alert.py +87 -0
  400. osn_selenium/instances/trio_threads/browser.py +90 -0
  401. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  402. osn_selenium/instances/trio_threads/dialog.py +99 -0
  403. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  404. osn_selenium/instances/trio_threads/mobile.py +93 -0
  405. osn_selenium/instances/trio_threads/network.py +108 -0
  406. osn_selenium/instances/trio_threads/permissions.py +102 -0
  407. osn_selenium/instances/trio_threads/script.py +95 -0
  408. osn_selenium/instances/trio_threads/shadow_root.py +123 -0
  409. osn_selenium/instances/trio_threads/storage.py +109 -0
  410. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  411. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  412. osn_selenium/instances/trio_threads/web_element.py +217 -0
  413. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  414. osn_selenium/instances/unified/__init__.py +1 -0
  415. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  416. osn_selenium/instances/unified/action_chains/base.py +31 -0
  417. osn_selenium/instances/unified/action_chains/click.py +27 -0
  418. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  419. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  420. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  421. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  422. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  423. osn_selenium/instances/unified/action_chains/move.py +24 -0
  424. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  425. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  426. osn_selenium/instances/unified/alert.py +29 -0
  427. osn_selenium/instances/unified/browser.py +33 -0
  428. osn_selenium/instances/unified/browsing_context.py +151 -0
  429. osn_selenium/instances/unified/dialog.py +42 -0
  430. osn_selenium/instances/unified/fedcm.py +48 -0
  431. osn_selenium/instances/unified/mobile.py +36 -0
  432. osn_selenium/instances/unified/network.py +50 -0
  433. osn_selenium/instances/unified/permissions.py +43 -0
  434. osn_selenium/instances/unified/script.py +38 -0
  435. osn_selenium/instances/unified/shadow_root.py +46 -0
  436. osn_selenium/instances/unified/storage.py +48 -0
  437. osn_selenium/instances/unified/switch_to.py +49 -0
  438. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  439. osn_selenium/instances/unified/web_element.py +145 -0
  440. osn_selenium/instances/unified/web_extension.py +38 -0
  441. osn_selenium/javascript/__init__.py +1 -0
  442. osn_selenium/javascript/_functions.py +63 -0
  443. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  444. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  445. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  446. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  447. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  448. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  449. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  450. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  451. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  452. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  453. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  454. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  455. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  456. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  457. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  458. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  459. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  460. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  461. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  462. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  463. osn_selenium/javascript/functions.py +44 -0
  464. osn_selenium/javascript/models.py +35 -0
  465. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  466. osn_selenium/models.py +139 -0
  467. osn_selenium/webdrivers/_args_helpers.py +181 -0
  468. osn_selenium/webdrivers/_bridges.py +57 -0
  469. osn_selenium/webdrivers/_decorators.py +83 -0
  470. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  471. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  472. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  473. osn_selenium/webdrivers/_typehints.py +10 -0
  474. osn_selenium/webdrivers/protocols.py +50 -0
  475. osn_selenium/webdrivers/sync/__init__.py +1 -0
  476. osn_selenium/webdrivers/sync/blink/__init__.py +114 -0
  477. osn_selenium/webdrivers/sync/blink/base.py +128 -0
  478. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  479. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  480. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  481. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  482. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  483. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  484. osn_selenium/webdrivers/sync/chrome/__init__.py +67 -0
  485. osn_selenium/webdrivers/sync/chrome/base.py +106 -0
  486. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  487. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  488. osn_selenium/webdrivers/sync/core/__init__.py +91 -0
  489. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  490. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  491. osn_selenium/webdrivers/sync/core/base.py +167 -0
  492. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  493. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  494. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  495. osn_selenium/webdrivers/sync/core/element.py +42 -0
  496. osn_selenium/webdrivers/sync/core/file.py +40 -0
  497. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  498. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  499. osn_selenium/webdrivers/sync/core/script.py +53 -0
  500. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  501. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  502. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  503. osn_selenium/webdrivers/sync/core/window.py +99 -0
  504. osn_selenium/webdrivers/sync/edge/__init__.py +67 -0
  505. osn_selenium/webdrivers/sync/edge/base.py +102 -0
  506. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  507. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  508. osn_selenium/webdrivers/sync/yandex/__init__.py +67 -0
  509. osn_selenium/webdrivers/sync/yandex/base.py +99 -0
  510. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  511. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  512. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  513. osn_selenium/webdrivers/trio_threads/blink/__init__.py +124 -0
  514. osn_selenium/webdrivers/trio_threads/blink/base.py +133 -0
  515. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  516. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  517. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  518. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  519. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  520. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  521. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +81 -0
  522. osn_selenium/webdrivers/trio_threads/chrome/base.py +107 -0
  523. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  524. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  525. osn_selenium/webdrivers/trio_threads/core/__init__.py +109 -0
  526. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  527. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  528. osn_selenium/webdrivers/trio_threads/core/base.py +191 -0
  529. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  530. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  531. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  532. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  533. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  534. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  535. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  536. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  537. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  538. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  539. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  540. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  541. osn_selenium/webdrivers/trio_threads/edge/__init__.py +81 -0
  542. osn_selenium/webdrivers/trio_threads/edge/base.py +103 -0
  543. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  544. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  545. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +81 -0
  546. osn_selenium/webdrivers/trio_threads/yandex/base.py +100 -0
  547. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  548. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  549. osn_selenium/webdrivers/unified/__init__.py +1 -0
  550. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  551. osn_selenium/webdrivers/unified/blink/base.py +131 -0
  552. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  553. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  554. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  555. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  556. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  557. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  558. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  559. osn_selenium/webdrivers/unified/chrome/base.py +54 -0
  560. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  561. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  562. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  563. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  564. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  565. osn_selenium/webdrivers/unified/core/base.py +132 -0
  566. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  567. osn_selenium/webdrivers/unified/core/components.py +32 -0
  568. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  569. osn_selenium/webdrivers/unified/core/element.py +24 -0
  570. osn_selenium/webdrivers/unified/core/file.py +35 -0
  571. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  572. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  573. osn_selenium/webdrivers/unified/core/script.py +32 -0
  574. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  575. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  576. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  577. osn_selenium/webdrivers/unified/core/window.py +135 -0
  578. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  579. osn_selenium/webdrivers/unified/edge/base.py +52 -0
  580. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  581. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  582. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  583. osn_selenium/webdrivers/unified/yandex/base.py +54 -0
  584. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  585. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  586. osn_selenium-1.0.0.dist-info/METADATA +239 -0
  587. osn_selenium-1.0.0.dist-info/RECORD +608 -0
  588. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/WHEEL +1 -1
  589. osn_selenium/captcha_workers/__init__.py +0 -26
  590. osn_selenium/dev_tools/_types.py +0 -22
  591. osn_selenium/dev_tools/errors.py +0 -89
  592. osn_selenium/dev_tools/logger.py +0 -558
  593. osn_selenium/dev_tools/manager.py +0 -1551
  594. osn_selenium/dev_tools/utils.py +0 -509
  595. osn_selenium/errors.py +0 -16
  596. osn_selenium/types.py +0 -118
  597. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  598. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  599. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  600. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  601. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  602. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  603. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  604. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  605. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  606. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  607. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  608. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  609. osn_selenium/webdrivers/_functions.py +0 -504
  610. osn_selenium/webdrivers/types.py +0 -390
  611. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  612. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  613. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  614. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  615. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  616. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  617. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  618. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  619. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  620. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  621. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  622. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  623. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  624. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  628. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,108 @@
1
+ import trio
2
+ from osn_selenium.base_mixin import TrioThreadMixin
3
+ from typing import (
4
+ Callable,
5
+ List,
6
+ Optional,
7
+ Self
8
+ )
9
+ from osn_selenium.instances._typehints import NETWORK_TYPEHINT
10
+ from osn_selenium.instances.convert import get_legacy_instance
11
+ from osn_selenium.instances.unified.network import UnifiedNetwork
12
+ from osn_selenium.abstract.instances.network import AbstractNetwork
13
+ from osn_selenium.exceptions.instance import (
14
+ CannotConvertTypeError
15
+ )
16
+ from selenium.webdriver.common.bidi.network import (
17
+ Network as legacyNetwork
18
+ )
19
+
20
+
21
+ __all__ = ["Network"]
22
+
23
+
24
+ class Network(UnifiedNetwork, TrioThreadMixin, AbstractNetwork):
25
+ """
26
+ Wrapper for the legacy Selenium BiDi Network instance.
27
+
28
+ Allows interception of network requests, adding authentication handlers,
29
+ and managing request callbacks.
30
+ """
31
+
32
+ def __init__(
33
+ self,
34
+ selenium_network: legacyNetwork,
35
+ lock: trio.Lock,
36
+ limiter: trio.CapacityLimiter,
37
+ ) -> None:
38
+ """
39
+ Initializes the Network wrapper.
40
+
41
+ Args:
42
+ selenium_network (legacyNetwork): The legacy Selenium Network instance to wrap.
43
+ lock (trio.Lock): A Trio lock for managing concurrent access.
44
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
45
+ """
46
+
47
+ UnifiedNetwork.__init__(self, selenium_network=selenium_network)
48
+
49
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
50
+
51
+ async def add_auth_handler(self, username: str, password: str) -> int:
52
+ return await self.sync_to_trio(sync_function=self._add_auth_handler_impl)(username=username, password=password)
53
+
54
+ async def add_request_handler(
55
+ self,
56
+ event: str,
57
+ callback: Callable,
58
+ url_patterns: Optional[List[str]] = None,
59
+ contexts: Optional[List[str]] = None,
60
+ ) -> int:
61
+ return await self.sync_to_trio(sync_function=self._add_request_handler_impl)(
62
+ event=event,
63
+ callback=callback,
64
+ url_patterns=url_patterns,
65
+ contexts=contexts
66
+ )
67
+
68
+ async def clear_request_handlers(self) -> None:
69
+ await self.sync_to_trio(sync_function=self._clear_request_handlers_impl)()
70
+
71
+ @classmethod
72
+ def from_legacy(
73
+ cls,
74
+ legacy_object: NETWORK_TYPEHINT,
75
+ lock: trio.Lock,
76
+ limiter: trio.CapacityLimiter,
77
+ ) -> Self:
78
+ """
79
+ Creates an instance from a legacy Selenium Network object.
80
+
81
+ This factory method is used to wrap an existing Selenium Network
82
+ instance into the new interface.
83
+
84
+ Args:
85
+ legacy_object (NETWORK_TYPEHINT): The legacy Selenium Network instance or its wrapper.
86
+ lock (trio.Lock): A Trio lock for managing concurrent access.
87
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
88
+
89
+ Returns:
90
+ Self: A new instance of a class implementing Network.
91
+ """
92
+
93
+ legacy_network_obj = get_legacy_instance(instance=legacy_object)
94
+
95
+ if not isinstance(legacy_network_obj, legacyNetwork):
96
+ raise CannotConvertTypeError(from_=legacyNetwork, to_=legacy_object)
97
+
98
+ return cls(selenium_network=legacy_network_obj, lock=lock, limiter=limiter)
99
+
100
+ @property
101
+ def legacy(self) -> legacyNetwork:
102
+ return self._legacy_impl
103
+
104
+ async def remove_auth_handler(self, callback_id: int) -> None:
105
+ await self.sync_to_trio(sync_function=self._remove_auth_handler_impl)(callback_id=callback_id)
106
+
107
+ async def remove_request_handler(self, event: str, callback_id: int) -> None:
108
+ await self.sync_to_trio(sync_function=self._remove_request_handler_impl)(event=event, callback_id=callback_id)
@@ -0,0 +1,102 @@
1
+ import trio
2
+ from osn_selenium.base_mixin import TrioThreadMixin
3
+ from typing import (
4
+ Any,
5
+ Dict,
6
+ Optional,
7
+ Self,
8
+ Union
9
+ )
10
+ from osn_selenium.instances.convert import get_legacy_instance
11
+ from osn_selenium.instances._typehints import PERMISSIONS_TYPEHINT
12
+ from osn_selenium.exceptions.instance import (
13
+ CannotConvertTypeError
14
+ )
15
+ from osn_selenium.instances.unified.permissions import UnifiedPermissions
16
+ from osn_selenium.abstract.instances.permissions import AbstractPermissions
17
+ from selenium.webdriver.common.bidi.permissions import (
18
+ PermissionDescriptor,
19
+ Permissions as legacyPermissions
20
+ )
21
+
22
+
23
+ __all__ = ["Permissions"]
24
+
25
+
26
+ class Permissions(UnifiedPermissions, TrioThreadMixin, AbstractPermissions):
27
+ """
28
+ Wrapper for the legacy Selenium Permissions instance.
29
+
30
+ Provides methods to set and modify browser permissions (e.g., camera, microphone, geolocation)
31
+ via the WebDriver BiDi protocol.
32
+ """
33
+
34
+ def __init__(
35
+ self,
36
+ selenium_permissions: legacyPermissions,
37
+ lock: trio.Lock,
38
+ limiter: trio.CapacityLimiter,
39
+ ) -> None:
40
+ """
41
+ Initializes the Permissions wrapper.
42
+
43
+ Args:
44
+ selenium_permissions (legacyPermissions): The legacy Selenium Permissions instance to wrap.
45
+ lock (trio.Lock): A Trio lock for managing concurrent access.
46
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
47
+ """
48
+
49
+ UnifiedPermissions.__init__(self, selenium_permissions=selenium_permissions)
50
+
51
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
52
+
53
+ @classmethod
54
+ def from_legacy(
55
+ cls,
56
+ legacy_object: PERMISSIONS_TYPEHINT,
57
+ lock: trio.Lock,
58
+ limiter: trio.CapacityLimiter,
59
+ ) -> Self:
60
+ """
61
+ Creates an instance from a legacy Selenium Permissions object.
62
+
63
+ This factory method is used to wrap an existing Selenium Permissions
64
+ instance into the new interface.
65
+
66
+ Args:
67
+ legacy_object (PERMISSIONS_TYPEHINT): The legacy Selenium Permissions instance or its wrapper.
68
+ lock (trio.Lock): A Trio lock for managing concurrent access.
69
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
70
+
71
+ Returns:
72
+ Self: A new instance of a class implementing Permissions.
73
+ """
74
+
75
+ legacy_permissions_obj = get_legacy_instance(instance=legacy_object)
76
+
77
+ if not isinstance(legacy_permissions_obj, legacyPermissions):
78
+ raise CannotConvertTypeError(from_=legacyPermissions, to_=legacy_object)
79
+
80
+ return cls(
81
+ selenium_permissions=legacy_permissions_obj,
82
+ lock=lock,
83
+ limiter=limiter
84
+ )
85
+
86
+ @property
87
+ def legacy(self) -> legacyPermissions:
88
+ return self._legacy_impl
89
+
90
+ async def set_permission(
91
+ self,
92
+ descriptor: Union[Dict[str, Any], PermissionDescriptor],
93
+ state: str,
94
+ origin: str,
95
+ user_context: Optional[str] = None,
96
+ ) -> None:
97
+ await self.sync_to_trio(sync_function=self._set_permission_impl)(
98
+ descriptor=descriptor,
99
+ state=state,
100
+ origin=origin,
101
+ user_context=user_context
102
+ )
@@ -0,0 +1,95 @@
1
+ import trio
2
+ from typing import Any, Callable, Self
3
+ from osn_selenium.base_mixin import TrioThreadMixin
4
+ from osn_selenium.instances._typehints import SCRIPT_TYPEHINT
5
+ from osn_selenium.instances.convert import get_legacy_instance
6
+ from osn_selenium.instances.unified.script import UnifiedScript
7
+ from osn_selenium.abstract.instances.script import AbstractScript
8
+ from osn_selenium.exceptions.instance import (
9
+ CannotConvertTypeError
10
+ )
11
+ from selenium.webdriver.common.bidi.script import (
12
+ Script as legacyScript
13
+ )
14
+
15
+
16
+ __all__ = ["Script"]
17
+
18
+
19
+ class Script(UnifiedScript, TrioThreadMixin, AbstractScript):
20
+ """
21
+ Wrapper for the legacy Selenium BiDi Script instance.
22
+
23
+ Facilitates execution of JavaScript within specific contexts, adding preload scripts,
24
+ and handling console messages or JS errors.
25
+ """
26
+
27
+ def __init__(
28
+ self,
29
+ selenium_script: legacyScript,
30
+ lock: trio.Lock,
31
+ limiter: trio.CapacityLimiter,
32
+ ) -> None:
33
+ """
34
+ Initializes the Script wrapper.
35
+
36
+ Args:
37
+ selenium_script (legacyScript): The legacy Selenium Script instance to wrap.
38
+ lock (trio.Lock): A Trio lock for managing concurrent access.
39
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
40
+ """
41
+
42
+ UnifiedScript.__init__(self, selenium_script=selenium_script)
43
+
44
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
45
+
46
+ async def add_console_message_handler(self, handler: Callable[[Any], None]) -> int:
47
+ return await self.sync_to_trio(sync_function=self._add_console_message_handler_impl)(handler=handler)
48
+
49
+ async def add_javascript_error_handler(self, handler: Callable[[Any], None]) -> int:
50
+ return await self.sync_to_trio(sync_function=self._add_javascript_error_handler_impl)(handler=handler)
51
+
52
+ async def execute(self, script: str, *args: Any) -> Any:
53
+ return await self.sync_to_trio(sync_function=self._execute_impl)(script, *args)
54
+
55
+ @classmethod
56
+ def from_legacy(
57
+ cls,
58
+ legacy_object: SCRIPT_TYPEHINT,
59
+ lock: trio.Lock,
60
+ limiter: trio.CapacityLimiter,
61
+ ) -> Self:
62
+ """
63
+ Creates an instance from a legacy Selenium Script object.
64
+
65
+ This factory method is used to wrap an existing Selenium Script
66
+ instance into the new interface.
67
+
68
+ Args:
69
+ legacy_object (SCRIPT_TYPEHINT): The legacy Selenium Script instance or its wrapper.
70
+ lock (trio.Lock): A Trio lock for managing concurrent access.
71
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
72
+
73
+ Returns:
74
+ Self: A new instance of a class implementing Script.
75
+ """
76
+
77
+ legacy_script_obj = get_legacy_instance(instance=legacy_object)
78
+
79
+ if not isinstance(legacy_script_obj, legacyScript):
80
+ raise CannotConvertTypeError(from_=legacyScript, to_=legacy_object)
81
+
82
+ return cls(selenium_script=legacy_script_obj, lock=lock, limiter=limiter)
83
+
84
+ @property
85
+ def legacy(self) -> legacyScript:
86
+ return self._legacy_impl
87
+
88
+ async def pin(self, script: str) -> str:
89
+ return await self.sync_to_trio(sync_function=self._pin_impl)(script=script)
90
+
91
+ async def remove_console_message_handler(self, id: int) -> None:
92
+ await self.sync_to_trio(sync_function=self._remove_console_message_handler_impl)(id=id)
93
+
94
+ async def unpin(self, script_id: str) -> None:
95
+ await self.sync_to_trio(sync_function=self._unpin_impl)(script_id=script_id)
@@ -0,0 +1,123 @@
1
+ import trio
2
+ from selenium.webdriver.common.by import By
3
+ from osn_selenium.base_mixin import TrioThreadMixin
4
+ from typing import (
5
+ List,
6
+ Optional,
7
+ Self,
8
+ TYPE_CHECKING
9
+ )
10
+ from osn_selenium.instances._typehints import SHADOW_ROOT_TYPEHINT
11
+ from osn_selenium.exceptions.instance import (
12
+ CannotConvertTypeError
13
+ )
14
+ from osn_selenium.instances.unified.shadow_root import UnifiedShadowRoot
15
+ from osn_selenium.abstract.instances.shadow_root import AbstractShadowRoot
16
+ from selenium.webdriver.remote.shadowroot import (
17
+ ShadowRoot as legacyShadowRoot
18
+ )
19
+ from osn_selenium.instances.convert import (
20
+ get_legacy_instance,
21
+ get_trio_thread_instance_wrapper
22
+ )
23
+
24
+
25
+ __all__ = ["ShadowRoot"]
26
+
27
+ if TYPE_CHECKING:
28
+ from osn_selenium.instances.trio_threads.web_element import WebElement
29
+
30
+
31
+ class ShadowRoot(UnifiedShadowRoot, TrioThreadMixin, AbstractShadowRoot):
32
+ """
33
+ Wrapper for the legacy Selenium ShadowRoot instance.
34
+
35
+ Represents the root of a Shadow DOM tree, allowing element search
36
+ within the encapsulated shadow scope.
37
+ """
38
+
39
+ def __init__(
40
+ self,
41
+ selenium_shadow_root: legacyShadowRoot,
42
+ lock: trio.Lock,
43
+ limiter: trio.CapacityLimiter,
44
+ ) -> None:
45
+ """
46
+ Initializes the ShadowRoot wrapper.
47
+
48
+ Args:
49
+ selenium_shadow_root (legacyShadowRoot): The legacy Selenium ShadowRoot instance to wrap.
50
+ lock (trio.Lock): A Trio lock for managing concurrent access.
51
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
52
+ """
53
+
54
+ UnifiedShadowRoot.__init__(self, selenium_shadow_root=selenium_shadow_root)
55
+
56
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
57
+
58
+ async def find_element(self, by: str = By.ID, value: Optional[str] = None) -> "WebElement":
59
+ legacy_element = await self.sync_to_trio(sync_function=self._find_element_impl)(by=by, value=value)
60
+
61
+ from osn_selenium.instances.trio_threads.web_element import WebElement
62
+
63
+ return get_trio_thread_instance_wrapper(
64
+ wrapper_class=WebElement,
65
+ legacy_object=legacy_element,
66
+ lock=self._lock,
67
+ limiter=self._capacity_limiter
68
+ )
69
+
70
+ async def find_elements(self, by: str = By.ID, value: Optional[str] = None) -> List["WebElement"]:
71
+ legacy_elements = await self.sync_to_trio(sync_function=self._find_elements_impl)(by=by, value=value)
72
+
73
+ from osn_selenium.instances.trio_threads.web_element import WebElement
74
+
75
+ return [
76
+ get_trio_thread_instance_wrapper(
77
+ wrapper_class=WebElement,
78
+ legacy_object=legacy_element,
79
+ lock=self._lock,
80
+ limiter=self._capacity_limiter
81
+ )
82
+ for legacy_element in legacy_elements
83
+ ]
84
+
85
+ @classmethod
86
+ def from_legacy(
87
+ cls,
88
+ legacy_object: SHADOW_ROOT_TYPEHINT,
89
+ lock: trio.Lock,
90
+ limiter: trio.CapacityLimiter,
91
+ ) -> Self:
92
+ """
93
+ Creates an instance from a legacy Selenium ShadowRoot object.
94
+
95
+ This factory method is used to wrap an existing Selenium ShadowRoot
96
+ instance into the new interface.
97
+
98
+ Args:
99
+ legacy_object (SHADOW_ROOT_TYPEHINT): The legacy Selenium ShadowRoot instance or its wrapper.
100
+ lock (trio.Lock): A Trio lock for managing concurrent access.
101
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
102
+
103
+ Returns:
104
+ Self: A new instance of a class implementing ShadowRoot.
105
+ """
106
+
107
+ legacy_shadow_root_obj = get_legacy_instance(instance=legacy_object)
108
+
109
+ if not isinstance(legacy_shadow_root_obj, legacyShadowRoot):
110
+ raise CannotConvertTypeError(from_=legacyShadowRoot, to_=legacy_object)
111
+
112
+ return cls(
113
+ selenium_shadow_root=legacy_shadow_root_obj,
114
+ lock=lock,
115
+ limiter=limiter
116
+ )
117
+
118
+ async def id(self) -> str:
119
+ return await self.sync_to_trio(sync_function=self._id_impl)()
120
+
121
+ @property
122
+ def legacy(self) -> legacyShadowRoot:
123
+ return self._legacy_impl
@@ -0,0 +1,109 @@
1
+ import trio
2
+ from typing import (
3
+ Optional,
4
+ Self,
5
+ Union
6
+ )
7
+ from osn_selenium.base_mixin import TrioThreadMixin
8
+ from osn_selenium.instances._typehints import STORAGE_TYPEHINT
9
+ from osn_selenium.instances.convert import get_legacy_instance
10
+ from osn_selenium.instances.unified.storage import UnifiedStorage
11
+ from osn_selenium.abstract.instances.storage import AbstractStorage
12
+ from osn_selenium.exceptions.instance import (
13
+ CannotConvertTypeError
14
+ )
15
+ from selenium.webdriver.common.bidi.storage import (
16
+ BrowsingContextPartitionDescriptor,
17
+ CookieFilter,
18
+ DeleteCookiesResult,
19
+ GetCookiesResult,
20
+ PartialCookie,
21
+ SetCookieResult,
22
+ Storage as legacyStorage,
23
+ StorageKeyPartitionDescriptor
24
+ )
25
+
26
+
27
+ __all__ = ["Storage"]
28
+
29
+
30
+ class Storage(UnifiedStorage, TrioThreadMixin, AbstractStorage):
31
+ """
32
+ Wrapper for the legacy Selenium BiDi Storage instance.
33
+
34
+ Manages browser storage mechanisms, primarily focusing on getting, setting,
35
+ and deleting cookies with specific filters and partition descriptors.
36
+ """
37
+
38
+ def __init__(
39
+ self,
40
+ selenium_storage: legacyStorage,
41
+ lock: trio.Lock,
42
+ limiter: trio.CapacityLimiter,
43
+ ) -> None:
44
+ """
45
+ Initializes the Storage wrapper.
46
+
47
+ Args:
48
+ selenium_storage (legacyStorage): The legacy Selenium Storage instance to wrap.
49
+ lock (trio.Lock): A Trio lock for managing concurrent access.
50
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
51
+ """
52
+
53
+ UnifiedStorage.__init__(self, selenium_storage=selenium_storage)
54
+
55
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
56
+
57
+ async def delete_cookies(
58
+ self,
59
+ filter: Optional[CookieFilter] = None,
60
+ partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
61
+ ) -> DeleteCookiesResult:
62
+ return await self.sync_to_trio(sync_function=self._delete_cookies_impl)(filter=filter, partition=partition)
63
+
64
+ @classmethod
65
+ def from_legacy(
66
+ cls,
67
+ legacy_object: STORAGE_TYPEHINT,
68
+ lock: trio.Lock,
69
+ limiter: trio.CapacityLimiter,
70
+ ) -> Self:
71
+ """
72
+ Creates an instance from a legacy Selenium Storage object.
73
+
74
+ This factory method is used to wrap an existing Selenium Storage
75
+ instance into the new interface.
76
+
77
+ Args:
78
+ legacy_object (STORAGE_TYPEHINT): The legacy Selenium Storage instance or its wrapper.
79
+ lock (trio.Lock): A Trio lock for managing concurrent access.
80
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
81
+
82
+ Returns:
83
+ Self: A new instance of a class implementing Storage.
84
+ """
85
+
86
+ legacy_storage_obj = get_legacy_instance(instance=legacy_object)
87
+
88
+ if not isinstance(legacy_storage_obj, legacyStorage):
89
+ raise CannotConvertTypeError(from_=legacyStorage, to_=legacy_object)
90
+
91
+ return cls(selenium_storage=legacy_storage_obj, lock=lock, limiter=limiter)
92
+
93
+ async def get_cookies(
94
+ self,
95
+ filter: Optional[CookieFilter] = None,
96
+ partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
97
+ ) -> GetCookiesResult:
98
+ return await self.sync_to_trio(sync_function=self._get_cookies_impl)(filter=filter, partition=partition)
99
+
100
+ @property
101
+ def legacy(self) -> legacyStorage:
102
+ return self._legacy_impl
103
+
104
+ async def set_cookie(
105
+ self,
106
+ cookie: PartialCookie,
107
+ partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
108
+ ) -> SetCookieResult:
109
+ return await self.sync_to_trio(sync_function=self._set_cookie_impl)(cookie=cookie, partition=partition)
@@ -0,0 +1,124 @@
1
+ import trio
2
+ from typing import (
3
+ Optional,
4
+ Self,
5
+ Union
6
+ )
7
+ from osn_selenium.base_mixin import TrioThreadMixin
8
+ from osn_selenium.instances.trio_threads.alert import Alert
9
+ from osn_selenium.instances.unified.switch_to import UnifiedSwitchTo
10
+ from osn_selenium.abstract.instances.switch_to import AbstractSwitchTo
11
+ from osn_selenium.instances.trio_threads.web_element import WebElement
12
+ from osn_selenium.exceptions.instance import (
13
+ CannotConvertTypeError
14
+ )
15
+ from selenium.webdriver.remote.switch_to import (
16
+ SwitchTo as legacySwitchTo
17
+ )
18
+ from osn_selenium.instances._typehints import (
19
+ SWITCH_TO_TYPEHINT,
20
+ WEB_ELEMENT_TYPEHINT
21
+ )
22
+ from osn_selenium.instances.convert import (
23
+ get_legacy_instance,
24
+ get_trio_thread_instance_wrapper
25
+ )
26
+
27
+
28
+ __all__ = ["SwitchTo"]
29
+
30
+
31
+ class SwitchTo(UnifiedSwitchTo, TrioThreadMixin, AbstractSwitchTo):
32
+ """
33
+ Wrapper for the legacy Selenium SwitchTo instance.
34
+
35
+ Provides mechanisms to change the driver's focus to different frames,
36
+ windows, or alerts.
37
+ """
38
+
39
+ def __init__(
40
+ self,
41
+ selenium_switch_to: legacySwitchTo,
42
+ lock: trio.Lock,
43
+ limiter: trio.CapacityLimiter,
44
+ ) -> None:
45
+ """
46
+ Initializes the SwitchTo wrapper.
47
+
48
+ Args:
49
+ selenium_switch_to (legacySwitchTo): The legacy Selenium SwitchTo instance to wrap.
50
+ lock (trio.Lock): A Trio lock for managing concurrent access.
51
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
52
+ """
53
+
54
+ UnifiedSwitchTo.__init__(self, selenium_switch_to=selenium_switch_to)
55
+
56
+ TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
57
+
58
+ async def active_element(self) -> WebElement:
59
+ legacy_element = await self.sync_to_trio(sync_function=self._active_element_impl)()
60
+
61
+ return get_trio_thread_instance_wrapper(
62
+ wrapper_class=WebElement,
63
+ legacy_object=legacy_element,
64
+ lock=self._lock,
65
+ limiter=self._capacity_limiter,
66
+ )
67
+
68
+ async def alert(self) -> Alert:
69
+ legacy_alert_instance = await self.sync_to_trio(sync_function=self._alert_impl)()
70
+
71
+ return get_trio_thread_instance_wrapper(
72
+ wrapper_class=Alert,
73
+ legacy_object=legacy_alert_instance,
74
+ lock=self._lock,
75
+ limiter=self._capacity_limiter,
76
+ )
77
+
78
+ async def default_content(self) -> None:
79
+ await self.sync_to_trio(sync_function=self._default_content_impl)()
80
+
81
+ async def frame(self, frame_reference: Union[str, int, WEB_ELEMENT_TYPEHINT]) -> None:
82
+ await self.sync_to_trio(sync_function=self._frame_impl)(frame_reference=frame_reference)
83
+
84
+ @classmethod
85
+ def from_legacy(
86
+ cls,
87
+ legacy_object: SWITCH_TO_TYPEHINT,
88
+ lock: trio.Lock,
89
+ limiter: trio.CapacityLimiter,
90
+ ) -> Self:
91
+ """
92
+ Creates an instance from a legacy Selenium SwitchTo object.
93
+
94
+ This factory method is used to wrap an existing Selenium SwitchTo
95
+ instance into the new interface.
96
+
97
+ Args:
98
+ legacy_object (SWITCH_TO_TYPEHINT): The legacy Selenium SwitchTo instance or its wrapper.
99
+ lock (trio.Lock): A Trio lock for managing concurrent access.
100
+ limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
101
+
102
+ Returns:
103
+ Self: A new instance of a class implementing SwitchTo.
104
+ """
105
+
106
+ legacy_switch_to_obj = get_legacy_instance(instance=legacy_object)
107
+
108
+ if not isinstance(legacy_switch_to_obj, legacySwitchTo):
109
+ raise CannotConvertTypeError(from_=legacySwitchTo, to_=legacy_object)
110
+
111
+ return cls(selenium_switch_to=legacy_switch_to_obj, lock=lock, limiter=limiter)
112
+
113
+ @property
114
+ def legacy(self) -> legacySwitchTo:
115
+ return self._legacy_impl
116
+
117
+ async def new_window(self, type_hint: Optional[str] = None) -> None:
118
+ await self.sync_to_trio(sync_function=self._new_window_impl)(type_hint=type_hint)
119
+
120
+ async def parent_frame(self) -> None:
121
+ await self.sync_to_trio(sync_function=self._parent_frame_impl)()
122
+
123
+ async def window(self, window_name: str) -> None:
124
+ await self.sync_to_trio(sync_function=self._window_impl)(window_name=window_name)