osn-selenium 1.0.0__py3-none-any.whl → 1.2.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 (475) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_decorators.py +57 -0
  4. osn_selenium/_trio_threads_helpers.py +157 -0
  5. osn_selenium/_typehints.py +1 -1
  6. osn_selenium/abstract/executors/cdp.py +63 -0
  7. osn_selenium/abstract/webdriver/blink/base.py +14 -0
  8. osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
  9. osn_selenium/abstract/webdriver/core/base.py +0 -14
  10. osn_selenium/abstract/webdriver/core/capture.py +4 -3
  11. osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
  12. osn_selenium/abstract/webdriver/core/script.py +5 -4
  13. osn_selenium/abstract/webdriver/core/window.py +11 -11
  14. osn_selenium/browsers_handler/models.py +1 -1
  15. osn_selenium/dev_tools/_decorators.py +19 -51
  16. osn_selenium/dev_tools/_functions.py +2 -4
  17. osn_selenium/dev_tools/_typehints.py +5 -2
  18. osn_selenium/dev_tools/_wrappers.py +0 -3
  19. osn_selenium/dev_tools/domains/__init__.py +2 -2
  20. osn_selenium/dev_tools/domains/abstract.py +1 -1
  21. osn_selenium/dev_tools/domains/fetch.py +6 -8
  22. osn_selenium/dev_tools/domains_default/fetch.py +2 -2
  23. osn_selenium/dev_tools/filters.py +1 -1
  24. osn_selenium/dev_tools/logger/main.py +9 -21
  25. osn_selenium/dev_tools/logger/models.py +1 -1
  26. osn_selenium/dev_tools/logger/target.py +49 -29
  27. osn_selenium/dev_tools/manager/base.py +10 -42
  28. osn_selenium/dev_tools/manager/lifecycle.py +84 -75
  29. osn_selenium/dev_tools/manager/logging.py +1 -1
  30. osn_selenium/dev_tools/manager/targets.py +13 -5
  31. osn_selenium/dev_tools/models.py +1 -1
  32. osn_selenium/dev_tools/settings.py +9 -5
  33. osn_selenium/dev_tools/target/base.py +30 -34
  34. osn_selenium/dev_tools/target/discovery.py +1 -1
  35. osn_selenium/dev_tools/target/events.py +2 -2
  36. osn_selenium/dev_tools/target/fingerprint.py +1 -1
  37. osn_selenium/dev_tools/target/lifecycle.py +103 -38
  38. osn_selenium/dev_tools/target/logging.py +11 -3
  39. osn_selenium/exceptions/__init__.py +0 -1
  40. osn_selenium/exceptions/base.py +28 -1
  41. osn_selenium/exceptions/bidi_bridge.py +59 -0
  42. osn_selenium/exceptions/configuration.py +1 -8
  43. osn_selenium/exceptions/dependencies.py +60 -0
  44. osn_selenium/exceptions/devtools.py +9 -39
  45. osn_selenium/exceptions/experimental.py +26 -0
  46. osn_selenium/exceptions/flags.py +0 -2
  47. osn_selenium/exceptions/instance.py +1 -9
  48. osn_selenium/exceptions/javascript.py +0 -2
  49. osn_selenium/exceptions/logic.py +0 -2
  50. osn_selenium/exceptions/path.py +1 -9
  51. osn_selenium/exceptions/platform.py +0 -2
  52. osn_selenium/exceptions/protocol.py +0 -3
  53. osn_selenium/exceptions/webdriver.py +1 -7
  54. osn_selenium/exceptions/window.py +1 -8
  55. osn_selenium/executors/sync/cdp.py +95 -0
  56. osn_selenium/executors/trio_bidi/cdp.py +101 -0
  57. osn_selenium/executors/trio_bidi/javascript.py +101 -0
  58. osn_selenium/executors/trio_threads/cdp.py +99 -0
  59. osn_selenium/executors/trio_threads/javascript.py +1 -1
  60. osn_selenium/executors/unified/javascript.py +0 -4
  61. osn_selenium/flags/base.py +7 -13
  62. osn_selenium/flags/blink.py +2 -8
  63. osn_selenium/flags/chrome.py +6 -6
  64. osn_selenium/flags/edge.py +6 -6
  65. osn_selenium/flags/models/base.py +4 -4
  66. osn_selenium/flags/models/blink.py +1 -1
  67. osn_selenium/flags/models/values.py +1 -1
  68. osn_selenium/instances/convert.py +44 -3
  69. osn_selenium/instances/protocols.py +47 -1
  70. osn_selenium/instances/sync/action_chains/__init__.py +6 -0
  71. osn_selenium/instances/sync/browsing_context.py +2 -2
  72. osn_selenium/instances/sync/script.py +7 -2
  73. osn_selenium/instances/sync/shadow_root.py +30 -8
  74. osn_selenium/instances/sync/web_element.py +1 -1
  75. osn_selenium/instances/trio_bidi/__init__.py +1 -0
  76. osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
  77. osn_selenium/instances/trio_bidi/switch_to.py +143 -0
  78. osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
  79. osn_selenium/instances/trio_bidi/web_element.py +239 -0
  80. osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
  81. osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
  82. osn_selenium/instances/trio_threads/alert.py +1 -1
  83. osn_selenium/instances/trio_threads/browser.py +1 -1
  84. osn_selenium/instances/trio_threads/browsing_context.py +3 -3
  85. osn_selenium/instances/trio_threads/dialog.py +1 -1
  86. osn_selenium/instances/trio_threads/fedcm.py +1 -1
  87. osn_selenium/instances/trio_threads/mobile.py +1 -1
  88. osn_selenium/instances/trio_threads/network.py +1 -1
  89. osn_selenium/instances/trio_threads/permissions.py +1 -1
  90. osn_selenium/instances/trio_threads/script.py +8 -3
  91. osn_selenium/instances/trio_threads/shadow_root.py +46 -15
  92. osn_selenium/instances/trio_threads/storage.py +1 -1
  93. osn_selenium/instances/trio_threads/switch_to.py +1 -1
  94. osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
  95. osn_selenium/instances/trio_threads/web_element.py +1 -1
  96. osn_selenium/instances/trio_threads/web_extension.py +1 -1
  97. osn_selenium/instances/unified/browsing_context.py +2 -2
  98. osn_selenium/instances/unified/script.py +2 -2
  99. osn_selenium/instances/unified/web_element.py +3 -5
  100. osn_selenium/javascript/fingerprint/__init__.py +3 -2
  101. osn_selenium/javascript/fingerprint/registry/models.py +1 -1
  102. osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
  103. osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
  104. osn_selenium/javascript/models.py +1 -1
  105. osn_selenium/models.py +2 -47
  106. osn_selenium/trio_bidi/__init__.py +1 -0
  107. osn_selenium/trio_bidi/_context_vars.py +12 -0
  108. osn_selenium/trio_bidi/_error_mappings.py +123 -0
  109. osn_selenium/trio_bidi/_error_redirects.py +194 -0
  110. osn_selenium/trio_bidi/_file_functions.py +28 -0
  111. osn_selenium/trio_bidi/_internal_mappings.py +10 -0
  112. osn_selenium/trio_bidi/_models.py +199 -0
  113. osn_selenium/trio_bidi/_typehints.py +20 -0
  114. osn_selenium/trio_bidi/connection_pool.py +587 -0
  115. osn_selenium/trio_bidi/mapping/__init__.py +1 -0
  116. osn_selenium/trio_bidi/mapping/_constants.py +14 -0
  117. osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
  118. osn_selenium/trio_bidi/mapping/_utils.py +4 -0
  119. osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
  120. osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
  121. osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
  122. osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
  123. osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
  124. osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
  125. osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
  126. osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
  127. osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
  128. osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
  129. osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
  130. osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
  131. osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
  132. osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
  133. osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
  134. osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
  135. osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
  136. osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
  137. osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
  138. osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
  139. osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
  140. osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
  141. osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
  142. osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
  143. osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
  144. osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
  145. osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
  146. osn_selenium/trio_bidi/mixin.py +186 -0
  147. osn_selenium/trio_bidi/remote_connection.py +164 -0
  148. osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
  149. osn_selenium/webdrivers/_args_helpers.py +120 -7
  150. osn_selenium/webdrivers/_bridges.py +2 -2
  151. osn_selenium/webdrivers/_executable_tables/models.py +1 -1
  152. osn_selenium/webdrivers/_typehints.py +9 -3
  153. osn_selenium/webdrivers/protocols.py +81 -1
  154. osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
  155. osn_selenium/webdrivers/sync/blink/base.py +23 -1
  156. osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
  157. osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
  158. osn_selenium/webdrivers/sync/chrome/base.py +13 -1
  159. osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
  160. osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
  161. osn_selenium/webdrivers/sync/core/__init__.py +10 -1
  162. osn_selenium/webdrivers/sync/core/base.py +18 -18
  163. osn_selenium/webdrivers/sync/core/capture.py +3 -2
  164. osn_selenium/webdrivers/sync/core/file.py +3 -2
  165. osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
  166. osn_selenium/webdrivers/sync/core/script.py +3 -2
  167. osn_selenium/webdrivers/sync/core/window.py +3 -3
  168. osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
  169. osn_selenium/webdrivers/sync/edge/base.py +13 -1
  170. osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
  171. osn_selenium/webdrivers/sync/edge/settings.py +6 -1
  172. osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
  173. osn_selenium/webdrivers/sync/yandex/base.py +13 -1
  174. osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
  175. osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
  176. osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
  177. osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
  178. osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
  179. osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
  180. osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
  181. osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
  182. osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
  183. osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
  184. osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
  185. osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
  186. osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
  187. osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
  188. osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
  189. osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
  190. osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
  191. osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
  192. osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
  193. osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
  194. osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
  195. osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
  196. osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
  197. osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
  198. osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
  199. osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
  200. osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
  201. osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
  202. osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
  203. osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
  204. osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
  205. osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
  206. osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
  207. osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
  208. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
  209. osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
  210. osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
  211. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
  212. osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
  213. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
  214. osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
  215. osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
  216. osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
  217. osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
  218. osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
  219. osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
  220. osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
  221. osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
  222. osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
  223. osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
  224. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
  225. osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
  226. osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
  227. osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
  228. osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
  229. osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
  230. osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
  231. osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
  232. osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
  233. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
  234. osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
  235. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
  236. osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
  237. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
  238. osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
  239. osn_selenium/webdrivers/unified/blink/base.py +9 -1
  240. osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
  241. osn_selenium/webdrivers/unified/chrome/base.py +9 -1
  242. osn_selenium/webdrivers/unified/core/auth.py +4 -2
  243. osn_selenium/webdrivers/unified/core/base.py +19 -6
  244. osn_selenium/webdrivers/unified/core/capture.py +3 -2
  245. osn_selenium/webdrivers/unified/core/components.py +12 -7
  246. osn_selenium/webdrivers/unified/core/devtools.py +2 -1
  247. osn_selenium/webdrivers/unified/core/file.py +3 -2
  248. osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
  249. osn_selenium/webdrivers/unified/core/script.py +5 -3
  250. osn_selenium/webdrivers/unified/core/storage.py +2 -1
  251. osn_selenium/webdrivers/unified/core/window.py +9 -8
  252. osn_selenium/webdrivers/unified/edge/base.py +9 -1
  253. osn_selenium/webdrivers/unified/yandex/base.py +9 -1
  254. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
  255. osn_selenium-1.2.0.dist-info/RECORD +480 -0
  256. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
  257. osn_selenium/abstract/executors/cdp/__init__.py +0 -435
  258. osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
  259. osn_selenium/abstract/executors/cdp/animation.py +0 -47
  260. osn_selenium/abstract/executors/cdp/audits.py +0 -39
  261. osn_selenium/abstract/executors/cdp/autofill.py +0 -34
  262. osn_selenium/abstract/executors/cdp/background_service.py +0 -22
  263. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
  264. osn_selenium/abstract/executors/cdp/browser.py +0 -122
  265. osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
  266. osn_selenium/abstract/executors/cdp/cast.py +0 -31
  267. osn_selenium/abstract/executors/cdp/console.py +0 -18
  268. osn_selenium/abstract/executors/cdp/css.py +0 -197
  269. osn_selenium/abstract/executors/cdp/debugger.py +0 -198
  270. osn_selenium/abstract/executors/cdp/device_access.py +0 -22
  271. osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
  272. osn_selenium/abstract/executors/cdp/dom.py +0 -305
  273. osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
  274. osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
  275. osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
  276. osn_selenium/abstract/executors/cdp/emulation.py +0 -259
  277. osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
  278. osn_selenium/abstract/executors/cdp/extensions.py +0 -31
  279. osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
  280. osn_selenium/abstract/executors/cdp/fetch.py +0 -76
  281. osn_selenium/abstract/executors/cdp/file_system.py +0 -11
  282. osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
  283. osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
  284. osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
  285. osn_selenium/abstract/executors/cdp/input.py +0 -158
  286. osn_selenium/abstract/executors/cdp/inspector.py +0 -14
  287. osn_selenium/abstract/executors/cdp/io.py +0 -24
  288. osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
  289. osn_selenium/abstract/executors/cdp/log.py +0 -27
  290. osn_selenium/abstract/executors/cdp/media.py +0 -14
  291. osn_selenium/abstract/executors/cdp/memory.py +0 -61
  292. osn_selenium/abstract/executors/cdp/network.py +0 -252
  293. osn_selenium/abstract/executors/cdp/overlay.py +0 -166
  294. osn_selenium/abstract/executors/cdp/page.py +0 -347
  295. osn_selenium/abstract/executors/cdp/performance.py +0 -28
  296. osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
  297. osn_selenium/abstract/executors/cdp/preload.py +0 -14
  298. osn_selenium/abstract/executors/cdp/profiler.py +0 -54
  299. osn_selenium/abstract/executors/cdp/pwa.py +0 -46
  300. osn_selenium/abstract/executors/cdp/runtime.py +0 -176
  301. osn_selenium/abstract/executors/cdp/schema.py +0 -11
  302. osn_selenium/abstract/executors/cdp/security.py +0 -26
  303. osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
  304. osn_selenium/abstract/executors/cdp/storage.py +0 -175
  305. osn_selenium/abstract/executors/cdp/system_info.py +0 -24
  306. osn_selenium/abstract/executors/cdp/target.py +0 -125
  307. osn_selenium/abstract/executors/cdp/tethering.py +0 -14
  308. osn_selenium/abstract/executors/cdp/tracing.py +0 -48
  309. osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
  310. osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
  311. osn_selenium/executors/sync/cdp/__init__.py +0 -550
  312. osn_selenium/executors/sync/cdp/accessibility.py +0 -74
  313. osn_selenium/executors/sync/cdp/animation.py +0 -50
  314. osn_selenium/executors/sync/cdp/audits.py +0 -48
  315. osn_selenium/executors/sync/cdp/autofill.py +0 -39
  316. osn_selenium/executors/sync/cdp/background_service.py +0 -30
  317. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
  318. osn_selenium/executors/sync/cdp/browser.py +0 -131
  319. osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
  320. osn_selenium/executors/sync/cdp/cast.py +0 -38
  321. osn_selenium/executors/sync/cdp/console.py +0 -24
  322. osn_selenium/executors/sync/cdp/css.py +0 -187
  323. osn_selenium/executors/sync/cdp/debugger.py +0 -206
  324. osn_selenium/executors/sync/cdp/device_access.py +0 -27
  325. osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
  326. osn_selenium/executors/sync/cdp/dom.py +0 -310
  327. osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
  328. osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
  329. osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
  330. osn_selenium/executors/sync/cdp/emulation.py +0 -270
  331. osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
  332. osn_selenium/executors/sync/cdp/extensions.py +0 -39
  333. osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
  334. osn_selenium/executors/sync/cdp/fetch.py +0 -96
  335. osn_selenium/executors/sync/cdp/file_system.py +0 -18
  336. osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
  337. osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
  338. osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
  339. osn_selenium/executors/sync/cdp/input.py +0 -233
  340. osn_selenium/executors/sync/cdp/inspector.py +0 -21
  341. osn_selenium/executors/sync/cdp/io.py +0 -33
  342. osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
  343. osn_selenium/executors/sync/cdp/log.py +0 -35
  344. osn_selenium/executors/sync/cdp/media.py +0 -21
  345. osn_selenium/executors/sync/cdp/memory.py +0 -62
  346. osn_selenium/executors/sync/cdp/network.py +0 -287
  347. osn_selenium/executors/sync/cdp/overlay.py +0 -174
  348. osn_selenium/executors/sync/cdp/page.py +0 -365
  349. osn_selenium/executors/sync/cdp/performance.py +0 -33
  350. osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
  351. osn_selenium/executors/sync/cdp/preload.py +0 -21
  352. osn_selenium/executors/sync/cdp/profiler.py +0 -58
  353. osn_selenium/executors/sync/cdp/pwa.py +0 -55
  354. osn_selenium/executors/sync/cdp/runtime.py +0 -221
  355. osn_selenium/executors/sync/cdp/schema.py +0 -23
  356. osn_selenium/executors/sync/cdp/security.py +0 -30
  357. osn_selenium/executors/sync/cdp/service_worker.py +0 -56
  358. osn_selenium/executors/sync/cdp/storage.py +0 -151
  359. osn_selenium/executors/sync/cdp/system_info.py +0 -30
  360. osn_selenium/executors/sync/cdp/target.py +0 -147
  361. osn_selenium/executors/sync/cdp/tethering.py +0 -21
  362. osn_selenium/executors/sync/cdp/tracing.py +0 -62
  363. osn_selenium/executors/sync/cdp/web_audio.py +0 -24
  364. osn_selenium/executors/sync/cdp/web_authn.py +0 -82
  365. osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
  366. osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
  367. osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
  368. osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
  369. osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
  370. osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
  371. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
  372. osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
  373. osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
  374. osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
  375. osn_selenium/executors/trio_threads/cdp/console.py +0 -33
  376. osn_selenium/executors/trio_threads/cdp/css.py +0 -196
  377. osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
  378. osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
  379. osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
  380. osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
  381. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
  382. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
  383. osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
  384. osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
  385. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
  386. osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
  387. osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
  388. osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
  389. osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
  390. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
  391. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
  392. osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
  393. osn_selenium/executors/trio_threads/cdp/input.py +0 -242
  394. osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
  395. osn_selenium/executors/trio_threads/cdp/io.py +0 -42
  396. osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
  397. osn_selenium/executors/trio_threads/cdp/log.py +0 -44
  398. osn_selenium/executors/trio_threads/cdp/media.py +0 -30
  399. osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
  400. osn_selenium/executors/trio_threads/cdp/network.py +0 -296
  401. osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
  402. osn_selenium/executors/trio_threads/cdp/page.py +0 -374
  403. osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
  404. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
  405. osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
  406. osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
  407. osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
  408. osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
  409. osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
  410. osn_selenium/executors/trio_threads/cdp/security.py +0 -43
  411. osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
  412. osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
  413. osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
  414. osn_selenium/executors/trio_threads/cdp/target.py +0 -156
  415. osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
  416. osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
  417. osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
  418. osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
  419. osn_selenium/executors/unified/cdp/accessibility.py +0 -81
  420. osn_selenium/executors/unified/cdp/animation.py +0 -50
  421. osn_selenium/executors/unified/cdp/audits.py +0 -45
  422. osn_selenium/executors/unified/cdp/autofill.py +0 -41
  423. osn_selenium/executors/unified/cdp/background_service.py +0 -24
  424. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
  425. osn_selenium/executors/unified/cdp/browser.py +0 -143
  426. osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
  427. osn_selenium/executors/unified/cdp/cast.py +0 -32
  428. osn_selenium/executors/unified/cdp/console.py +0 -18
  429. osn_selenium/executors/unified/cdp/css.py +0 -237
  430. osn_selenium/executors/unified/cdp/debugger.py +0 -243
  431. osn_selenium/executors/unified/cdp/device_access.py +0 -21
  432. osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
  433. osn_selenium/executors/unified/cdp/dom.py +0 -380
  434. osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
  435. osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
  436. osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
  437. osn_selenium/executors/unified/cdp/emulation.py +0 -312
  438. osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
  439. osn_selenium/executors/unified/cdp/extensions.py +0 -45
  440. osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
  441. osn_selenium/executors/unified/cdp/fetch.py +0 -111
  442. osn_selenium/executors/unified/cdp/file_system.py +0 -15
  443. osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
  444. osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
  445. osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
  446. osn_selenium/executors/unified/cdp/input.py +0 -254
  447. osn_selenium/executors/unified/cdp/inspector.py +0 -15
  448. osn_selenium/executors/unified/cdp/io.py +0 -29
  449. osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
  450. osn_selenium/executors/unified/cdp/log.py +0 -29
  451. osn_selenium/executors/unified/cdp/media.py +0 -15
  452. osn_selenium/executors/unified/cdp/memory.py +0 -59
  453. osn_selenium/executors/unified/cdp/network.py +0 -323
  454. osn_selenium/executors/unified/cdp/overlay.py +0 -209
  455. osn_selenium/executors/unified/cdp/page.py +0 -410
  456. osn_selenium/executors/unified/cdp/performance.py +0 -27
  457. osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
  458. osn_selenium/executors/unified/cdp/preload.py +0 -15
  459. osn_selenium/executors/unified/cdp/profiler.py +0 -55
  460. osn_selenium/executors/unified/cdp/pwa.py +0 -55
  461. osn_selenium/executors/unified/cdp/runtime.py +0 -245
  462. osn_selenium/executors/unified/cdp/schema.py +0 -17
  463. osn_selenium/executors/unified/cdp/security.py +0 -27
  464. osn_selenium/executors/unified/cdp/service_worker.py +0 -62
  465. osn_selenium/executors/unified/cdp/storage.py +0 -178
  466. osn_selenium/executors/unified/cdp/system_info.py +0 -24
  467. osn_selenium/executors/unified/cdp/target.py +0 -165
  468. osn_selenium/executors/unified/cdp/tethering.py +0 -15
  469. osn_selenium/executors/unified/cdp/tracing.py +0 -62
  470. osn_selenium/executors/unified/cdp/web_audio.py +0 -18
  471. osn_selenium/executors/unified/cdp/web_authn.py +0 -103
  472. osn_selenium-1.0.0.dist-info/RECORD +0 -608
  473. /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
  474. /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
  475. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,95 @@
