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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (635) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_functions.py +84 -0
  4. osn_selenium/_typehints.py +19 -0
  5. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  6. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  7. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  8. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  9. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  10. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  11. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  12. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  13. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  14. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  15. osn_selenium/abstract/executors/cdp/console.py +18 -0
  16. osn_selenium/abstract/executors/cdp/css.py +197 -0
  17. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  18. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  19. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  20. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  21. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  22. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  23. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  24. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  25. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  26. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  27. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  28. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  29. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  30. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  31. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  32. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  33. osn_selenium/abstract/executors/cdp/input.py +158 -0
  34. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  35. osn_selenium/abstract/executors/cdp/io.py +24 -0
  36. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  37. osn_selenium/abstract/executors/cdp/log.py +27 -0
  38. osn_selenium/abstract/executors/cdp/media.py +14 -0
  39. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  40. osn_selenium/abstract/executors/cdp/network.py +252 -0
  41. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  42. osn_selenium/abstract/executors/cdp/page.py +347 -0
  43. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  44. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  45. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  46. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  47. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  48. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  49. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  50. osn_selenium/abstract/executors/cdp/security.py +26 -0
  51. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  52. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  53. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  54. osn_selenium/abstract/executors/cdp/target.py +125 -0
  55. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  56. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  57. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  58. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  59. osn_selenium/abstract/executors/cdp.py +63 -0
  60. osn_selenium/abstract/executors/javascript.py +203 -0
  61. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  62. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  63. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  64. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  65. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  66. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  67. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  68. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  69. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  70. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  71. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  72. osn_selenium/abstract/instances/alert.py +67 -0
  73. osn_selenium/abstract/instances/browser.py +76 -0
  74. osn_selenium/abstract/instances/browsing_context.py +310 -0
  75. osn_selenium/abstract/instances/dialog.py +107 -0
  76. osn_selenium/abstract/instances/fedcm.py +133 -0
  77. osn_selenium/abstract/instances/mobile.py +79 -0
  78. osn_selenium/abstract/instances/network.py +100 -0
  79. osn_selenium/abstract/instances/permissions.py +52 -0
  80. osn_selenium/abstract/instances/script.py +109 -0
  81. osn_selenium/abstract/instances/shadow_root.py +81 -0
  82. osn_selenium/abstract/instances/storage.py +98 -0
  83. osn_selenium/abstract/instances/switch_to.py +104 -0
  84. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  85. osn_selenium/abstract/instances/web_element.py +395 -0
  86. osn_selenium/abstract/instances/web_extension.py +70 -0
  87. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  88. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  89. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  90. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  91. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  92. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  93. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  94. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  95. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  96. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  97. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  98. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  99. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  100. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  101. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  102. osn_selenium/abstract/webdriver/core/base.py +298 -0
  103. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  104. osn_selenium/abstract/webdriver/core/components.py +82 -0
  105. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  106. osn_selenium/abstract/webdriver/core/element.py +55 -0
  107. osn_selenium/abstract/webdriver/core/file.py +82 -0
  108. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  109. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  110. osn_selenium/abstract/webdriver/core/script.py +88 -0
  111. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  112. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  113. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  114. osn_selenium/abstract/webdriver/core/window.py +237 -0
  115. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  116. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  117. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  118. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  119. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  120. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  121. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  122. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  123. osn_selenium/base_mixin.py +122 -0
  124. osn_selenium/browsers_handler/__init__.py +47 -17
  125. osn_selenium/browsers_handler/_linux.py +226 -0
  126. osn_selenium/browsers_handler/_windows.py +21 -14
  127. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  128. osn_selenium/dev_tools/_decorators.py +149 -0
  129. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  130. osn_selenium/dev_tools/_functions.py +174 -0
  131. osn_selenium/dev_tools/_system_utils.py +35 -0
  132. osn_selenium/dev_tools/_typehints.py +35 -0
  133. osn_selenium/dev_tools/_validators.py +227 -0
  134. osn_selenium/dev_tools/_wrappers.py +92 -0
  135. osn_selenium/dev_tools/domains/__init__.py +7 -40
  136. osn_selenium/dev_tools/domains/abstract.py +98 -254
  137. osn_selenium/dev_tools/domains/fetch.py +229 -906
  138. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  139. osn_selenium/dev_tools/filters.py +40 -0
  140. osn_selenium/dev_tools/logger/main.py +214 -0
  141. osn_selenium/dev_tools/logger/models.py +232 -0
  142. osn_selenium/dev_tools/logger/target.py +278 -0
  143. osn_selenium/dev_tools/manager/__init__.py +16 -0
  144. osn_selenium/dev_tools/manager/base.py +124 -0
  145. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  146. osn_selenium/dev_tools/manager/logging.py +153 -0
  147. osn_selenium/dev_tools/manager/settings.py +89 -0
  148. osn_selenium/dev_tools/manager/targets.py +175 -0
  149. osn_selenium/dev_tools/models.py +49 -0
  150. osn_selenium/dev_tools/settings.py +139 -0
  151. osn_selenium/dev_tools/target/__init__.py +16 -0
  152. osn_selenium/dev_tools/target/base.py +427 -0
  153. osn_selenium/dev_tools/target/detach.py +54 -0
  154. osn_selenium/dev_tools/target/discovery.py +112 -0
  155. osn_selenium/dev_tools/target/events.py +120 -0
  156. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  157. osn_selenium/dev_tools/target/lifecycle.py +184 -0
  158. osn_selenium/dev_tools/target/logging.py +163 -0
  159. osn_selenium/exceptions/__init__.py +1 -0
  160. osn_selenium/exceptions/base.py +9 -0
  161. osn_selenium/exceptions/configuration.py +84 -0
  162. osn_selenium/exceptions/dependencies.py +60 -0
  163. osn_selenium/exceptions/devtools.py +114 -0
  164. osn_selenium/exceptions/flags.py +45 -0
  165. osn_selenium/exceptions/instance.py +92 -0
  166. osn_selenium/exceptions/javascript.py +31 -0
  167. osn_selenium/exceptions/logic.py +31 -0
  168. osn_selenium/exceptions/path.py +77 -0
  169. osn_selenium/exceptions/platform.py +33 -0
  170. osn_selenium/exceptions/protocol.py +86 -0
  171. osn_selenium/exceptions/webdriver.py +44 -0
  172. osn_selenium/exceptions/window.py +63 -0
  173. osn_selenium/executors/__init__.py +1 -0
  174. osn_selenium/executors/sync/__init__.py +1 -0
  175. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  176. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  177. osn_selenium/executors/sync/cdp/animation.py +50 -0
  178. osn_selenium/executors/sync/cdp/audits.py +48 -0
  179. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  180. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  181. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  182. osn_selenium/executors/sync/cdp/browser.py +131 -0
  183. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  184. osn_selenium/executors/sync/cdp/cast.py +38 -0
  185. osn_selenium/executors/sync/cdp/console.py +24 -0
  186. osn_selenium/executors/sync/cdp/css.py +187 -0
  187. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  188. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  189. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  190. osn_selenium/executors/sync/cdp/dom.py +310 -0
  191. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  192. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  193. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  194. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  195. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  196. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  197. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  198. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  199. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  200. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  201. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  202. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  203. osn_selenium/executors/sync/cdp/input.py +233 -0
  204. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  205. osn_selenium/executors/sync/cdp/io.py +33 -0
  206. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  207. osn_selenium/executors/sync/cdp/log.py +35 -0
  208. osn_selenium/executors/sync/cdp/media.py +21 -0
  209. osn_selenium/executors/sync/cdp/memory.py +62 -0
  210. osn_selenium/executors/sync/cdp/network.py +287 -0
  211. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  212. osn_selenium/executors/sync/cdp/page.py +365 -0
  213. osn_selenium/executors/sync/cdp/performance.py +33 -0
  214. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  215. osn_selenium/executors/sync/cdp/preload.py +21 -0
  216. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  217. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  218. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  219. osn_selenium/executors/sync/cdp/schema.py +23 -0
  220. osn_selenium/executors/sync/cdp/security.py +30 -0
  221. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  222. osn_selenium/executors/sync/cdp/storage.py +151 -0
  223. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  224. osn_selenium/executors/sync/cdp/target.py +147 -0
  225. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  226. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  227. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  228. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  229. osn_selenium/executors/sync/cdp.py +100 -0
  230. osn_selenium/executors/sync/javascript.py +79 -0
  231. osn_selenium/executors/trio_threads/__init__.py +1 -0
  232. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  233. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  234. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  235. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  236. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  237. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  238. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  239. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  240. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  241. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  242. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  243. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  244. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  245. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  246. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  247. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  248. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  249. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  250. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  251. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  252. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  253. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  254. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  255. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  256. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  257. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  258. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  259. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  260. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  261. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  262. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  263. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  264. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  265. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  266. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  267. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  268. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  269. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  270. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  271. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  272. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  273. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  274. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  275. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  276. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  277. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  278. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  279. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  280. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  281. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  282. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  283. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  284. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  285. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  286. osn_selenium/executors/trio_threads/cdp.py +104 -0
  287. osn_selenium/executors/trio_threads/javascript.py +90 -0
  288. osn_selenium/executors/unified/__init__.py +1 -0
  289. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  290. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  291. osn_selenium/executors/unified/cdp/animation.py +50 -0
  292. osn_selenium/executors/unified/cdp/audits.py +45 -0
  293. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  294. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  295. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  296. osn_selenium/executors/unified/cdp/browser.py +143 -0
  297. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  298. osn_selenium/executors/unified/cdp/cast.py +32 -0
  299. osn_selenium/executors/unified/cdp/console.py +18 -0
  300. osn_selenium/executors/unified/cdp/css.py +237 -0
  301. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  302. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  303. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  304. osn_selenium/executors/unified/cdp/dom.py +380 -0
  305. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  306. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  307. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  308. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  309. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  310. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  311. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  312. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  313. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  314. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  315. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  316. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  317. osn_selenium/executors/unified/cdp/input.py +254 -0
  318. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  319. osn_selenium/executors/unified/cdp/io.py +29 -0
  320. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  321. osn_selenium/executors/unified/cdp/log.py +29 -0
  322. osn_selenium/executors/unified/cdp/media.py +15 -0
  323. osn_selenium/executors/unified/cdp/memory.py +59 -0
  324. osn_selenium/executors/unified/cdp/network.py +323 -0
  325. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  326. osn_selenium/executors/unified/cdp/page.py +410 -0
  327. osn_selenium/executors/unified/cdp/performance.py +27 -0
  328. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  329. osn_selenium/executors/unified/cdp/preload.py +15 -0
  330. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  331. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  332. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  333. osn_selenium/executors/unified/cdp/schema.py +17 -0
  334. osn_selenium/executors/unified/cdp/security.py +27 -0
  335. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  336. osn_selenium/executors/unified/cdp/storage.py +178 -0
  337. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  338. osn_selenium/executors/unified/cdp/target.py +165 -0
  339. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  340. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  341. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  342. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  343. osn_selenium/executors/unified/javascript.py +104 -0
  344. osn_selenium/flags/__init__.py +1 -0
  345. osn_selenium/flags/_functions.py +45 -0
  346. osn_selenium/flags/_typehints.py +34 -0
  347. osn_selenium/flags/_validators.py +101 -0
  348. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
  349. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
  350. osn_selenium/flags/chrome.py +259 -0
  351. osn_selenium/flags/edge.py +259 -0
  352. osn_selenium/flags/models/__init__.py +1 -0
  353. osn_selenium/flags/models/base.py +130 -0
  354. osn_selenium/flags/models/blink.py +263 -0
  355. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  356. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  357. osn_selenium/flags/models/values.py +44 -0
  358. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  359. osn_selenium/flags/yandex.py +259 -0
  360. osn_selenium/instances/__init__.py +1 -0
  361. osn_selenium/instances/_functions.py +242 -0
  362. osn_selenium/instances/_typehints.py +148 -0
  363. osn_selenium/instances/_utils.py +143 -0
  364. osn_selenium/instances/convert.py +287 -0
  365. osn_selenium/instances/protocols.py +105 -0
  366. osn_selenium/instances/sync/__init__.py +1 -0
  367. osn_selenium/instances/sync/action_chains/__init__.py +32 -0
  368. osn_selenium/instances/sync/action_chains/base.py +74 -0
  369. osn_selenium/instances/sync/action_chains/click.py +61 -0
  370. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  371. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  372. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  373. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  374. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  375. osn_selenium/instances/sync/action_chains/move.py +46 -0
  376. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  377. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  378. osn_selenium/instances/sync/alert.py +69 -0
  379. osn_selenium/instances/sync/browser.py +72 -0
  380. osn_selenium/instances/sync/browsing_context.py +193 -0
  381. osn_selenium/instances/sync/dialog.py +81 -0
  382. osn_selenium/instances/sync/fedcm.py +92 -0
  383. osn_selenium/instances/sync/mobile.py +75 -0
  384. osn_selenium/instances/sync/network.py +90 -0
  385. osn_selenium/instances/sync/permissions.py +80 -0
  386. osn_selenium/instances/sync/script.py +77 -0
  387. osn_selenium/instances/sync/shadow_root.py +113 -0
  388. osn_selenium/instances/sync/storage.py +91 -0
  389. osn_selenium/instances/sync/switch_to.py +92 -0
  390. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  391. osn_selenium/instances/sync/web_element.py +179 -0
  392. osn_selenium/instances/sync/web_extension.py +77 -0
  393. osn_selenium/instances/trio_threads/__init__.py +1 -0
  394. osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
  395. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  396. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  397. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  399. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  400. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  401. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  402. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  403. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  404. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  405. osn_selenium/instances/trio_threads/alert.py +87 -0
  406. osn_selenium/instances/trio_threads/browser.py +90 -0
  407. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  408. osn_selenium/instances/trio_threads/dialog.py +99 -0
  409. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  410. osn_selenium/instances/trio_threads/mobile.py +93 -0
  411. osn_selenium/instances/trio_threads/network.py +108 -0
  412. osn_selenium/instances/trio_threads/permissions.py +102 -0
  413. osn_selenium/instances/trio_threads/script.py +95 -0
  414. osn_selenium/instances/trio_threads/shadow_root.py +154 -0
  415. osn_selenium/instances/trio_threads/storage.py +109 -0
  416. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  417. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  418. osn_selenium/instances/trio_threads/web_element.py +217 -0
  419. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  420. osn_selenium/instances/unified/__init__.py +1 -0
  421. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  422. osn_selenium/instances/unified/action_chains/base.py +31 -0
  423. osn_selenium/instances/unified/action_chains/click.py +27 -0
  424. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  425. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  426. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  427. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  428. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  429. osn_selenium/instances/unified/action_chains/move.py +24 -0
  430. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  431. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  432. osn_selenium/instances/unified/alert.py +29 -0
  433. osn_selenium/instances/unified/browser.py +33 -0
  434. osn_selenium/instances/unified/browsing_context.py +151 -0
  435. osn_selenium/instances/unified/dialog.py +42 -0
  436. osn_selenium/instances/unified/fedcm.py +48 -0
  437. osn_selenium/instances/unified/mobile.py +36 -0
  438. osn_selenium/instances/unified/network.py +50 -0
  439. osn_selenium/instances/unified/permissions.py +43 -0
  440. osn_selenium/instances/unified/script.py +38 -0
  441. osn_selenium/instances/unified/shadow_root.py +46 -0
  442. osn_selenium/instances/unified/storage.py +48 -0
  443. osn_selenium/instances/unified/switch_to.py +49 -0
  444. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  445. osn_selenium/instances/unified/web_element.py +145 -0
  446. osn_selenium/instances/unified/web_extension.py +38 -0
  447. osn_selenium/javascript/__init__.py +1 -0
  448. osn_selenium/javascript/_functions.py +63 -0
  449. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  450. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  451. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  452. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  453. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  454. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  455. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  456. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  457. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  458. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  459. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  460. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  461. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  462. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  463. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  464. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  465. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  466. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  467. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  468. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  469. osn_selenium/javascript/functions.py +44 -0
  470. osn_selenium/javascript/models.py +35 -0
  471. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  472. osn_selenium/models.py +94 -0
  473. osn_selenium/trio_threads_mixin.py +159 -0
  474. osn_selenium/webdrivers/_args_helpers.py +181 -0
  475. osn_selenium/webdrivers/_bridges.py +57 -0
  476. osn_selenium/webdrivers/_decorators.py +83 -0
  477. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  478. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  479. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  480. osn_selenium/webdrivers/_typehints.py +10 -0
  481. osn_selenium/webdrivers/protocols.py +50 -0
  482. osn_selenium/webdrivers/sync/__init__.py +1 -0
  483. osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
  484. osn_selenium/webdrivers/sync/blink/base.py +140 -0
  485. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  486. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  487. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  488. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  489. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  490. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  491. osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
  492. osn_selenium/webdrivers/sync/chrome/base.py +118 -0
  493. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  494. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  495. osn_selenium/webdrivers/sync/core/__init__.py +100 -0
  496. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  497. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  498. osn_selenium/webdrivers/sync/core/base.py +175 -0
  499. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  500. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  501. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  502. osn_selenium/webdrivers/sync/core/element.py +42 -0
  503. osn_selenium/webdrivers/sync/core/file.py +40 -0
  504. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  505. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  506. osn_selenium/webdrivers/sync/core/script.py +53 -0
  507. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  508. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  509. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  510. osn_selenium/webdrivers/sync/core/window.py +99 -0
  511. osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
  512. osn_selenium/webdrivers/sync/edge/base.py +114 -0
  513. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  514. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  515. osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
  516. osn_selenium/webdrivers/sync/yandex/base.py +111 -0
  517. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  518. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  519. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  520. osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
  521. osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
  522. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  523. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  524. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  525. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  526. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  527. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  528. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
  529. osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
  530. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  531. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  532. osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
  533. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  534. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  535. osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
  536. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  537. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  538. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  539. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  540. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  541. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  542. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  543. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  544. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  545. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  546. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  547. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  548. osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
  549. osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
  550. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  551. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  552. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
  553. osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
  554. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  555. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  556. osn_selenium/webdrivers/unified/__init__.py +1 -0
  557. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  558. osn_selenium/webdrivers/unified/blink/base.py +135 -0
  559. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  560. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  561. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  562. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  563. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  564. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  565. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  566. osn_selenium/webdrivers/unified/chrome/base.py +58 -0
  567. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  568. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  569. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  570. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  571. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  572. osn_selenium/webdrivers/unified/core/base.py +139 -0
  573. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  574. osn_selenium/webdrivers/unified/core/components.py +32 -0
  575. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  576. osn_selenium/webdrivers/unified/core/element.py +24 -0
  577. osn_selenium/webdrivers/unified/core/file.py +35 -0
  578. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  579. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  580. osn_selenium/webdrivers/unified/core/script.py +32 -0
  581. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  582. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  583. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  584. osn_selenium/webdrivers/unified/core/window.py +135 -0
  585. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  586. osn_selenium/webdrivers/unified/edge/base.py +56 -0
  587. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  588. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  589. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  590. osn_selenium/webdrivers/unified/yandex/base.py +58 -0
  591. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  592. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  593. osn_selenium-1.1.0.dist-info/METADATA +252 -0
  594. osn_selenium-1.1.0.dist-info/RECORD +615 -0
  595. {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
  596. osn_selenium/captcha_workers/__init__.py +0 -26
  597. osn_selenium/dev_tools/_types.py +0 -22
  598. osn_selenium/dev_tools/errors.py +0 -89
  599. osn_selenium/dev_tools/logger.py +0 -558
  600. osn_selenium/dev_tools/manager.py +0 -1551
  601. osn_selenium/dev_tools/utils.py +0 -509
  602. osn_selenium/errors.py +0 -16
  603. osn_selenium/types.py +0 -118
  604. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  605. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  606. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  607. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  608. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  609. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  610. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  611. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  612. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  613. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  614. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  615. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  616. osn_selenium/webdrivers/_functions.py +0 -504
  617. osn_selenium/webdrivers/types.py +0 -390
  618. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  619. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  620. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  621. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  622. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  623. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  624. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  628. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  629. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  630. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  631. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  632. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  633. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  634. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  635. {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,313 @@
1
+ from pydantic import Field
2
+ from typing import (
3
+ Dict,
4
+ Literal,
5
+ Optional
6
+ )
7
+ from osn_selenium.javascript._functions import convert_to_js_value
8
+ from osn_selenium.javascript.fingerprint._functions import add_code_level
9
+ from osn_selenium.javascript.fingerprint.spoof.noise import (
10
+ RandomNoise,
11
+ StaticNoise
12
+ )
13
+ from osn_selenium.javascript.fingerprint.spoof._typehints import (
14
+ RANDOM_VALUE_TYPEHINT
15
+ )
16
+ from osn_selenium.javascript.fingerprint.spoof.core_rules import (
17
+ ArrayRule,
18
+ BaseRule,
19
+ RandomRule
20
+ )
21
+ from osn_selenium.javascript.fingerprint.spoof._functions import (
22
+ get_noise_js,
23
+ get_random_expression_js
24
+ )
25
+ from osn_selenium.javascript.fingerprint.spoof._templates import (
26
+ CUSTOM_RULE,
27
+ PERSISTED_RANDOM_ITEM_NOISE,
28
+ PERSISTED_RANDOM_ITEM_SET,
29
+ PERSISTENCE_CHECK_NOISE,
30
+ PERSISTENCE_CHECK_RETURN,
31
+ PERSISTENCE_SAVE_NOISE,
32
+ PERSISTENCE_SAVE_RESULT,
33
+ RANDOM_ITEM_NOISE,
34
+ RANDOM_ITEM_SET,
35
+ STATIC_ITEM_NOISE,
36
+ STATIC_ITEM_SET
37
+ )
38
+
39
+
40
+ __all__ = [
41
+ "CustomRule",
42
+ "RandomArrayNoiseRule",
43
+ "RandomArraySetRule",
44
+ "RandomItemNoiseRule",
45
+ "RandomItemSetRule",
46
+ "StaticArrayNoiseRule",
47
+ "StaticArraySetRule",
48
+ "StaticItemNoiseRule",
49
+ "StaticItemSetRule"
50
+ ]
51
+
52
+
53
+ class StaticItemSetRule(BaseRule):
54
+ """
55
+ Rule to replace a value with a static constant.
56
+ """
57
+
58
+ mode: Literal["static_item_set"] = "static_item_set"
59
+
60
+ def generate_js(self, path: str) -> str:
61
+ """
62
+ Generates JS to return a fixed value.
63
+
64
+ Args:
65
+ path (str): The object path.
66
+
67
+ Returns:
68
+ str: The generated JS.
69
+ """
70
+
71
+ return STATIC_ITEM_SET.format(result_value=convert_to_js_value(self.value))
72
+
73
+
74
+ class StaticItemNoiseRule(BaseRule):
75
+ """
76
+ Rule to apply static noise to a value.
77
+ """
78
+
79
+ mode: Literal["static_item_noise"] = "static_item_noise"
80
+ value: StaticNoise
81
+
82
+ def generate_js(self, path: str) -> str:
83
+ """
84
+ Generates JS to apply calculated static noise.
85
+
86
+ Args:
87
+ path (str): The object path.
88
+
89
+ Returns:
90
+ str: The generated JS.
91
+ """
92
+
93
+ expression = get_noise_js(
94
+ target="originalValue",
95
+ noise=str(self.value.value),
96
+ operation=self.value.operation,
97
+ round_result=self.value.round,
98
+ precision=self.value.precision,
99
+ )
100
+
101
+ return STATIC_ITEM_NOISE.format(math_expression=expression)
102
+
103
+
104
+ class StaticArraySetRule(ArrayRule):
105
+ """
106
+ Rule to replace elements in an array with static values.
107
+ """
108
+
109
+ mode: Literal["static_array_set"] = "static_array_set"
110
+
111
+ def generate_js(self, path: str) -> str:
112
+ """
113
+ Generates JS to loop through array and set static values.
114
+
115
+ Args:
116
+ path (str): The object path.
117
+
118
+ Returns:
119
+ str: The generated JS.
120
+ """
121
+
122
+ def get_expr(item):
123
+ return convert_to_js_value(item)
124
+
125
+ return self._generate_array_js(get_expr)
126
+
127
+
128
+ class StaticArrayNoiseRule(ArrayRule):
129
+ """
130
+ Rule to apply static noise to elements in an array.
131
+ """
132
+
133
+ mode: Literal["static_array_noise"] = "static_array_noise"
134
+ value_by_channel: Dict[int, StaticNoise] = Field(default_factory=dict)
135
+
136
+ def generate_js(self, path: str) -> str:
137
+ """
138
+ Generates JS to loop through array and apply static noise.
139
+
140
+ Args:
141
+ path (str): The object path.
142
+
143
+ Returns:
144
+ str: The generated JS.
145
+ """
146
+
147
+ def get_expr(item):
148
+ return get_noise_js(
149
+ target="dataArray[i]",
150
+ noise=str(item.value),
151
+ operation=item.operation,
152
+ round_result=item.round,
153
+ precision=item.precision,
154
+ )
155
+
156
+ return self._generate_array_js(get_expr)
157
+
158
+
159
+ class RandomItemSetRule(RandomRule):
160
+ """
161
+ Rule to replace a value with a randomly generated one.
162
+ """
163
+
164
+ mode: Literal["random_item_set"] = "random_item_set"
165
+
166
+ def generate_js(self, path: str) -> str:
167
+ """
168
+ Generates JS to return a random value, optionally persisted.
169
+
170
+ Args:
171
+ path (str): The object path.
172
+
173
+ Returns:
174
+ str: The generated JS.
175
+ """
176
+
177
+ if self.persist:
178
+ storage_key = f"prop_{path.replace('.', '_')}"
179
+
180
+ return PERSISTED_RANDOM_ITEM_SET.format(
181
+ persistence_check_code=add_code_level(code=PERSISTENCE_CHECK_RETURN.format(storage_key=storage_key), num=1),
182
+ calculation_expression=get_random_expression_js(self.value),
183
+ persistence_save_code=PERSISTENCE_SAVE_RESULT.format(storage_key=storage_key)
184
+ )
185
+
186
+ return RANDOM_ITEM_SET.format(calculation_expression=get_random_expression_js(self.value))
187
+
188
+
189
+ class RandomItemNoiseRule(RandomRule):
190
+ """
191
+ Rule to apply random noise to a value.
192
+ """
193
+
194
+ mode: Literal["random_item_noise"] = "random_item_noise"
195
+
196
+ def generate_js(self, path: str) -> str:
197
+ """
198
+ Generates JS to apply random noise, optionally persisted.
199
+
200
+ Args:
201
+ path (str): The object path.
202
+
203
+ Returns:
204
+ str: The generated JS.
205
+ """
206
+
207
+ storage_key = f"prop_{path.replace('.', '_')}"
208
+
209
+ math_expression = get_noise_js(
210
+ target="originalValue",
211
+ noise="noiseValue",
212
+ operation=self.value.operation,
213
+ round_result=self.value.round,
214
+ precision=self.value.precision,
215
+ )
216
+
217
+ if self.persist:
218
+ return PERSISTED_RANDOM_ITEM_NOISE.format(
219
+ persistence_check_code=add_code_level(
220
+ code=PERSISTENCE_CHECK_NOISE.format(storage_key=storage_key, math_expression_with_noise=math_expression),
221
+ num=1
222
+ ),
223
+ calculation_expression=get_random_expression_js(self.value.value),
224
+ persistence_save_code=PERSISTENCE_SAVE_NOISE.format(storage_key=storage_key),
225
+ math_expression=math_expression
226
+ )
227
+
228
+ return RANDOM_ITEM_NOISE.format(
229
+ calculation_expression=get_random_expression_js(self.value.value),
230
+ math_expression=math_expression
231
+ )
232
+
233
+
234
+ class RandomArraySetRule(ArrayRule):
235
+ """
236
+ Rule to replace elements in an array with random values.
237
+ """
238
+
239
+ mode: Literal["random_array_set"] = "random_array_set"
240
+ value: Optional[RANDOM_VALUE_TYPEHINT]
241
+ value_by_channel: Dict[int, RANDOM_VALUE_TYPEHINT] = Field(default_factory=dict)
242
+
243
+ def generate_js(self, path: str) -> str:
244
+ """
245
+ Generates JS to loop through array and set random values.
246
+
247
+ Args:
248
+ path (str): The object path.
249
+
250
+ Returns:
251
+ str: The generated JS.
252
+ """
253
+
254
+ def get_expr(item):
255
+ return get_random_expression_js(item)
256
+
257
+ return self._generate_array_js(get_expr)
258
+
259
+
260
+ class RandomArrayNoiseRule(ArrayRule):
261
+ """
262
+ Rule to apply random noise to elements in an array.
263
+ """
264
+
265
+ mode: Literal["random_array_noise"] = "random_array_noise"
266
+ value: Optional[RandomNoise]
267
+ value_by_channel: Dict[int, RandomNoise] = Field(default_factory=dict)
268
+
269
+ def generate_js(self, path: str) -> str:
270
+ """
271
+ Generates JS to loop through array and apply random noise.
272
+
273
+ Args:
274
+ path (str): The object path.
275
+
276
+ Returns:
277
+ str: The generated JS.
278
+ """
279
+
280
+ def get_expr(item):
281
+ noise_expr = get_random_expression_js(item.value)
282
+
283
+ return get_noise_js(
284
+ target="dataArray[i]",
285
+ noise=noise_expr,
286
+ operation=item.operation,
287
+ round_result=item.round,
288
+ precision=item.precision,
289
+ )
290
+
291
+ return self._generate_array_js(get_expr)
292
+
293
+
294
+ class CustomRule(BaseRule):
295
+ """
296
+ Rule to apply custom JavaScript code.
297
+ """
298
+
299
+ mode: Literal["custom"] = "custom"
300
+ value: str
301
+
302
+ def generate_js(self, path: str) -> str:
303
+ """
304
+ Generates the custom JS injection.
305
+
306
+ Args:
307
+ path (str): The object path.
308
+
309
+ Returns:
310
+ str: The generated JS.
311
+ """
312
+
313
+ return CUSTOM_RULE.format(custom_javascript_code=self.value)
@@ -0,0 +1,44 @@
1
+ import pathlib
2
+ from typing import Optional
3
+ from pydantic import ValidationError
4
+ from osn_selenium.javascript.models import JS_Scripts
5
+ from osn_selenium.exceptions.javascript import (
6
+ JavaScriptResourceError
7
+ )
8
+
9
+
10
+ __all__ = ["get_js_scripts"]
11
+
12
+ _CACHED_JS_SCRIPTS: Optional[JS_Scripts] = None
13
+
14
+
15
+ def get_js_scripts() -> JS_Scripts:
16
+ """
17
+ Reads JavaScript scripts from files and returns them in a JS_Scripts object.
18
+
19
+ This function locates all `.js` files within the 'scripts' directory, which is expected
20
+ to be located in the same parent directory as this module. It reads the content of each
21
+ JavaScript file using UTF-8 encoding and stores these scripts in a `JS_Scripts` model.
22
+ The filenames (without the `.js` extension) are used as keys.
23
+
24
+ Returns:
25
+ JS_Scripts: An object containing the content of each JavaScript file as attributes.
26
+ """
27
+
28
+ global _CACHED_JS_SCRIPTS
29
+
30
+ if _CACHED_JS_SCRIPTS is None:
31
+ scripts = {}
32
+ path_to_js_scripts = pathlib.Path(__file__).parent / "scripts"
33
+
34
+ for script_file in path_to_js_scripts.iterdir():
35
+ scripts[script_file.stem] = script_file.read_text(encoding="utf-8")
36
+
37
+ try:
38
+ _CACHED_JS_SCRIPTS = JS_Scripts.model_validate(scripts)
39
+ except ValidationError as exception:
40
+ missing_fields = [error["loc"][0] for error in exception.errors()]
41
+
42
+ raise JavaScriptResourceError(missing_script=missing_fields)
43
+
44
+ return _CACHED_JS_SCRIPTS
@@ -0,0 +1,35 @@
1
+ from osn_selenium._base_models import DictModel
2
+
3
+
4
+ __all__ = ["JS_Scripts"]
5
+
6
+
7
+ class JS_Scripts(DictModel):
8
+ """
9
+ Represents a collection of JavaScript script snippets for use with WebDriver.
10
+
11
+ Attributes:
12
+ check_element_in_viewport (str): JS to check if element is in the viewport.
13
+ get_document_scroll_size (str): JS to get total scrollable dimensions.
14
+ get_element_css (str): JS to get computed CSS styles of an element.
15
+ get_element_rect_in_viewport (str): JS to get element bounds in viewport.
16
+ get_random_element_point_in_viewport (str): JS to get a random visible point in element.
17
+ get_viewport_position (str): JS to get scroll position of viewport.
18
+ get_viewport_rect (str): JS to get viewport scroll offset and dimensions.
19
+ get_viewport_size (str): JS to get dimensions of the viewport.
20
+ open_new_tab (str): JS to open a new tab.
21
+ start_fingerprint_detection (str): JS to initialize fingerprint detection hooks.
22
+ stop_window_loading (str): JS to stop the page from loading.
23
+ """
24
+
25
+ check_element_in_viewport: str
26
+ get_document_scroll_size: str
27
+ get_element_css: str
28
+ get_element_rect_in_viewport: str
29
+ get_random_element_point_in_viewport: str
30
+ get_viewport_position: str
31
+ get_viewport_rect: str
32
+ get_viewport_size: str
33
+ open_new_tab: str
34
+ start_fingerprint_detection: str
35
+ stop_window_loading: str
@@ -0,0 +1,56 @@
1
+ function start_fingerprint_detection(settings) {
2
+ const CONFIG = {
3
+ BINDING: '__osn_fingerprint_report__',
4
+ SILENT_ERRORS: true,
5
+ EVENTS_OPTIMIZATION: settings.optimize_events
6
+ };
7
+
8
+ const MODIFIERS = {};
9
+ __MODIFIERS_PLACEHOLDER__
10
+
11
+ const STORAGE = new Map();
12
+
13
+ const hookedRegistry = new WeakSet();
14
+ const sentEvents = new Set();
15
+
16
+ function guard(fn, fallback = undefined) {
17
+ try {
18
+ return fn();
19
+ } catch (e) {
20
+ if (!CONFIG.SILENT_ERRORS) console.error('FingerprintHook Error:', e);
21
+ return fallback;
22
+ }
23
+ }
24
+
25
+ const Reporter = {
26
+ send(api, target, method) {
27
+ guard(() => {
28
+ if (CONFIG.EVENTS_OPTIMIZATION) {
29
+ const key = `${api}:${target}:${method}`;
30
+
31
+ if (sentEvents.has(key)) return;
32
+
33
+ sentEvents.add(key);
34
+ }
35
+
36
+ const reportFn = window[CONFIG.BINDING];
37
+
38
+ if (typeof reportFn === 'function') {
39
+ const stack = (new Error()).stack;
40
+
41
+ const payload = JSON.stringify({
42
+ api: api,
43
+ used_method: `${target}.${method}`,
44
+ stacktrace: stack
45
+ });
46
+
47
+ reportFn(payload);
48
+ }
49
+ });
50
+ }
51
+ };
52
+
53
+ __DETECTION_PLACEHOLDER__
54
+ }
55
+
56
+ start_fingerprint_detection(__SETTINGS__PLACEHOLDER__);
osn_selenium/models.py ADDED
@@ -0,0 +1,94 @@
1
+ from typing import Self
2
+ from osn_selenium._base_models import DictModel
3
+
4
+
5
+ __all__ = ["Point", "Position", "Rectangle", "Size", "WindowRect"]
6
+
7
+
8
+ class WindowRect(DictModel):
9
+ """
10
+ Defines a window's geometry with default values relative to screen size.
11
+
12
+ The default values position the window in the center of the screen,
13
+ occupying a significant portion of it.
14
+
15
+ Attributes:
16
+ x (int): The x-coordinate of the window's top-left corner. Defaults to 100.
17
+ y (int): The y-coordinate of the window's top-left corner. Defaults to 100.
18
+ width (int): The width of the window. Defaults to 400.
19
+ height (int): The height of the window. Defaults to 400.
20
+ """
21
+
22
+ x: int = 100
23
+ y: int = 100
24
+ width: int = 1024
25
+ height: int = 768
26
+
27
+
28
+ class Size(DictModel):
29
+ """
30
+ Represents a 2D size.
31
+
32
+ Attributes:
33
+ width (int): The width dimension.
34
+ height (int): The height dimension.
35
+ """
36
+
37
+ width: int
38
+ height: int
39
+
40
+
41
+ class Rectangle(DictModel):
42
+ """
43
+ Defines a rectangle by its top-left corner and dimensions.
44
+
45
+ Attributes:
46
+ x (int): The x-coordinate of the top-left corner.
47
+ y (int): The y-coordinate of the top-left corner.
48
+ width (int): The width of the rectangle.
49
+ height (int): The height of the rectangle.
50
+ """
51
+
52
+ x: int
53
+ y: int
54
+ width: int
55
+ height: int
56
+
57
+
58
+ class Position(DictModel):
59
+ """
60
+ Represents a 2D coordinate.
61
+
62
+ Attributes:
63
+ x (int): The x-coordinate.
64
+ y (int): The y-coordinate.
65
+ """
66
+
67
+ x: int
68
+ y: int
69
+
70
+
71
+ class Point:
72
+ """
73
+ Represents a 2D point with integer coordinates (x, y).
74
+
75
+ Attributes:
76
+ x (int): The horizontal coordinate.
77
+ y (int): The vertical coordinate.
78
+ """
79
+
80
+ def __init__(self, x: int, y: int):
81
+ self.x: int = x
82
+ self.y: int = y
83
+
84
+ def __repr__(self) -> str:
85
+ return self.__str__()
86
+
87
+ def __str__(self) -> str:
88
+ return f"Point(x={self.x}, y={self.y})"
89
+
90
+ def __eq__(self, other: Self) -> bool:
91
+ return self.x == other.x and self.y == other.y
92
+
93
+ def __ne__(self, other: Self) -> bool:
94
+ return not self.__eq__(other)
@@ -0,0 +1,159 @@
1
+ import sys
2
+ import trio
3
+ from contextlib import asynccontextmanager
4
+ from typing import (
5
+ Any,
6
+ AsyncContextManager,
7
+ AsyncIterator,
8
+ Callable,
9
+ ContextManager,
10
+ Coroutine,
11
+ ParamSpec,
12
+ TypeVar
13
+ )
14
+
15
+
16
+ __all__ = ["TrioThreadMixin"]
17
+
18
+ _METHOD_INPUT = ParamSpec("_METHOD_INPUT")
19
+ _METHOD_OUTPUT = TypeVar("_METHOD_OUTPUT")
20
+
21
+
22
+ class TrioThreadMixin:
23
+ """
24
+ Provides utilities for running synchronous functions in a Trio event loop
25
+ with a controlled concurrency, ensuring thread safety and resource limits.
26
+ """
27
+
28
+ def __init__(self, lock: trio.Lock, limiter: trio.CapacityLimiter) -> None:
29
+ """
30
+ Initializes the TrioThreadMixin with a Trio Lock and CapacityLimiter.
31
+
32
+ Args:
33
+ lock (trio.Lock): A Trio Lock for synchronization.
34
+ limiter (trio.CapacityLimiter): A limiter to control thread pool concurrency.
35
+ """
36
+
37
+ self._lock = lock
38
+ self._capacity_limiter = limiter
39
+
40
+ @property
41
+ def capacity_limiter(self) -> trio.CapacityLimiter:
42
+ """
43
+ The Trio CapacityLimiter used for concurrency control.
44
+
45
+ Returns:
46
+ trio.CapacityLimiter: The limiter instance.
47
+ """
48
+
49
+ return self._capacity_limiter
50
+
51
+ @property
52
+ def lock(self) -> trio.Lock:
53
+ """
54
+ The Trio Lock used for synchronization.
55
+
56
+ Returns:
57
+ trio.Lock: The lock instance.
58
+ """
59
+
60
+ return self._lock
61
+
62
+ def sync_to_trio(
63
+ self,
64
+ sync_function: Callable[_METHOD_INPUT, _METHOD_OUTPUT],
65
+ lock: bool = True,
66
+ ) -> Callable[_METHOD_INPUT, Coroutine[Any, Any, _METHOD_OUTPUT]]:
67
+ """
68
+ Wraps a synchronous function to run within a Trio thread pool using a lock and limiter.
69
+
70
+ Args:
71
+ sync_function (Callable[_METHOD_INPUT, _METHOD_OUTPUT]): The synchronous function to wrap.
72
+ lock (bool): Whether to use the internal lock for synchronization.
73
+
74
+ Returns:
75
+ Callable[_METHOD_INPUT, Coroutine[Any, Any, _METHOD_OUTPUT]]: An async wrapper for the sync function.
76
+ """
77
+
78
+ async def wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
79
+ """
80
+ Internal async wrapper for the synchronous function.
81
+
82
+ Args:
83
+ *args (_METHOD_INPUT.args): Positional arguments for the sync function.
84
+ **kwargs (_METHOD_INPUT.kwargs): Keyword arguments for the sync function.
85
+
86
+ Returns:
87
+ _METHOD_OUTPUT: The result of the synchronous function execution.
88
+ """
89
+
90
+ def function_with_kwargs(*args_) -> _METHOD_OUTPUT:
91
+ """
92
+ Helper to pass keyword arguments to trio.to_thread.run_sync.
93
+
94
+ Args:
95
+ *args_: Positional arguments passed from the outer scope.
96
+
97
+ Returns:
98
+ _METHOD_OUTPUT: Result of the original sync function.
99
+ """
100
+
101
+ return sync_function(*args_, **kwargs)
102
+
103
+ if lock:
104
+ async with self._lock:
105
+ result = await trio.to_thread.run_sync(function_with_kwargs, *args, limiter=self._capacity_limiter)
106
+ else:
107
+ result = await trio.to_thread.run_sync(function_with_kwargs, *args, limiter=self._capacity_limiter)
108
+
109
+ return result
110
+
111
+ return wrapper
112
+
113
+ def sync_to_trio_context(
114
+ self,
115
+ context_manager_factory: Callable[_METHOD_INPUT, ContextManager[_METHOD_OUTPUT]],
116
+ lock: bool = True,
117
+ ) -> Callable[_METHOD_INPUT, AsyncContextManager[_METHOD_OUTPUT]]:
118
+ """
119
+ Converts a synchronous context manager factory to an asynchronous Trio-compatible context manager.
120
+
121
+ Args:
122
+ context_manager_factory (Callable[_METHOD_INPUT, ContextManager[_METHOD_OUTPUT]]): A factory function returning a context manager.
123
+ lock (bool): Whether to use the internal lock for synchronization.
124
+
125
+ Returns:
126
+ Callable[_METHOD_INPUT, AsyncContextManager[_METHOD_OUTPUT]]: An async function returning an async context manager.
127
+ """
128
+
129
+ @asynccontextmanager
130
+ async def wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> AsyncIterator[_METHOD_OUTPUT]:
131
+ """
132
+ Internal async context manager wrapper.
133
+
134
+ Args:
135
+ *args (_METHOD_INPUT.args): Positional arguments for the factory.
136
+ **kwargs (_METHOD_INPUT.kwargs): Keyword arguments for the factory.
137
+
138
+ Returns:
139
+ AsyncIterator[_METHOD_OUTPUT]: An async iterator yielding the context resource.
140
+ """
141
+
142
+ sync_context_manager = await self.sync_to_trio(sync_function=context_manager_factory, lock=lock)(*args, **kwargs)
143
+
144
+ enter_ = self.sync_to_trio(sync_function=sync_context_manager.__enter__, lock=lock)
145
+ exit_ = self.sync_to_trio(sync_function=sync_context_manager.__exit__, lock=lock)
146
+
147
+ try:
148
+ result = await enter_()
149
+
150
+ yield result
151
+ except Exception as e:
152
+ exc_type, exc_val, exc_tb = sys.exc_info()
153
+
154
+ if not await exit_(exc_type, exc_val, exc_tb):
155
+ raise e
156
+ else:
157
+ await exit_(None, None, None)
158
+
159
+ return wrapper