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,46 @@
1
+ from typing import Any, List, Optional
2
+ from selenium.webdriver.common.by import By
3
+ from osn_selenium.instances.convert import get_legacy_instance
4
+ from osn_selenium.exceptions.instance import NotExpectedTypeError
5
+ from selenium.webdriver.remote.shadowroot import (
6
+ ShadowRoot as legacyShadowRoot
7
+ )
8
+ from selenium.webdriver.remote.webelement import (
9
+ WebElement as legacyWebElement
10
+ )
11
+
12
+
13
+ __all__ = ["UnifiedShadowRoot"]
14
+
15
+
16
+ class UnifiedShadowRoot:
17
+ def __init__(self, selenium_shadow_root: legacyShadowRoot):
18
+ if not isinstance(selenium_shadow_root, legacyShadowRoot):
19
+ raise NotExpectedTypeError(expected_type=legacyShadowRoot, received_instance=selenium_shadow_root)
20
+
21
+ self._selenium_shadow_root = selenium_shadow_root
22
+
23
+ def __repr__(self) -> str:
24
+ return self._legacy_impl.__repr__()
25
+
26
+ @property
27
+ def _legacy_impl(self) -> legacyShadowRoot:
28
+ return self._selenium_shadow_root
29
+
30
+ def __eq__(self, other: Any) -> bool:
31
+ return self._legacy_impl == get_legacy_instance(instance=other)
32
+
33
+ def __hash__(self) -> int:
34
+ return self._legacy_impl.__hash__()
35
+
36
+ def __ne__(self, other: Any) -> bool:
37
+ return self._legacy_impl != get_legacy_instance(instance=other)
38
+
39
+ def _find_element_impl(self, by: str = By.ID, value: Optional[str] = None) -> legacyWebElement:
40
+ return self._legacy_impl.find_element(by=by, value=value)
41
+
42
+ def _find_elements_impl(self, by: str = By.ID, value: Optional[str] = None) -> List[legacyWebElement]:
43
+ return self._legacy_impl.find_elements(by=by, value=value)
44
+
45
+ def _id_impl(self) -> str:
46
+ return self._legacy_impl.id
@@ -0,0 +1,48 @@
1
+ from typing import Optional, Union
2
+ from osn_selenium.exceptions.instance import NotExpectedTypeError
3
+ from selenium.webdriver.common.bidi.storage import (
4
+ BrowsingContextPartitionDescriptor,
5
+ CookieFilter,
6
+ DeleteCookiesResult,
7
+ GetCookiesResult,
8
+ PartialCookie,
9
+ SetCookieResult,
10
+ Storage as legacyStorage,
11
+ StorageKeyPartitionDescriptor
12
+ )
13
+
14
+
15
+ __all__ = ["UnifiedStorage"]
16
+
17
+
18
+ class UnifiedStorage:
19
+ def __init__(self, selenium_storage: legacyStorage):
20
+ if not isinstance(selenium_storage, legacyStorage):
21
+ raise NotExpectedTypeError(expected_type=legacyStorage, received_instance=selenium_storage)
22
+
23
+ self._selenium_storage = selenium_storage
24
+
25
+ def _delete_cookies_impl(
26
+ self,
27
+ filter: Optional[CookieFilter] = None,
28
+ partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
29
+ ) -> DeleteCookiesResult:
30
+ return self._legacy_impl.delete_cookies(filter=filter, partition=partition)
31
+
32
+ def _get_cookies_impl(
33
+ self,
34
+ filter: Optional[CookieFilter],
35
+ partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
36
+ ) -> GetCookiesResult:
37
+ return self._legacy_impl.get_cookies(filter=filter, partition=partition)
38
+
39
+ @property
40
+ def _legacy_impl(self) -> legacyStorage:
41
+ return self._selenium_storage
42
+
43
+ def _set_cookie_impl(
44
+ self,
45
+ cookie: PartialCookie,
46
+ partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
47
+ ) -> SetCookieResult:
48
+ return self._legacy_impl.set_cookie(cookie=cookie, partition=partition)
@@ -0,0 +1,49 @@
1
+ from typing import Optional, Union
2
+ from selenium.webdriver.common.alert import Alert as legacyAlert
3
+ from osn_selenium.exceptions.instance import NotExpectedTypeError
4
+ from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
5
+ from osn_selenium.instances.convert import (
6
+ get_legacy_frame_reference
7
+ )
8
+ from selenium.webdriver.remote.switch_to import (
9
+ SwitchTo as legacySwitchTo
10
+ )
11
+ from selenium.webdriver.remote.webelement import (
12
+ WebElement as legacyWebElement
13
+ )
14
+
15
+
16
+ __all__ = ["UnifiedSwitchTo"]
17
+
18
+
19
+ class UnifiedSwitchTo:
20
+ def __init__(self, selenium_switch_to: legacySwitchTo):
21
+ if not isinstance(selenium_switch_to, legacySwitchTo):
22
+ raise NotExpectedTypeError(expected_type=legacySwitchTo, received_instance=selenium_switch_to)
23
+
24
+ self._selenium_switch_to = selenium_switch_to
25
+
26
+ def _active_element_impl(self) -> legacyWebElement:
27
+ return self._legacy_impl.active_element
28
+
29
+ def _alert_impl(self) -> legacyAlert:
30
+ return self._legacy_impl.alert
31
+
32
+ def _default_content_impl(self) -> None:
33
+ self._legacy_impl.default_content()
34
+
35
+ def _frame_impl(self, frame_reference: Union[str, int, WEB_ELEMENT_TYPEHINT]) -> None:
36
+ self._legacy_impl.frame(frame_reference=get_legacy_frame_reference(frame_reference))
37
+
38
+ @property
39
+ def _legacy_impl(self) -> legacySwitchTo:
40
+ return self._selenium_switch_to
41
+
42
+ def _new_window_impl(self, type_hint: Optional[str] = None) -> None:
43
+ self._legacy_impl.new_window(type_hint=type_hint)
44
+
45
+ def _parent_frame_impl(self) -> None:
46
+ self._legacy_impl.parent_frame()
47
+
48
+ def _window_impl(self, window_name: str) -> None:
49
+ self._legacy_impl.window(window_name=window_name)
@@ -0,0 +1,45 @@
1
+ from typing import Callable, TypeVar
2
+ from osn_selenium.exceptions.instance import NotExpectedTypeError
3
+ from osn_selenium.instances._typehints import (
4
+ WebDriverWaitInputType
5
+ )
6
+ from selenium.webdriver.support.wait import (
7
+ WebDriverWait as legacyWebDriverWait
8
+ )
9
+
10
+
11
+ __all__ = ["OUTPUT", "UnifiedWebDriverWait"]
12
+
13
+ OUTPUT = TypeVar("OUTPUT")
14
+
15
+
16
+ class UnifiedWebDriverWait:
17
+ def __init__(self, selenium_webdriver_wait: legacyWebDriverWait):
18
+ if not isinstance(selenium_webdriver_wait, legacyWebDriverWait):
19
+ raise NotExpectedTypeError(
20
+ expected_type=legacyWebDriverWait,
21
+ received_instance=selenium_webdriver_wait
22
+ )
23
+
24
+ self._selenium_webdriver_wait = selenium_webdriver_wait
25
+
26
+ def __repr__(self) -> str:
27
+ return self._legacy_impl.__repr__()
28
+
29
+ @property
30
+ def _legacy_impl(self) -> legacyWebDriverWait:
31
+ return self._selenium_webdriver_wait
32
+
33
+ def _until_impl(
34
+ self,
35
+ method: Callable[[WebDriverWaitInputType], OUTPUT],
36
+ message: str = ""
37
+ ) -> OUTPUT:
38
+ return self._legacy_impl.until(method=method, message=message)
39
+
40
+ def _until_not_impl(
41
+ self,
42
+ method: Callable[[WebDriverWaitInputType], OUTPUT],
43
+ message: str = ""
44
+ ) -> OUTPUT:
45
+ return self._legacy_impl.until_not(method=method, message=message)
@@ -0,0 +1,145 @@
1
+ from selenium.webdriver.common.by import By
2
+ from osn_selenium.instances.convert import get_legacy_instance
3
+ from typing import (
4
+ Any,
5
+ Dict,
6
+ Iterable,
7
+ List,
8
+ Optional
9
+ )
10
+ from selenium.webdriver.remote.shadowroot import (
11
+ ShadowRoot as legacyShadowRoot
12
+ )
13
+ from selenium.webdriver.remote.webelement import (
14
+ WebElement as legacyWebElement
15
+ )
16
+ from selenium.webdriver.support.wait import (
17
+ WebDriverWait as legacyWebDriverWait
18
+ )
19
+
20
+
21
+ __all__ = ["UnifiedWebElement"]
22
+
23
+
24
+ class UnifiedWebElement:
25
+ def __init__(self, selenium_web_element: legacyWebElement):
26
+ if not isinstance(selenium_web_element, legacyWebElement):
27
+ raise ExpectedTypeError(
28
+ expected_class=legacyWebElement,
29
+ received_instance=selenium_web_element
30
+ )
31
+
32
+ self._selenium_web_element = selenium_web_element
33
+
34
+ def __repr__(self) -> str:
35
+ return self._legacy_impl.__repr__()
36
+
37
+ @property
38
+ def _legacy_impl(self) -> legacyWebElement:
39
+ return self._selenium_web_element
40
+
41
+ def __eq__(self, other: Any) -> bool:
42
+ return self._legacy_impl == get_legacy_instance(instance=other)
43
+
44
+ def __hash__(self) -> int:
45
+ return self._legacy_impl.__hash__()
46
+
47
+ def __ne__(self, other: Any) -> bool:
48
+ return self._legacy_impl != get_legacy_instance(instance=other)
49
+
50
+ def _accessible_name_impl(self) -> str:
51
+ return self._legacy_impl.accessible_name
52
+
53
+ def _aria_role_impl(self) -> str:
54
+ return self._legacy_impl.aria_role
55
+
56
+ def _clear_impl(self) -> None:
57
+ self._legacy_impl.clear()
58
+
59
+ def _click_impl(self) -> None:
60
+ self._legacy_impl.click()
61
+
62
+ def _find_element_impl(self, by: str = By.ID, value: Any = None) -> legacyWebElement:
63
+ return self._legacy_impl.find_element(by=by, value=value)
64
+
65
+ def _find_elements_impl(self, by: str = By.ID, value: Any = None) -> List[legacyWebElement]:
66
+ return self._legacy_impl.find_elements(by=by, value=value)
67
+
68
+ def _get_attribute_impl(self, name: str) -> Optional[str]:
69
+ return self._legacy_impl.get_attribute(name=name)
70
+
71
+ def _get_dom_attribute_impl(self, name: str) -> Optional[str]:
72
+ return self._legacy_impl.get_dom_attribute(name=name)
73
+
74
+ def _get_property_impl(self, name: str) -> Any:
75
+ return self._legacy_impl.get_property(name=name)
76
+
77
+ def _id_impl(self) -> str:
78
+ return self._legacy_impl.id
79
+
80
+ def _is_displayed_impl(self) -> bool:
81
+ return self._legacy_impl.is_displayed()
82
+
83
+ def _is_enabled_impl(self) -> bool:
84
+ return self._legacy_impl.is_enabled()
85
+
86
+ def _is_selected_impl(self) -> bool:
87
+ return self._legacy_impl.is_selected()
88
+
89
+ def _location_impl(self) -> Dict:
90
+ return self._legacy_impl.location
91
+
92
+ def _location_once_scrolled_into_view_impl(self) -> Dict:
93
+ return self._legacy_impl.location_once_scrolled_into_view
94
+
95
+ def _parent_impl(self) -> Any:
96
+ return self._legacy_impl.parent
97
+
98
+ def _rect_impl(self) -> Dict:
99
+ return self._legacy_impl.rect
100
+
101
+ def _screenshot_as_base64_impl(self) -> str:
102
+ return self._legacy_impl.screenshot_as_base64
103
+
104
+ def _screenshot_as_png_impl(self) -> bytes:
105
+ return self._legacy_impl.screenshot_as_png
106
+
107
+ def _screenshot_impl(self, filename: str) -> bool:
108
+ return self._legacy_impl.screenshot(filename=filename)
109
+
110
+ def _send_keys_impl(self, *value: str) -> None:
111
+ self._legacy_impl.send_keys(*value)
112
+
113
+ def _session_id_impl(self) -> str:
114
+ return self._legacy_impl.session_id
115
+
116
+ def _shadow_root_impl(self) -> legacyShadowRoot:
117
+ return self._legacy_impl.shadow_root
118
+
119
+ def _size_impl(self) -> Dict:
120
+ return self._legacy_impl.size
121
+
122
+ def _submit_impl(self) -> None:
123
+ self._legacy_impl.submit()
124
+
125
+ def _tag_name_impl(self) -> str:
126
+ return self._legacy_impl.tag_name
127
+
128
+ def _text_impl(self) -> str:
129
+ return self._legacy_impl.text
130
+
131
+ def _value_of_css_property_impl(self, property_name: str) -> str:
132
+ return self._legacy_impl.value_of_css_property(property_name=property_name)
133
+
134
+ def _web_driver_wait_impl(
135
+ self,
136
+ timeout: float,
137
+ poll_frequency: float = 0.5,
138
+ ignored_exceptions: Optional[Iterable[BaseException]] = None,
139
+ ) -> legacyWebDriverWait:
140
+ return legacyWebDriverWait(
141
+ driver=self._legacy_impl,
142
+ timeout=timeout,
143
+ poll_frequency=poll_frequency,
144
+ ignored_exceptions=ignored_exceptions
145
+ )
@@ -0,0 +1,38 @@
1
+ from typing import (
2
+ Dict,
3
+ Optional,
4
+ Union
5
+ )
6
+ from osn_selenium.exceptions.instance import NotExpectedTypeError
7
+ from selenium.webdriver.common.bidi.webextension import (
8
+ WebExtension as legacyWebExtension
9
+ )
10
+
11
+
12
+ __all__ = ["UnifiedWebExtension"]
13
+
14
+
15
+ class UnifiedWebExtension:
16
+ def __init__(self, selenium_web_extension: legacyWebExtension):
17
+ if not isinstance(selenium_web_extension, legacyWebExtension):
18
+ raise NotExpectedTypeError(
19
+ expected_type=legacyWebExtension,
20
+ received_instance=selenium_web_extension
21
+ )
22
+
23
+ self._selenium_web_extension = selenium_web_extension
24
+
25
+ def _install_impl(
26
+ self,
27
+ path: Optional[str] = None,
28
+ archive_path: Optional[str] = None,
29
+ base64_value: Optional[str] = None,
30
+ ) -> Dict:
31
+ return self._legacy_impl.install(path=path, archive_path=archive_path, base64_value=base64_value)
32
+
33
+ @property
34
+ def _legacy_impl(self) -> legacyWebExtension:
35
+ return self._selenium_web_extension
36
+
37
+ def _uninstall_impl(self, extension_id_or_result: Union[str, Dict]) -> None:
38
+ self._legacy_impl.uninstall(extension_id_or_result=extension_id_or_result)
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,63 @@
1
+ from typing import (
2
+ Any,
3
+ Iterable,
4
+ Mapping
5
+ )
6
+
7
+
8
+ __all__ = ["convert_to_js_value", "inject_data_in_js_script"]
9
+
10
+
11
+ def convert_to_js_value(value: Any) -> str:
12
+ """
13
+ Converts a Python value to its JavaScript string representation.
14
+
15
+ Args:
16
+ value (Any): The value to convert. Can be a boolean, string, mapping, iterable, or None.
17
+
18
+ Returns:
19
+ str: The JavaScript string representation of the value.
20
+ """
21
+
22
+ if isinstance(value, (str, bytes)):
23
+ return f'"{value}"'
24
+
25
+ if isinstance(value, bool):
26
+ return "true" if value else "false"
27
+
28
+ if value is None:
29
+ return "null"
30
+
31
+ if isinstance(value, Mapping):
32
+ return f"{{{', '.join(f'{k}: {convert_to_js_value(value=v)}' for k, v in value.items())}}}"
33
+
34
+ if isinstance(value, Iterable):
35
+ return f"[{', '.join(convert_to_js_value(value=v) for v in value)}]"
36
+
37
+ return str(value)
38
+
39
+
40
+ def inject_data_in_js_script(script: str, data: Mapping[str, Any], convert_to_js: bool = True) -> str:
41
+ """
42
+ Injects data into a JavaScript template string by replacing placeholders.
43
+
44
+ Args:
45
+ script (str): The JavaScript template string.
46
+ data (Mapping[str, Any]): A dictionary mapping placeholders to values.
47
+ convert_to_js (bool): If True, converts values to JS syntax before replacement.
48
+
49
+ Returns:
50
+ str: The modified JavaScript string with data injected.
51
+ """
52
+
53
+ injected_script = script
54
+
55
+ for placeholder, value in data.items():
56
+ if convert_to_js:
57
+ replacement = convert_to_js_value(value)
58
+ else:
59
+ replacement = str(value)
60
+
61
+ injected_script = injected_script.replace(placeholder, replacement)
62
+
63
+ return injected_script
@@ -0,0 +1,120 @@
1
+ from pydantic import Field
2
+ from typing import Dict, List, Literal
3
+ from osn_selenium.models import DictModel
4
+ from osn_selenium.javascript.functions import get_js_scripts
5
+ from osn_selenium.javascript.fingerprint._functions import add_code_level
6
+ from osn_selenium.javascript.fingerprint.registry.models import RegistryItem
7
+ from osn_selenium.javascript.fingerprint._detect.functions import get_hook_js
8
+ from osn_selenium.javascript.fingerprint.registry import FINGERPRINT_REGISTRY
9
+ from osn_selenium.javascript.fingerprint._typehints import SPOOF_RULE_TYPEHINT
10
+ from osn_selenium.javascript._functions import (
11
+ convert_to_js_value,
12
+ inject_data_in_js_script
13
+ )
14
+
15
+
16
+ __all__ = ["FingerprintSettings"]
17
+
18
+
19
+ class FingerprintSettings(DictModel):
20
+ """
21
+ Configuration settings for browser fingerprinting detection and spoofing.
22
+
23
+ Attributes:
24
+ optimize_events (bool): Whether to optimize event reporting to avoid duplicates.
25
+ detect_events_mode (Literal["disable", "always", "not_spoofed"]): Logic for reporting detected events.
26
+ registry (Dict[str, RegistryItem]): Custom registry items to override or extend defaults.
27
+ use_preset_registry (bool): Whether to include the default built-in registry.
28
+ """
29
+
30
+ optimize_events: bool = True
31
+ detect_events_mode: Literal["disable", "always", "not_spoofed"] = "not_spoofed"
32
+
33
+ registry: Dict[str, RegistryItem] = Field(default_factory=dict)
34
+ use_preset_registry: bool = True
35
+
36
+ def _get_registry(self) -> Dict[str, RegistryItem]:
37
+ """
38
+ Compiles the final registry by merging presets with custom user overrides.
39
+
40
+ Returns:
41
+ Dict[str, RegistryItem]: The active registry map.
42
+ """
43
+
44
+ if self.use_preset_registry:
45
+ registry_ = FINGERPRINT_REGISTRY.copy()
46
+ else:
47
+ registry_ = {}
48
+
49
+ if self.registry:
50
+ registry_.update(**self.registry)
51
+
52
+ return registry_
53
+
54
+ def _generate_hooks_js(self) -> str:
55
+ """
56
+ Generates the JavaScript code that hooks into browser APIs for detection and spoofing.
57
+
58
+ Returns:
59
+ str: The generated hooks block.
60
+ """
61
+
62
+ registry_ = self._get_registry()
63
+
64
+ hooks: List[str] = []
65
+ register_items = {item.path: item for item in registry_.values()}
66
+
67
+ for path, entry in register_items.items():
68
+ is_spoofed: bool = entry is not None and entry.spoofing_rule is not None
69
+ is_detected: bool = (
70
+ self.detect_events_mode == "always"
71
+ or self.detect_events_mode == "not_spoofed"
72
+ and not is_spoofed
73
+ )
74
+
75
+ hooks.append(
76
+ get_hook_js(path=path, entry=entry, is_detected=is_detected, is_spoofed=is_spoofed)
77
+ )
78
+
79
+ return "\n".join(hooks)
80
+
81
+ def _generate_modifiers_js(self) -> str:
82
+ """
83
+ Generates the JavaScript code that defines spoofing modifiers.
84
+
85
+ Returns:
86
+ str: The generated modifiers block.
87
+ """
88
+
89
+ registry_ = self._get_registry()
90
+ lines = []
91
+
92
+ for key, parameter in registry_.items():
93
+ if parameter.spoofing_rule is not None:
94
+ js_func = parameter.spoofing_rule.generate_js(path=parameter.path)
95
+ lines.append(f"MODIFIERS['{parameter.path}'] = {js_func};")
96
+
97
+ return "\n".join(lines)
98
+
99
+ def generate_js(self) -> str:
100
+ """
101
+ Generates the complete JavaScript code to inject into the browser.
102
+
103
+ This methods combines the fingerprint injection script with the dynamic
104
+ modifiers and detection hooks based on the current configuration.
105
+
106
+ Returns:
107
+ str: The executable JavaScript code.
108
+ """
109
+
110
+ scripts = get_js_scripts()
111
+
112
+ return inject_data_in_js_script(
113
+ script=scripts.start_fingerprint_detection,
114
+ data={
115
+ "__MODIFIERS_PLACEHOLDER__": add_code_level(code=self._generate_modifiers_js(), num=1),
116
+ "__DETECTION_PLACEHOLDER__": add_code_level(code=self._generate_hooks_js(), num=1),
117
+ "__SETTINGS__PLACEHOLDER__": convert_to_js_value(value={"optimize_events": self.optimize_events})
118
+ },
119
+ convert_to_js=False,
120
+ )
@@ -0,0 +1,41 @@
1
+ import functools
2
+ from typing import (
3
+ Any,
4
+ Callable,
5
+ ParamSpec,
6
+ TypeVar
7
+ )
8
+ from osn_selenium.javascript.fingerprint._functions import add_code_level
9
+
10
+
11
+ __all__ = ["indent_code"]
12
+
13
+ _METHOD_INPUT = ParamSpec("_METHOD_INPUT")
14
+ _METHOD_OUTPUT = TypeVar("_METHOD_OUTPUT")
15
+ _METHOD = TypeVar("_METHOD", bound=Callable[..., Any])
16
+
17
+
18
+ def indent_code(func: _METHOD) -> _METHOD:
19
+ """
20
+ Decorator that indents the result of a function which returns a string code block.
21
+
22
+ If the result is empty, it returns an empty string. Otherwise, it adds one level
23
+ of indentation (tab) to the result.
24
+
25
+ Args:
26
+ func (_METHOD): The function to wrap.
27
+
28
+ Returns:
29
+ _METHOD: The wrapped function.
30
+ """
31
+
32
+ @functools.wraps(func)
33
+ def wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
34
+ result = func(*args, **kwargs)
35
+
36
+ if not result:
37
+ return ""
38
+
39
+ return add_code_level(code=result, num=1)
40
+
41
+ return wrapper