1
+ import importlib
2
+ from typing import TYPE_CHECKING, Any, Dict, Callable
3
+
4
+ from osn_selenium.abstract.executors.cdp import AbstractCDPExecutor
5
+ from osn_selenium.exceptions.dependencies import CDPPackageError
6
+
7
+
8
+ __all__ = ["CDPExecutor"]
9
+
10
+ if TYPE_CHECKING:
11
+ from osn_selenium_cdp_v140.executors.sync import CDP140Executor
12
+ from osn_selenium_cdp_v141.executors.sync import CDP141Executor
13
+ from osn_selenium_cdp_v142.executors.sync import CDP142Executor
14
+ from osn_selenium_cdp_v143.executors.sync import CDP143Executor
15
+ from osn_selenium_cdp_v144.executors.sync import CDP144Executor
16
+
17
+
18
+ class CDPExecutor(AbstractCDPExecutor):
19
+ """
20
+ Global CDP executor router.
21
+ Handles lazy loading and version-specific package validation.
22
+ """
23
+
24
+ def __init__(self, execute_function: Callable[[str, Dict[str, Any]], Any]):
25
+ self._execute_function = execute_function
26
+
27
+ def get(self, version: int) -> Any:
28
+ """
29
+ Dynamically loads and returns the CDP executor for a specific version.
30
+
31
+ Args:
32
+ version (int): The CDP version number.
33
+
34
+ Returns:
35
+ Any: The version-specific executor instance.
36
+
37
+ Raises:
38
+ CDPPackageError: If the version-specific package is not installed.
39
+ """
40
+
41
+ try:
42
+ if getattr(self, f"_v{version}", None) is None:
43
+ module = importlib.import_module(f"osn_selenium_cdp_v{version}.executors.sync")
44
+ executor_type = getattr(module, f"CDP{version}Executor")
45
+
46
+ setattr(self, f"_v{version}", executor_type(execute_function=self._execute_function))
47
+
48
+ return getattr(self, f"_v{version}", None)
49
+ except ImportError:
50
+ raise CDPPackageError(version=version)
51
+
52
+ @property
53
+ def v140(self) -> "CDP140Executor":
54
+ """
55
+ Get or initialize the executor for CDP version 140.
56
+ Raises CDPPackageError if the version-specific package is not installed.
57
+ """
58
+
59
+ return self.get(version=140)
60
+
61
+ @property
62
+ def v141(self) -> "CDP141Executor":
63
+ """
64
+ Get or initialize the executor for CDP version 141.
65
+ Raises CDPPackageError if the version-specific package is not installed.
66
+ """
67
+
68
+ return self.get(version=141)
69
+
70
+ @property
71
+ def v142(self) -> "CDP142Executor":
72
+ """
73
+ Get or initialize the executor for CDP version 142.
74
+ Raises CDPPackageError if the version-specific package is not installed.
75
+ """
76
+
77
+ return self.get(version=142)
78
+
79
+ @property
80
+ def v143(self) -> "CDP143Executor":
81
+ """
82
+ Get or initialize the executor for CDP version 143.
83
+ Raises CDPPackageError if the version-specific package is not installed.
84
+ """
85
+
86
+ return self.get(version=143)
87
+
88
+ @property
89
+ def v144(self) -> "CDP144Executor":
90
+ """
91
+ Get or initialize the executor for CDP version 144.
92
+ Raises CDPPackageError if the version-specific package is not installed.
93
+ """
94
+
95
+ return self.get(version=144)
@@ -0,0 +1,101 @@
1
+ import importlib
2
+ from typing import TYPE_CHECKING, Any, Dict, Callable, Union
3
+
4
+ import trio
5
+
6
+ from osn_selenium.abstract.executors.cdp import AbstractCDPExecutor
7
+ from osn_selenium.exceptions.dependencies import CDPPackageError
8
+
9
+
10
+ __all__ = ["CDPExecutor"]
11
+
12
+ if TYPE_CHECKING:
13
+ from osn_selenium_cdp_v140.executors.trio_bidi import CDP140Executor
14
+ from osn_selenium_cdp_v141.executors.trio_bidi import CDP141Executor
15
+ from osn_selenium_cdp_v142.executors.trio_bidi import CDP142Executor
16
+ from osn_selenium_cdp_v143.executors.trio_bidi import CDP143Executor
17
+ from osn_selenium_cdp_v144.executors.trio_bidi import CDP144Executor
18
+
19
+
20
+ class CDPExecutor(AbstractCDPExecutor):
21
+ """
22
+ Global CDP executor router.
23
+ Handles lazy loading and version-specific package validation.
24
+ """
25
+
26
+ def __init__(self, execute_function: Callable[[str, Dict[str, Any]], Any], lock: trio.Lock, limiter: trio.CapacityLimiter, token: trio.lowlevel.TrioToken, buffer_size: Union[int, float]):
27
+ self._execute_function = execute_function
28
+ self._lock = lock
29
+ self._limiter = limiter
30
+ self._trio_token = token
31
+ self._bidi_buffer_size = buffer_size
32
+
33
+ def get(self, version: int) -> Any:
34
+ """
35
+ Dynamically loads and returns the CDP executor for a specific version.
36
+
37
+ Args:
38
+ version (int): The CDP version number.
39
+
40
+ Returns:
41
+ Any: The version-specific executor instance.
42
+
43
+ Raises:
44
+ CDPPackageError: If the version-specific package is not installed.
45
+ """
46
+
47
+ try:
48
+ if getattr(self, f"_v{version}", None) is None:
49
+ module = importlib.import_module(f"osn_selenium_cdp_v{version}.executors.trio_bidi")
50
+ executor_type = getattr(module, f"CDP{version}Executor")
51
+
52
+ setattr(self, f"_v{version}", executor_type(execute_function=self._execute_function, lock=self._lock, limiter=self._limiter, token=self._trio_token, buffer_size=self._bidi_buffer_size))
53
+
54
+ return getattr(self, f"_v{version}", None)
55
+ except ImportError:
56
+ raise CDPPackageError(version=version)
57
+
58
+ @property
59
+ def v140(self) -> "CDP140Executor":
60
+ """
61
+ Get or initialize the executor for CDP version 140.
62
+ Raises CDPPackageError if the version-specific package is not installed.
63
+ """
64
+
65
+ return self.get(version=140)
66
+
67
+ @property
68
+ def v141(self) -> "CDP141Executor":
69
+ """
70
+ Get or initialize the executor for CDP version 141.
71
+ Raises CDPPackageError if the version-specific package is not installed.
72
+ """
73
+
74
+ return self.get(version=141)
75
+
76
+ @property
77
+ def v142(self) -> "CDP142Executor":
78
+ """
79
+ Get or initialize the executor for CDP version 142.
80
+ Raises CDPPackageError if the version-specific package is not installed.
81
+ """
82
+
83
+ return self.get(version=142)
84
+
85
+ @property
86
+ def v143(self) -> "CDP143Executor":
87
+ """
88
+ Get or initialize the executor for CDP version 143.
89
+ Raises CDPPackageError if the version-specific package is not installed.
90
+ """
91
+
92
+ return self.get(version=143)
93
+
94
+ @property
95
+ def v144(self) -> "CDP144Executor":
96
+ """
97
+ Get or initialize the executor for CDP version 144.
98
+ Raises CDPPackageError if the version-specific package is not installed.
99
+ """
100
+
101
+ return self.get(version=144)
@@ -0,0 +1,101 @@
1
+ import trio
2
+ from osn_selenium.javascript.models import JS_Scripts
3
+ from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
4
+ from typing import (
5
+ Any,
6
+ Callable,
7
+ Dict,
8
+ Optional,
9
+ Union
10
+ )
11
+ from osn_selenium.javascript.fingerprint import FingerprintSettings
12
+ from osn_selenium.instances.trio_threads.web_element import WebElement
13
+ from osn_selenium.executors.unified.javascript import UnifiedJSExecutor
14
+ from osn_selenium.models import (
15
+ Point,
16
+ Position,
17
+ Rectangle,
18
+ Size
19
+ )
20
+ from osn_selenium.abstract.executors.javascript import AbstractJSExecutor
21
+
22
+
23
+ __all__ = ["JSExecutor"]
24
+
25
+
26
+ class JSExecutor(UnifiedJSExecutor, TrioBiDiMixin, AbstractJSExecutor):
27
+ """
28
+ An asynchronous JavaScript executor that integrates Trio's BiDi mixin.
29
+ """
30
+
31
+ def __init__(
32
+ self,
33
+ execute_function: Callable[[str, Any], Any],
34
+ lock: trio.Lock,
35
+ limiter: trio.CapacityLimiter,
36
+ trio_token: Optional[trio.lowlevel.TrioToken],
37
+ bidi_buffer_size: Union[int, float],
38
+ ):
39
+ """
40
+ Initialize the JSExecutor with Trio synchronization primitives and execution logic.
41
+
42
+ Args:
43
+ execute_function (Callable[[str, Any], Any]): The function used to run JavaScript code.
44
+ lock (trio.Lock): Trio lock for synchronizing access.
45
+ limiter (trio.CapacityLimiter): Trio limiter for controlling concurrency.
46
+ trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
47
+ bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
48
+ """
49
+
50
+ UnifiedJSExecutor.__init__(self, execute_function=execute_function)
51
+
52
+ TrioBiDiMixin.__init__(
53
+ self,
54
+ lock=lock,
55
+ limiter=limiter,
56
+ token=trio_token,
57
+ buffer_size=bidi_buffer_size
58
+ )
59
+
60
+ async def check_element_in_viewport(self, element: WebElement) -> bool:
61
+ return await self.sync_to_trio(sync_function=self._check_element_in_viewport_impl)(element=element)
62
+
63
+ async def execute(self, script: str, *args: Any) -> Any:
64
+ return await self.sync_to_trio(sync_function=self._execute_impl)(script, *args)
65
+
66
+ async def get_document_scroll_size(self) -> Size:
67
+ return await self.sync_to_trio(sync_function=self._get_document_scroll_size_impl)()
68
+
69
+ async def get_element_css_style(self, element: WebElement) -> Dict[str, str]:
70
+ return await self.sync_to_trio(sync_function=self._get_element_css_style_impl)(element=element)
71
+
72
+ async def get_element_rect_in_viewport(self, element: WebElement) -> Optional[Rectangle]:
73
+ return await self.sync_to_trio(sync_function=self._get_element_rect_in_viewport_impl)(element=element)
74
+
75
+ async def get_random_element_point(self, element: WebElement) -> Optional[Point]:
76
+ return await self.sync_to_trio(sync_function=self._get_random_element_point_impl)(element=element)
77
+
78
+ async def get_random_element_point_in_viewport(self, element: WebElement, step: int = 1) -> Optional[Position]:
79
+ return await self.sync_to_trio(sync_function=self._get_random_element_point_in_viewport_impl)(element=element, step=step)
80
+
81
+ async def get_viewport_position(self) -> Position:
82
+ return await self.sync_to_trio(sync_function=self._get_viewport_position_impl)()
83
+
84
+ async def get_viewport_rect(self) -> Rectangle:
85
+ return await self.sync_to_trio(sync_function=self._get_viewport_rect_impl)()
86
+
87
+ async def get_viewport_size(self) -> Size:
88
+ return await self.sync_to_trio(sync_function=self._get_viewport_size_impl)()
89
+
90
+ async def open_new_tab(self, link: str = "") -> None:
91
+ await self.sync_to_trio(sync_function=self._open_new_tab_impl)(link=link)
92
+
93
+ @property
94
+ def scripts(self) -> JS_Scripts:
95
+ return self._scripts_impl
96
+
97
+ async def start_fingerprint_detection(self, fingerprint_settings: FingerprintSettings) -> None:
98
+ await self.sync_to_trio(sync_function=self._start_fingerprint_detection_impl)(fingerprint_settings=fingerprint_settings)
99
+
100
+ async def stop_window_loading(self) -> None:
101
+ await self.sync_to_trio(sync_function=self._stop_window_loading_impl)()
@@ -0,0 +1,99 @@
1
+ import importlib
2
+ from typing import TYPE_CHECKING, Any, Dict, Callable
3
+
4
+ import trio
5
+
6
+ from osn_selenium.abstract.executors.cdp import AbstractCDPExecutor
7
+ from osn_selenium.exceptions.dependencies import CDPPackageError
8
+
9
+
10
+ __all__ = ["CDPExecutor"]
11
+
12
+ if TYPE_CHECKING:
13
+ from osn_selenium_cdp_v140.executors.trio_threads import CDP140Executor
14
+ from osn_selenium_cdp_v141.executors.trio_threads import CDP141Executor
15
+ from osn_selenium_cdp_v142.executors.trio_threads import CDP142Executor
16
+ from osn_selenium_cdp_v143.executors.trio_threads import CDP143Executor
17
+ from osn_selenium_cdp_v144.executors.trio_threads import CDP144Executor
18
+
19
+
20
+ class CDPExecutor(AbstractCDPExecutor):
21
+ """
22
+ Global CDP executor router.
23
+ Handles lazy loading and version-specific package validation.
24
+ """
25
+
26
+ def __init__(self, execute_function: Callable[[str, Dict[str, Any]], Any], lock: trio.Lock, limiter: trio.CapacityLimiter):
27
+ self._execute_function = execute_function
28
+ self._lock = lock
29
+ self._limiter = limiter
30
+
31
+ def get(self, version: int) -> Any:
32
+ """
33
+ Dynamically loads and returns the CDP executor for a specific version.
34
+
35
+ Args:
36
+ version (int): The CDP version number.
37
+
38
+ Returns:
39
+ Any: The version-specific executor instance.
40
+
41
+ Raises:
42
+ CDPPackageError: If the version-specific package is not installed.
43
+ """
44
+
45
+ try:
46
+ if getattr(self, f"_v{version}", None) is None:
47
+ module = importlib.import_module(f"osn_selenium_cdp_v{version}.executors.trio_threads")
48
+ executor_type = getattr(module, f"CDP{version}Executor")
49
+
50
+ setattr(self, f"_v{version}", executor_type(execute_function=self._execute_function, lock=self._lock, limiter=self._limiter))
51
+
52
+ return getattr(self, f"_v{version}", None)
53
+ except ImportError:
54
+ raise CDPPackageError(version=version)
55
+
56
+ @property
57
+ def v140(self) -> "CDP140Executor":
58
+ """
59
+ Get or initialize the executor for CDP version 140.
60
+ Raises CDPPackageError if the version-specific package is not installed.
61
+ """
62
+
63
+ return self.get(version=140)
64
+
65
+ @property
66
+ def v141(self) -> "CDP141Executor":
67
+ """
68
+ Get or initialize the executor for CDP version 141.
69
+ Raises CDPPackageError if the version-specific package is not installed.
70
+ """
71
+
72
+ return self.get(version=141)
73
+
74
+ @property
75
+ def v142(self) -> "CDP142Executor":
76
+ """
77
+ Get or initialize the executor for CDP version 142.
78
+ Raises CDPPackageError if the version-specific package is not installed.
79
+ """
80
+
81
+ return self.get(version=142)
82
+
83
+ @property
84
+ def v143(self) -> "CDP143Executor":
85
+ """
86
+ Get or initialize the executor for CDP version 143.
87
+ Raises CDPPackageError if the version-specific package is not installed.
88
+ """
89
+
90
+ return self.get(version=143)
91
+
92
+ @property
93
+ def v144(self) -> "CDP144Executor":
94
+ """
95
+ Get or initialize the executor for CDP version 144.
96
+ Raises CDPPackageError if the version-specific package is not installed.
97
+ """
98
+
99
+ return self.get(version=144)
@@ -1,5 +1,5 @@
1
1
  import trio
2
- from osn_selenium.base_mixin import TrioThreadMixin
2
+ from osn_selenium.trio_threads_mixin import TrioThreadMixin
3
3
  from osn_selenium.javascript.models import JS_Scripts
4
4
  from typing import (
5
5
  Any,
@@ -21,10 +21,6 @@ __all__ = ["UnifiedJSExecutor"]
21
21
  class UnifiedJSExecutor:
22
22
  """
23
23
  A unified executor for JavaScript scripts within the Selenium environment.
24
-
25
- Attributes:
26
- _execute_function (Callable[[str, Any], Any]): The internal function used to execute JS code.
27
- _scripts (JS_Scripts): A collection of pre-defined JavaScript scripts.
28
24
  """
29
25
 
30
26
  def __init__(self, execute_function: Callable[[str, Any], Any]):
@@ -1,5 +1,5 @@
1
1
  from copy import deepcopy
2
- from osn_selenium.models import DictModel
2
+ from osn_selenium._base_models import DictModel
3
3
  from typing import (
4
4
  Any,
5
5
  Dict,
@@ -47,14 +47,6 @@ class BrowserFlagsManager:
47
47
 
48
48
  This class provides a structured way to define, set, and build browser options
49
49
  for various Selenium WebDriver instances.
50
-
51
- Attributes:
52
- _flags_types (Dict[str, FlagType]): A dictionary mapping flag types to their handler functions.
53
- _flags_definitions (Dict[str, FlagDefinition]): A dictionary of all available flag definitions.
54
- _flags_definitions_by_types (Dict[str, Dict[str, FlagDefinition]]): Flags definitions grouped by type.
55
- _arguments (Dict[str, ArgumentValue]): Stores the configured command-line arguments.
56
- _experimental_options (Dict[str, ExperimentalOptionValue]): Stores the configured experimental options.
57
- _attributes (Dict[str, AttributeValue]): Stores the configured WebDriver attributes.
58
50
  """
59
51
 
60
52
  def __init__(
@@ -159,7 +151,7 @@ class BrowserFlagsManager:
159
151
  def clear_attributes(self):
160
152
  """Clears all configured browser attributes."""
161
153
 
162
- self._attributes = {}
154
+ self._attributes.clear()
163
155
 
164
156
  def remove_attribute(self, attribute_name: str):
165
157
  """
@@ -244,7 +236,7 @@ class BrowserFlagsManager:
244
236
  def clear_experimental_options(self):
245
237
  """Clears all configured experimental options."""
246
238
 
247
- self._experimental_options = {}
239
+ self._experimental_options.clear()
248
240
 
249
241
  def remove_experimental_option(self, experimental_option_name: str):
250
242
  """
@@ -346,7 +338,7 @@ class BrowserFlagsManager:
346
338
  def clear_arguments(self):
347
339
  """Clears all configured browser arguments."""
348
340
 
349
- self._arguments = {}
341
+ self._arguments.clear()
350
342
 
351
343
  def remove_argument(self, argument_name: str):
352
344
  """
@@ -471,7 +463,9 @@ class BrowserFlagsManager:
471
463
 
472
464
  for type_name, type_functions in self._flags_types.items():
473
465
  options = type_functions.build_options_function(options)
474
-
466
+
467
+ options.set_capability("webSocketUrl", True)
468
+
475
469
  return options
476
470
 
477
471
  def remove_option(self, option: FlagDefinition):
@@ -44,12 +44,6 @@ class BlinkFlagsManager(BrowserFlagsManager):
44
44
  This class extends `BrowserFlagsManager` to handle Blink-specific features,
45
45
  such as `--enable-blink-features` and `--disable-blink-features`, and provides
46
46
  a comprehensive set of predefined flags for these browsers.
47
-
48
- Attributes:
49
- _browser_exe (Optional[PATH_TYPEHINT]): Path to the browser executable.
50
- _start_page_url (Optional[str]): The URL to open when the browser starts.
51
- _enable_blink_features (Dict[str, str]): Stores enabled Blink feature commands.
52
- _disable_blink_features (Dict[str, str]): Stores disabled Blink feature commands.
53
47
  """
54
48
 
55
49
  def __init__(
@@ -776,8 +770,8 @@ class BlinkFlagsManager(BrowserFlagsManager):
776
770
  def clear_blink_features(self):
777
771
  """Clears all configured Blink features."""
778
772
 
779
- self._enable_blink_features = {}
780
- self._disable_blink_features = {}
773
+ self._enable_blink_features.clear()
774
+ self._disable_blink_features.clear()
781
775
 
782
776
  def remove_blink_feature(self, blink_feature_name: str):
783
777
  """
@@ -42,21 +42,21 @@ class ChromeFlagsManager(BlinkFlagsManager):
42
42
  debugging port, user agent, proxy, and BiDi protocol.
43
43
  """
44
44
 
45
- yandex_flags_types = {}
45
+ chrome_flags_types = {}
46
46
 
47
47
  if flags_types is not None:
48
- yandex_flags_types.update(flags_types)
48
+ chrome_flags_types.update(flags_types)
49
49
 
50
- yandex_flags_definitions = {}
50
+ chrome_flags_definitions = {}
51
51
 
52
52
  if flags_definitions is not None:
53
- yandex_flags_definitions.update(flags_definitions)
53
+ chrome_flags_definitions.update(flags_definitions)
54
54
 
55
55
  super().__init__(
56
56
  browser_exe=browser_exe,
57
57
  start_page_url=start_page_url,
58
- flags_types=yandex_flags_types,
59
- flags_definitions=yandex_flags_definitions,
58
+ flags_types=chrome_flags_types,
59
+ flags_definitions=chrome_flags_definitions,
60
60
  )
61
61
 
62
62
  def _build_options_arguments(self, options: Options) -> Options:
@@ -42,21 +42,21 @@ class EdgeFlagsManager(BlinkFlagsManager):
42
42
  debugging port, user agent, proxy, and BiDi protocol.
43
43
  """
44
44
 
45
- yandex_flags_types = {}
45
+ edge_flags_types = {}
46
46
 
47
47
  if flags_types is not None:
48
- yandex_flags_types.update(flags_types)
48
+ edge_flags_types.update(flags_types)
49
49
 
50
- yandex_flags_definitions = {}
50
+ edge_flags_definitions = {}
51
51
 
52
52
  if flags_definitions is not None:
53
- yandex_flags_definitions.update(flags_definitions)
53
+ edge_flags_definitions.update(flags_definitions)
54
54
 
55
55
  super().__init__(
56
56
  browser_exe=browser_exe,
57
57
  start_page_url=start_page_url,
58
- flags_types=yandex_flags_types,
59
- flags_definitions=yandex_flags_definitions,
58
+ flags_types=edge_flags_types,
59
+ flags_definitions=edge_flags_definitions,
60
60
  )
61
61
 
62
62
  def _build_options_arguments(self, options: Options) -> Options:
@@ -1,8 +1,4 @@
1
1
  from pydantic import Field
2
- from osn_selenium.models import (
3
- DictModel,
4
- ExtraDictModel
5
- )
6
2
  from typing import (
7
3
  Any,
8
4
  Callable,
@@ -10,6 +6,10 @@ from typing import (
10
6
  Literal,
11
7
  Optional
12
8
  )
9
+ from osn_selenium._base_models import (
10
+ DictModel,
11
+ ExtraDictModel
12
+ )
13
13
  from osn_selenium.flags._typehints import (
14
14
  ANY_WEBDRIVER_OPTION_TYPEHINT
15
15
  )
@@ -1,7 +1,7 @@
1
1
  from pydantic import Field
2
2
  from typing import Optional
3
- from osn_selenium.models import ExtraDictModel
4
3
  from osn_selenium._typehints import PATH_TYPEHINT
4
+ from osn_selenium._base_models import ExtraDictModel
5
5
  from osn_selenium.flags._typehints import (
6
6
  AUTOPLAY_POLICY_TYPEHINT,
7
7
  LOG_LEVEL_TYPEHINT,
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from osn_selenium.models import DictModel
2
+ from osn_selenium._base_models import DictModel
3
3
 
4
4
 
5
5
  __all__ = ["ArgumentValue", "AttributeValue", "ExperimentalOptionValue"]
@@ -52,13 +52,14 @@ from selenium.webdriver.common.bidi.permissions import (
52
52
  from selenium.webdriver.common.bidi.webextension import (
53
53
  WebExtension as legacyWebExtension
54
54
  )
55
+ from selenium.webdriver.common.bidi.browsing_context import (
56
+ BrowsingContext as legacyBrowsingContext
57
+ )
55
58
  from osn_selenium.instances.protocols import (
56
59
  SyncInstanceWrapper,
60
+ TrioBiDiInstanceWrapper,
57
61
  TrioThreadInstanceWrapper
58
62
  )
59
- from selenium.webdriver.common.bidi.browsing_context import (
60
- BrowsingContext as legacyBrowsingContext
61
- )
62
63
  from osn_selenium.instances._typehints import (
63
64
  ACTION_CHAINS_TYPEHINT,
64
65
  ALERT_TYPEHINT,
@@ -85,11 +86,13 @@ __all__ = [
85
86
  "get_legacy_frame_reference",
86
87
  "get_legacy_instance",
87
88
  "get_sync_instance_wrapper",
89
+ "get_trio_bidi_instance_wrapper",
88
90
  "get_trio_thread_instance_wrapper"
89
91
  ]
90
92
 
91
93
  _SYNC_WRAPPER_TYPE = TypeVar("_SYNC_WRAPPER_TYPE", bound=SyncInstanceWrapper)
92
94
  _TRIO_THREAD_WRAPPER_TYPE = TypeVar("_TRIO_THREAD_WRAPPER_TYPE", bound=TrioThreadInstanceWrapper)
95
+ _TRIO_BIDI_WRAPPER_TYPE = TypeVar("_TRIO_BIDI_WRAPPER_TYPE", bound=TrioBiDiInstanceWrapper)
93
96
 
94
97
 
95
98
  @overload
@@ -243,6 +246,44 @@ def get_trio_thread_instance_wrapper(
243
246
  return wrapper_class.from_legacy(legacy_object=legacy_object, lock=lock, limiter=limiter)
244
247
 
245
248
 
249
+ def get_trio_bidi_instance_wrapper(
250
+ wrapper_class: Type[_TRIO_BIDI_WRAPPER_TYPE],
251
+ legacy_object: Any,
252
+ lock: trio.Lock,
253
+ limiter: trio.CapacityLimiter,
254
+ trio_token: Optional[trio.lowlevel.TrioToken],
255
+ bidi_buffer_size: Union[int, float],
256
+ ) -> _TRIO_BIDI_WRAPPER_TYPE:
257
+ """
258
+ Creates a Trio-compatible BiDi instance wrapper for a legacy Selenium object.
259
+
260
+ Args:
261
+ wrapper_class (Type[_TRIO_BIDI_WRAPPER_TYPE]): The class used to wrap the legacy object.
262
+ legacy_object (Any): The legacy Selenium object to be wrapped.
263
+ lock (trio.Lock): The lock for Trio synchronization.
264
+ limiter (trio.CapacityLimiter): The capacity limiter for Trio.
265
+ trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
266
+ bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
267
+
268
+ Returns:
269
+ _TRIO_BIDI_WRAPPER_TYPE: An instance of the wrapper class.
270
+
271
+ Raises:
272
+ TypeIsNotWrapper: If the provided wrapper_class does not implement TrioBiDiInstanceWrapper.
273
+ """
274
+
275
+ if not isinstance(wrapper_class, TrioBiDiInstanceWrapper):
276
+ raise ProtocolComplianceError(instance=wrapper_class, expected_protocols=TrioBiDiInstanceWrapper)
277
+
278
+ return wrapper_class.from_legacy(
279
+ legacy_object=legacy_object,
280
+ lock=lock,
281
+ limiter=limiter,
282
+ trio_token=trio_token,
283
+ bidi_buffer_size=bidi_buffer_size
284
+ )
285
+
286
+
246
287
  def get_sync_instance_wrapper(wrapper_class: Type[_SYNC_WRAPPER_TYPE], legacy_object: Any) -> _SYNC_WRAPPER_TYPE:
247
288
  """
248
289
  Creates a synchronous instance wrapper for a legacy Selenium object.