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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. osn_selenium/_functions.py +84 -0
  2. osn_selenium/_typehints.py +19 -0
  3. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  4. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  5. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  6. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  7. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  8. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  9. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  10. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  11. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  12. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  13. osn_selenium/abstract/executors/cdp/console.py +18 -0
  14. osn_selenium/abstract/executors/cdp/css.py +197 -0
  15. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  16. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  17. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  18. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  19. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  20. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  21. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  22. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  23. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  24. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  25. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  26. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  27. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  28. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  29. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  30. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  31. osn_selenium/abstract/executors/cdp/input.py +158 -0
  32. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  33. osn_selenium/abstract/executors/cdp/io.py +24 -0
  34. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  35. osn_selenium/abstract/executors/cdp/log.py +27 -0
  36. osn_selenium/abstract/executors/cdp/media.py +14 -0
  37. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  38. osn_selenium/abstract/executors/cdp/network.py +252 -0
  39. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  40. osn_selenium/abstract/executors/cdp/page.py +347 -0
  41. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  42. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  43. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  44. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  45. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  46. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  47. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  48. osn_selenium/abstract/executors/cdp/security.py +26 -0
  49. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  50. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  51. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  52. osn_selenium/abstract/executors/cdp/target.py +125 -0
  53. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  54. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  55. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  56. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  57. osn_selenium/abstract/executors/javascript.py +203 -0
  58. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  59. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  60. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  61. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  62. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  63. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  64. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  65. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  66. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  67. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  68. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  69. osn_selenium/abstract/instances/alert.py +67 -0
  70. osn_selenium/abstract/instances/browser.py +76 -0
  71. osn_selenium/abstract/instances/browsing_context.py +310 -0
  72. osn_selenium/abstract/instances/dialog.py +107 -0
  73. osn_selenium/abstract/instances/fedcm.py +133 -0
  74. osn_selenium/abstract/instances/mobile.py +79 -0
  75. osn_selenium/abstract/instances/network.py +100 -0
  76. osn_selenium/abstract/instances/permissions.py +52 -0
  77. osn_selenium/abstract/instances/script.py +109 -0
  78. osn_selenium/abstract/instances/shadow_root.py +81 -0
  79. osn_selenium/abstract/instances/storage.py +98 -0
  80. osn_selenium/abstract/instances/switch_to.py +104 -0
  81. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  82. osn_selenium/abstract/instances/web_element.py +395 -0
  83. osn_selenium/abstract/instances/web_extension.py +70 -0
  84. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  85. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  86. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  87. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  88. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  89. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  90. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  91. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  92. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  93. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  94. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  95. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  96. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  97. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  98. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  99. osn_selenium/abstract/webdriver/core/base.py +298 -0
  100. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  101. osn_selenium/abstract/webdriver/core/components.py +82 -0
  102. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  103. osn_selenium/abstract/webdriver/core/element.py +55 -0
  104. osn_selenium/abstract/webdriver/core/file.py +82 -0
  105. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  106. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  107. osn_selenium/abstract/webdriver/core/script.py +88 -0
  108. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  109. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  110. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  111. osn_selenium/abstract/webdriver/core/window.py +237 -0
  112. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  113. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  114. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  115. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  116. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  117. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  118. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  119. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  120. osn_selenium/base_mixin.py +122 -0
  121. osn_selenium/browsers_handler/__init__.py +47 -17
  122. osn_selenium/browsers_handler/_linux.py +226 -0
  123. osn_selenium/browsers_handler/_windows.py +21 -14
  124. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  125. osn_selenium/dev_tools/_decorators.py +140 -0
  126. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  127. osn_selenium/dev_tools/_functions.py +174 -0
  128. osn_selenium/dev_tools/_system_utils.py +35 -0
  129. osn_selenium/dev_tools/_typehints.py +32 -0
  130. osn_selenium/dev_tools/_validators.py +227 -0
  131. osn_selenium/dev_tools/_wrappers.py +95 -0
  132. osn_selenium/dev_tools/domains/__init__.py +7 -40
  133. osn_selenium/dev_tools/domains/abstract.py +98 -254
  134. osn_selenium/dev_tools/domains/fetch.py +229 -906
  135. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  136. osn_selenium/dev_tools/filters.py +40 -0
  137. osn_selenium/dev_tools/logger/main.py +226 -0
  138. osn_selenium/dev_tools/logger/models.py +232 -0
  139. osn_selenium/dev_tools/logger/target.py +258 -0
  140. osn_selenium/dev_tools/manager/__init__.py +16 -0
  141. osn_selenium/dev_tools/manager/base.py +147 -0
  142. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  143. osn_selenium/dev_tools/manager/logging.py +153 -0
  144. osn_selenium/dev_tools/manager/settings.py +89 -0
  145. osn_selenium/dev_tools/manager/targets.py +175 -0
  146. osn_selenium/dev_tools/models.py +49 -0
  147. osn_selenium/dev_tools/settings.py +135 -0
  148. osn_selenium/dev_tools/target/__init__.py +16 -0
  149. osn_selenium/dev_tools/target/base.py +438 -0
  150. osn_selenium/dev_tools/target/detach.py +54 -0
  151. osn_selenium/dev_tools/target/discovery.py +112 -0
  152. osn_selenium/dev_tools/target/events.py +120 -0
  153. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  154. osn_selenium/dev_tools/target/lifecycle.py +179 -0
  155. osn_selenium/dev_tools/target/logging.py +155 -0
  156. osn_selenium/exceptions/__init__.py +1 -0
  157. osn_selenium/exceptions/base.py +9 -0
  158. osn_selenium/exceptions/configuration.py +84 -0
  159. osn_selenium/exceptions/devtools.py +114 -0
  160. osn_selenium/exceptions/flags.py +45 -0
  161. osn_selenium/exceptions/instance.py +92 -0
  162. osn_selenium/exceptions/javascript.py +31 -0
  163. osn_selenium/exceptions/logic.py +31 -0
  164. osn_selenium/exceptions/path.py +77 -0
  165. osn_selenium/exceptions/platform.py +33 -0
  166. osn_selenium/exceptions/protocol.py +86 -0
  167. osn_selenium/exceptions/webdriver.py +44 -0
  168. osn_selenium/exceptions/window.py +63 -0
  169. osn_selenium/executors/__init__.py +1 -0
  170. osn_selenium/executors/sync/__init__.py +1 -0
  171. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  172. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  173. osn_selenium/executors/sync/cdp/animation.py +50 -0
  174. osn_selenium/executors/sync/cdp/audits.py +48 -0
  175. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  176. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  177. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  178. osn_selenium/executors/sync/cdp/browser.py +131 -0
  179. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  180. osn_selenium/executors/sync/cdp/cast.py +38 -0
  181. osn_selenium/executors/sync/cdp/console.py +24 -0
  182. osn_selenium/executors/sync/cdp/css.py +187 -0
  183. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  184. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  185. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  186. osn_selenium/executors/sync/cdp/dom.py +310 -0
  187. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  188. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  189. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  190. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  191. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  192. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  193. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  194. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  195. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  196. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  197. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  198. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  199. osn_selenium/executors/sync/cdp/input.py +233 -0
  200. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  201. osn_selenium/executors/sync/cdp/io.py +33 -0
  202. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  203. osn_selenium/executors/sync/cdp/log.py +35 -0
  204. osn_selenium/executors/sync/cdp/media.py +21 -0
  205. osn_selenium/executors/sync/cdp/memory.py +62 -0
  206. osn_selenium/executors/sync/cdp/network.py +287 -0
  207. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  208. osn_selenium/executors/sync/cdp/page.py +365 -0
  209. osn_selenium/executors/sync/cdp/performance.py +33 -0
  210. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  211. osn_selenium/executors/sync/cdp/preload.py +21 -0
  212. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  213. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  214. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  215. osn_selenium/executors/sync/cdp/schema.py +23 -0
  216. osn_selenium/executors/sync/cdp/security.py +30 -0
  217. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  218. osn_selenium/executors/sync/cdp/storage.py +151 -0
  219. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  220. osn_selenium/executors/sync/cdp/target.py +147 -0
  221. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  222. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  223. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  224. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  225. osn_selenium/executors/sync/javascript.py +79 -0
  226. osn_selenium/executors/trio_threads/__init__.py +1 -0
  227. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  228. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  229. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  230. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  231. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  232. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  233. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  234. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  235. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  236. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  237. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  238. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  239. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  240. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  241. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  242. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  243. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  244. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  245. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  246. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  247. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  248. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  249. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  250. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  251. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  252. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  253. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  254. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  255. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  256. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  257. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  258. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  259. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  260. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  261. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  262. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  263. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  264. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  265. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  266. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  267. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  268. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  269. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  270. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  271. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  272. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  273. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  274. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  275. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  276. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  277. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  278. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  279. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  280. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  281. osn_selenium/executors/trio_threads/javascript.py +90 -0
  282. osn_selenium/executors/unified/__init__.py +1 -0
  283. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  284. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  285. osn_selenium/executors/unified/cdp/animation.py +50 -0
  286. osn_selenium/executors/unified/cdp/audits.py +45 -0
  287. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  288. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  289. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  290. osn_selenium/executors/unified/cdp/browser.py +143 -0
  291. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  292. osn_selenium/executors/unified/cdp/cast.py +32 -0
  293. osn_selenium/executors/unified/cdp/console.py +18 -0
  294. osn_selenium/executors/unified/cdp/css.py +237 -0
  295. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  296. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  297. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  298. osn_selenium/executors/unified/cdp/dom.py +380 -0
  299. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  300. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  301. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  302. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  303. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  304. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  305. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  306. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  307. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  308. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  309. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  310. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  311. osn_selenium/executors/unified/cdp/input.py +254 -0
  312. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  313. osn_selenium/executors/unified/cdp/io.py +29 -0
  314. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  315. osn_selenium/executors/unified/cdp/log.py +29 -0
  316. osn_selenium/executors/unified/cdp/media.py +15 -0
  317. osn_selenium/executors/unified/cdp/memory.py +59 -0
  318. osn_selenium/executors/unified/cdp/network.py +323 -0
  319. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  320. osn_selenium/executors/unified/cdp/page.py +410 -0
  321. osn_selenium/executors/unified/cdp/performance.py +27 -0
  322. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  323. osn_selenium/executors/unified/cdp/preload.py +15 -0
  324. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  325. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  326. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  327. osn_selenium/executors/unified/cdp/schema.py +17 -0
  328. osn_selenium/executors/unified/cdp/security.py +27 -0
  329. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  330. osn_selenium/executors/unified/cdp/storage.py +178 -0
  331. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  332. osn_selenium/executors/unified/cdp/target.py +165 -0
  333. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  334. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  335. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  336. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  337. osn_selenium/executors/unified/javascript.py +108 -0
  338. osn_selenium/flags/__init__.py +1 -0
  339. osn_selenium/flags/_functions.py +45 -0
  340. osn_selenium/flags/_typehints.py +34 -0
  341. osn_selenium/flags/_validators.py +101 -0
  342. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +165 -243
  343. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +133 -371
  344. osn_selenium/flags/chrome.py +259 -0
  345. osn_selenium/flags/edge.py +259 -0
  346. osn_selenium/flags/models/__init__.py +1 -0
  347. osn_selenium/flags/models/base.py +130 -0
  348. osn_selenium/flags/models/blink.py +263 -0
  349. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  350. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  351. osn_selenium/flags/models/values.py +44 -0
  352. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  353. osn_selenium/flags/yandex.py +259 -0
  354. osn_selenium/instances/__init__.py +1 -0
  355. osn_selenium/instances/_functions.py +242 -0
  356. osn_selenium/instances/_typehints.py +148 -0
  357. osn_selenium/instances/_utils.py +143 -0
  358. osn_selenium/instances/convert.py +287 -0
  359. osn_selenium/instances/protocols.py +105 -0
  360. osn_selenium/instances/sync/__init__.py +1 -0
  361. osn_selenium/instances/sync/action_chains/__init__.py +26 -0
  362. osn_selenium/instances/sync/action_chains/base.py +74 -0
  363. osn_selenium/instances/sync/action_chains/click.py +61 -0
  364. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  365. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  366. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  367. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  368. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  369. osn_selenium/instances/sync/action_chains/move.py +46 -0
  370. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  371. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  372. osn_selenium/instances/sync/alert.py +69 -0
  373. osn_selenium/instances/sync/browser.py +72 -0
  374. osn_selenium/instances/sync/browsing_context.py +193 -0
  375. osn_selenium/instances/sync/dialog.py +81 -0
  376. osn_selenium/instances/sync/fedcm.py +92 -0
  377. osn_selenium/instances/sync/mobile.py +75 -0
  378. osn_selenium/instances/sync/network.py +90 -0
  379. osn_selenium/instances/sync/permissions.py +80 -0
  380. osn_selenium/instances/sync/script.py +77 -0
  381. osn_selenium/instances/sync/shadow_root.py +91 -0
  382. osn_selenium/instances/sync/storage.py +91 -0
  383. osn_selenium/instances/sync/switch_to.py +92 -0
  384. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  385. osn_selenium/instances/sync/web_element.py +179 -0
  386. osn_selenium/instances/sync/web_extension.py +77 -0
  387. osn_selenium/instances/trio_threads/__init__.py +1 -0
  388. osn_selenium/instances/trio_threads/action_chains/__init__.py +26 -0
  389. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  390. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  391. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  392. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  393. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  394. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  395. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  396. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  397. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  399. osn_selenium/instances/trio_threads/alert.py +87 -0
  400. osn_selenium/instances/trio_threads/browser.py +90 -0
  401. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  402. osn_selenium/instances/trio_threads/dialog.py +99 -0
  403. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  404. osn_selenium/instances/trio_threads/mobile.py +93 -0
  405. osn_selenium/instances/trio_threads/network.py +108 -0
  406. osn_selenium/instances/trio_threads/permissions.py +102 -0
  407. osn_selenium/instances/trio_threads/script.py +95 -0
  408. osn_selenium/instances/trio_threads/shadow_root.py +123 -0
  409. osn_selenium/instances/trio_threads/storage.py +109 -0
  410. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  411. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  412. osn_selenium/instances/trio_threads/web_element.py +217 -0
  413. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  414. osn_selenium/instances/unified/__init__.py +1 -0
  415. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  416. osn_selenium/instances/unified/action_chains/base.py +31 -0
  417. osn_selenium/instances/unified/action_chains/click.py +27 -0
  418. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  419. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  420. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  421. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  422. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  423. osn_selenium/instances/unified/action_chains/move.py +24 -0
  424. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  425. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  426. osn_selenium/instances/unified/alert.py +29 -0
  427. osn_selenium/instances/unified/browser.py +33 -0
  428. osn_selenium/instances/unified/browsing_context.py +151 -0
  429. osn_selenium/instances/unified/dialog.py +42 -0
  430. osn_selenium/instances/unified/fedcm.py +48 -0
  431. osn_selenium/instances/unified/mobile.py +36 -0
  432. osn_selenium/instances/unified/network.py +50 -0
  433. osn_selenium/instances/unified/permissions.py +43 -0
  434. osn_selenium/instances/unified/script.py +38 -0
  435. osn_selenium/instances/unified/shadow_root.py +46 -0
  436. osn_selenium/instances/unified/storage.py +48 -0
  437. osn_selenium/instances/unified/switch_to.py +49 -0
  438. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  439. osn_selenium/instances/unified/web_element.py +145 -0
  440. osn_selenium/instances/unified/web_extension.py +38 -0
  441. osn_selenium/javascript/__init__.py +1 -0
  442. osn_selenium/javascript/_functions.py +63 -0
  443. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  444. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  445. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  446. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  447. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  448. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  449. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  450. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  451. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  452. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  453. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  454. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  455. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  456. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  457. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  458. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  459. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  460. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  461. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  462. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  463. osn_selenium/javascript/functions.py +44 -0
  464. osn_selenium/javascript/models.py +35 -0
  465. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  466. osn_selenium/models.py +139 -0
  467. osn_selenium/webdrivers/_args_helpers.py +181 -0
  468. osn_selenium/webdrivers/_bridges.py +57 -0
  469. osn_selenium/webdrivers/_decorators.py +83 -0
  470. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  471. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  472. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  473. osn_selenium/webdrivers/_typehints.py +10 -0
  474. osn_selenium/webdrivers/protocols.py +50 -0
  475. osn_selenium/webdrivers/sync/__init__.py +1 -0
  476. osn_selenium/webdrivers/sync/blink/__init__.py +114 -0
  477. osn_selenium/webdrivers/sync/blink/base.py +128 -0
  478. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  479. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  480. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  481. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  482. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  483. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  484. osn_selenium/webdrivers/sync/chrome/__init__.py +67 -0
  485. osn_selenium/webdrivers/sync/chrome/base.py +106 -0
  486. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  487. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  488. osn_selenium/webdrivers/sync/core/__init__.py +91 -0
  489. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  490. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  491. osn_selenium/webdrivers/sync/core/base.py +167 -0
  492. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  493. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  494. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  495. osn_selenium/webdrivers/sync/core/element.py +42 -0
  496. osn_selenium/webdrivers/sync/core/file.py +40 -0
  497. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  498. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  499. osn_selenium/webdrivers/sync/core/script.py +53 -0
  500. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  501. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  502. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  503. osn_selenium/webdrivers/sync/core/window.py +99 -0
  504. osn_selenium/webdrivers/sync/edge/__init__.py +67 -0
  505. osn_selenium/webdrivers/sync/edge/base.py +102 -0
  506. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  507. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  508. osn_selenium/webdrivers/sync/yandex/__init__.py +67 -0
  509. osn_selenium/webdrivers/sync/yandex/base.py +99 -0
  510. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  511. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  512. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  513. osn_selenium/webdrivers/trio_threads/blink/__init__.py +124 -0
  514. osn_selenium/webdrivers/trio_threads/blink/base.py +133 -0
  515. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  516. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  517. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  518. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  519. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  520. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  521. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +81 -0
  522. osn_selenium/webdrivers/trio_threads/chrome/base.py +107 -0
  523. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  524. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  525. osn_selenium/webdrivers/trio_threads/core/__init__.py +109 -0
  526. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  527. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  528. osn_selenium/webdrivers/trio_threads/core/base.py +191 -0
  529. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  530. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  531. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  532. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  533. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  534. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  535. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  536. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  537. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  538. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  539. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  540. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  541. osn_selenium/webdrivers/trio_threads/edge/__init__.py +81 -0
  542. osn_selenium/webdrivers/trio_threads/edge/base.py +103 -0
  543. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  544. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  545. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +81 -0
  546. osn_selenium/webdrivers/trio_threads/yandex/base.py +100 -0
  547. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  548. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  549. osn_selenium/webdrivers/unified/__init__.py +1 -0
  550. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  551. osn_selenium/webdrivers/unified/blink/base.py +131 -0
  552. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  553. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  554. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  555. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  556. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  557. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  558. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  559. osn_selenium/webdrivers/unified/chrome/base.py +54 -0
  560. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  561. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  562. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  563. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  564. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  565. osn_selenium/webdrivers/unified/core/base.py +132 -0
  566. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  567. osn_selenium/webdrivers/unified/core/components.py +32 -0
  568. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  569. osn_selenium/webdrivers/unified/core/element.py +24 -0
  570. osn_selenium/webdrivers/unified/core/file.py +35 -0
  571. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  572. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  573. osn_selenium/webdrivers/unified/core/script.py +32 -0
  574. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  575. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  576. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  577. osn_selenium/webdrivers/unified/core/window.py +135 -0
  578. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  579. osn_selenium/webdrivers/unified/edge/base.py +52 -0
  580. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  581. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  582. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  583. osn_selenium/webdrivers/unified/yandex/base.py +54 -0
  584. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  585. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  586. osn_selenium-1.0.0.dist-info/METADATA +239 -0
  587. osn_selenium-1.0.0.dist-info/RECORD +608 -0
  588. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/WHEEL +1 -1
  589. osn_selenium/captcha_workers/__init__.py +0 -26
  590. osn_selenium/dev_tools/_types.py +0 -22
  591. osn_selenium/dev_tools/errors.py +0 -89
  592. osn_selenium/dev_tools/logger.py +0 -558
  593. osn_selenium/dev_tools/manager.py +0 -1551
  594. osn_selenium/dev_tools/utils.py +0 -509
  595. osn_selenium/errors.py +0 -16
  596. osn_selenium/types.py +0 -118
  597. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  598. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  599. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  600. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  601. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  602. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  603. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  604. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  605. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  606. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  607. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  608. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  609. osn_selenium/webdrivers/_functions.py +0 -504
  610. osn_selenium/webdrivers/types.py +0 -390
  611. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  612. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  613. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  614. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  615. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  616. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  617. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  618. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  619. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  620. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  621. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  622. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  623. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  624. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  628. {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.0.dist-info}/top_level.txt +0 -0
@@ -1,637 +0,0 @@
1
- import re
2
- import sys
3
- import trio
4
- import pathlib
5
- import warnings
6
- from subprocess import Popen
7
- from selenium import webdriver
8
- from osn_selenium.types import WindowRect
9
- from typing import (
10
- Optional,
11
- Type,
12
- Union,
13
- cast
14
- )
15
- from osn_selenium.webdrivers.types import _any_flags_mapping
16
- from osn_selenium.browsers_handler import get_path_to_browser
17
- from osn_windows_cmd.taskkill.parameters import TaskKillTypes
18
- from osn_selenium.captcha_workers import (
19
- CaptchaWorkerSettings
20
- )
21
- from osn_windows_cmd.taskkill import (
22
- ProcessID,
23
- taskkill_windows
24
- )
25
- from osn_selenium.dev_tools.manager import (
26
- DevTools,
27
- DevToolsSettings
28
- )
29
- from osn_selenium.webdrivers._functions import (
30
- find_browser_previous_session
31
- )
32
- from osn_selenium.webdrivers.Blink.protocols import (
33
- TrioBlinkWebDriverWrapperProtocol
34
- )
35
- from osn_selenium.webdrivers.BaseDriver.webdriver import (
36
- BrowserWebDriver,
37
- TrioBrowserWebDriverWrapper
38
- )
39
- from osn_selenium.webdrivers.Blink.flags import (
40
- BlinkArguments,
41
- BlinkExperimentalOptions,
42
- BlinkFlags,
43
- BlinkFlagsManager
44
- )
45
- from osn_windows_cmd.netstat import (
46
- get_localhost_minimum_free_port,
47
- get_localhost_pids_with_addresses,
48
- get_localhost_pids_with_ports
49
- )
50
-
51
-
52
- class BlinkWebDriver(BrowserWebDriver):
53
- """
54
- A WebDriver manager for Blink-based browsers (e.g., Chrome, Edge).
55
-
56
- Extends `BrowserWebDriver` with functionality specific to Blink-based browsers,
57
- such as managing the browser executable, handling remote debugging ports, and finding
58
- pre-existing browser sessions.
59
-
60
- Attributes:
61
- _window_rect (Optional[WindowRect]): The window size and position settings.
62
- _js_scripts (dict[str, str]): A dictionary of pre-loaded JavaScript scripts.
63
- _webdriver_path (str): The file path to the WebDriver executable.
64
- _webdriver_flags_manager (BlinkFlagsManager): The manager for browser flags and options.
65
- _driver (Optional[Union[webdriver.Chrome, webdriver.Edge]]): The active Selenium WebDriver instance.
66
- _base_implicitly_wait (int): The default implicit wait time in seconds.
67
- _base_page_load_timeout (int): The default page load timeout in seconds.
68
- _base_script_timeout (int): The default script timeout in seconds.
69
- _captcha_workers (Sequence[CaptchaWorkerSettings]): A list of configured captcha worker settings.
70
- _is_active (bool): A flag indicating if the browser process is active.
71
- trio_capacity_limiter (trio.CapacityLimiter): A capacity limiter for controlling concurrent async operations.
72
- dev_tools (DevTools): An interface for interacting with the browser's DevTools protocol.
73
- _console_encoding (str): The encoding of the system console.
74
- _ip_pattern (re.Pattern): A compiled regex pattern to match IP addresses and ports.
75
- """
76
-
77
- def __init__(
78
- self,
79
- browser_exe: Optional[Union[str, pathlib.Path]],
80
- browser_name_in_system: str,
81
- webdriver_path: str,
82
- use_browser_exe: bool = True,
83
- flags_manager_type: Type[BlinkFlagsManager] = BlinkFlagsManager,
84
- flags: Optional[Union[BlinkFlags, _any_flags_mapping]] = None,
85
- start_page_url: str = "",
86
- implicitly_wait: int = 5,
87
- page_load_timeout: int = 5,
88
- script_timeout: int = 5,
89
- window_rect: Optional[WindowRect] = None,
90
- trio_tokens_limit: Union[int, float] = 40,
91
- captcha_workers: Optional[list[CaptchaWorkerSettings]] = None,
92
- devtools_settings: Optional[DevToolsSettings] = None,
93
- ):
94
- """
95
- Initializes the BlinkWebDriver instance.
96
-
97
- This constructor sets up the necessary components for controlling a Blink-based browser,
98
- including paths, flag managers, timeouts, and integration with DevTools and Trio.
99
- It also initializes properties related to console encoding and IP pattern matching
100
- for managing browser processes.
101
-
102
- Args:
103
- browser_exe (Optional[Union[str, pathlib.Path]]): The path to the browser executable
104
- (e.g., `chrome.exe` or `msedge.exe`). If None, the browser executable will not be
105
- managed directly by this class (e.g., for remote WebDriver connections where the
106
- browser is already running).
107
- browser_name_in_system (str): The common name of the browser executable in the system
108
- (e.g., "Chrome", "Edge"). Used to auto-detect `browser_exe` if `use_browser_exe` is True.
109
- webdriver_path (str): The file path to the WebDriver executable (e.g., `chromedriver.exe`).
110
- use_browser_exe (bool): If True, the browser executable path will be
111
- automatically determined based on `browser_name_in_system` if `browser_exe`
112
- is not explicitly provided. If False, `browser_exe` must be None.
113
- Defaults to True.
114
- flags_manager_type (Type[BlinkFlagsManager]): The type of flags manager to use.
115
- Defaults to `BlinkFlagsManager`, which is suitable for Chrome/Edge.
116
- flags (Optional[Union[BlinkFlags, Mapping[str, Any]]]): Initial browser flags or options
117
- specific to Blink-based browsers. Can be a `BlinkFlags` object or a generic mapping.
118
- Defaults to None.
119
- start_page_url (str): The URL that the browser will attempt to navigate to
120
- immediately after starting. Defaults to an empty string.
121
- implicitly_wait (int): The default implicit wait time in seconds for element searches.
122
- Defaults to 5.
123
- page_load_timeout (int): The default page load timeout in seconds. Defaults to 5.
124
- script_timeout (int): The default asynchronous script timeout in seconds. Defaults to 5.
125
- window_rect (Optional[WindowRect]): The initial window size and position. If None,
126
- the browser's default window size will be used. Defaults to None.
127
- trio_tokens_limit (Union[int, float]): The maximum number of concurrent synchronous
128
- WebDriver operations allowed when using the Trio wrapper. Defaults to 40.
129
- captcha_workers (Optional[Sequence[CaptchaWorkerSettings]]): A sequence of
130
- settings for captcha detection and solving functions.
131
- Defaults to None, which results in an empty list.
132
- devtools_settings (Optional[DevToolsSettings]): Settings for configuring the
133
- Chrome DevTools Protocol (CDP) interface. Defaults to None.
134
- """
135
-
136
- self._console_encoding = sys.stdout.encoding
137
- self._ip_pattern = re.compile(r"\A(\d+\.\d+\.\d+\.\d+|\[::]):\d+\Z")
138
-
139
- super().__init__(
140
- webdriver_path=webdriver_path,
141
- flags_manager_type=flags_manager_type,
142
- flags=flags,
143
- implicitly_wait=implicitly_wait,
144
- page_load_timeout=page_load_timeout,
145
- script_timeout=script_timeout,
146
- window_rect=window_rect,
147
- trio_tokens_limit=trio_tokens_limit,
148
- captcha_workers=captcha_workers,
149
- devtools_settings=devtools_settings,
150
- )
151
-
152
- self.update_settings(
153
- flags=flags,
154
- browser_exe=browser_exe,
155
- browser_name_in_system=browser_name_in_system,
156
- use_browser_exe=use_browser_exe,
157
- start_page_url=start_page_url
158
- )
159
-
160
- @property
161
- def debugging_port(self) -> Optional[int]:
162
- """
163
- Gets the currently set debugging port.
164
-
165
- Retrieves the debugging port number that the browser instance is configured to use.
166
-
167
- Returns:
168
- Optional[int]: The debugging port number, or None if not set.
169
- """
170
-
171
- return self._webdriver_flags_manager._arguments.get("remote_debugging_port", {}).get("value", None)
172
-
173
- @property
174
- def browser_exe(self) -> Optional[Union[str, pathlib.Path]]:
175
- """
176
- Gets the path to the browser executable.
177
-
178
- Returns:
179
- Optional[Union[str, pathlib.Path]]: The path to the browser executable.
180
- """
181
-
182
- return self._webdriver_flags_manager.browser_exe
183
-
184
- def _find_debugging_port(self, debugging_port: Optional[int]) -> int:
185
- """
186
- Finds an appropriate debugging port, either reusing a previous session's port or finding a free port.
187
-
188
- Attempts to locate a suitable debugging port for the browser. It first tries to reuse a debugging port
189
- from a previous browser session if a profile directory is specified and a previous session is found.
190
- If no previous session is found or if no profile directory is specified, it attempts to use the provided
191
- `debugging_port` if available, or finds a minimum free port if no port is provided or the provided port is in use.
192
-
193
- Args:
194
- debugging_port (Optional[int]): Requested debugging port number. If provided, the method attempts to use this port. Defaults to None.
195
-
196
- Returns:
197
- int: The debugging port number to use. This is either a reused port from a previous session, the provided port if available, or a newly found free port.
198
- """
199
-
200
- if self.browser_exe is not None:
201
- user_data_dir_command = self._webdriver_flags_manager._flags_definitions.get("user_data_dir", None)
202
- user_data_dir_value = self._webdriver_flags_manager._arguments.get("user_data_dir", None)
203
- user_data_dir = None if user_data_dir_command is None else user_data_dir_value["value"]
204
-
205
- if user_data_dir_command is not None:
206
- previous_session = find_browser_previous_session(self.browser_exe, user_data_dir_command["command"], user_data_dir)
207
-
208
- if previous_session is not None:
209
- return previous_session
210
-
211
- if debugging_port is not None:
212
- return get_localhost_minimum_free_port(
213
- console_encoding=self._console_encoding,
214
- ip_pattern=self._ip_pattern,
215
- ports_to_check=debugging_port
216
- )
217
-
218
- if self.debugging_port is None or self.debugging_port == 0:
219
- return get_localhost_minimum_free_port(
220
- console_encoding=self._console_encoding,
221
- ip_pattern=self._ip_pattern,
222
- ports_to_check=self.debugging_port
223
- )
224
-
225
- return self.debugging_port
226
-
227
- def _set_debugging_port(self, debugging_port: Optional[int], debugging_address: Optional[str]):
228
- """
229
- Sets the debugging port and address.
230
-
231
- Configures the browser to start with a specific debugging port. This port is used for external tools,
232
- like debuggers or browser automation frameworks, to connect to and control the browser instance.
233
- Setting a fixed debugging port can be useful for consistent remote debugging or automation setups.
234
-
235
- Args:
236
- debugging_port (Optional[int]): Debugging port number. If None or 0, the browser chooses a port automatically.
237
- debugging_address (Optional[str]): The IP address for the debugger to listen on. Defaults to '127.0.0.1'.
238
- """
239
-
240
- if self.browser_exe is not None:
241
- _debugging_address = "127.0.0.1" if debugging_address is None else debugging_address
242
- _debugging_port = 0 if debugging_port is None else debugging_port
243
-
244
- self._webdriver_flags_manager.update_flags(
245
- BlinkFlags(
246
- argument=BlinkArguments(
247
- remote_debugging_port=debugging_port,
248
- remote_debugging_address=debugging_address
249
- ),
250
- experimental_option=BlinkExperimentalOptions(debugger_address=f"{_debugging_address}:{_debugging_port}"),
251
- )
252
- )
253
-
254
- @property
255
- def debugging_ip(self) -> Optional[str]:
256
- """
257
- Gets the IP address part of the debugger address.
258
-
259
- Returns:
260
- Optional[str]: The IP address of the debugger, or None if not set.
261
- """
262
-
263
- return self._webdriver_flags_manager._arguments.get("remote_debugging_address", {}).get("value", None)
264
-
265
- def _detect_browser_exe(self, browser_name_in_system: str, use_browser_exe: bool):
266
- """
267
- Detects and sets the browser executable path within the flags manager.
268
-
269
- This internal method is responsible for determining the correct path to the
270
- browser executable based on the `use_browser_exe` flag and the system's
271
- known browser locations. If `use_browser_exe` is True and no explicit path
272
- is set, it attempts to find the browser. If `use_browser_exe` is False,
273
- it ensures the browser executable path is cleared.
274
-
275
- Args:
276
- browser_name_in_system (str): The common name of the browser (e.g., "Chrome", "Edge")
277
- used to find its executable on the system.
278
- use_browser_exe (bool): If True, the method will attempt to find and set
279
- the browser executable path if it's not already set. If False,
280
- it will ensure the browser executable path is cleared.
281
- """
282
-
283
- if self.browser_exe is None and use_browser_exe:
284
- self._webdriver_flags_manager.browser_exe = get_path_to_browser(browser_name_in_system)
285
- elif self.browser_exe is not None and not use_browser_exe:
286
- self._webdriver_flags_manager.browser_exe = None
287
-
288
- def set_start_page_url(self, start_page_url: str):
289
- """
290
- Sets the URL that the browser will open upon starting.
291
-
292
- Args:
293
- start_page_url (str): The URL to set as the start page.
294
- """
295
-
296
- self._webdriver_flags_manager.start_page_url = start_page_url
297
-
298
- def reset_settings(
299
- self,
300
- flags: Optional[Union[BlinkFlags, _any_flags_mapping]] = None,
301
- browser_exe: Optional[Union[str, pathlib.Path]] = None,
302
- browser_name_in_system: Optional[str] = None,
303
- use_browser_exe: Optional[bool] = None,
304
- start_page_url: str = "",
305
- window_rect: Optional[WindowRect] = None,
306
- trio_tokens_limit: Union[int, float] = 40,
307
- ):
308
- """
309
- Resets various configurable browser settings to their specified or default values.
310
-
311
- This method allows for reconfiguring the WebDriver's operational parameters,
312
- such as browser flags, executable path, start URL, window dimensions, and
313
- concurrency limits. It is crucial that the browser session is *not* active
314
- when this method is called; otherwise, a warning will be issued, and no changes
315
- will be applied.
316
-
317
- Args:
318
- flags (Optional[Union[BlinkFlags, Mapping[str, Any]]]): New browser flags to apply.
319
- If provided, existing flags are cleared and replaced with these.
320
- If `None`, all custom flags are cleared, and the browser will start with default flags.
321
- browser_exe (Optional[Union[str, pathlib.Path]]): The explicit path to the browser executable.
322
- If provided, this path will be used. If `None`, the executable path managed by the
323
- flags manager will be cleared, and then potentially re-detected based on
324
- `use_browser_exe` and `browser_name_in_system`.
325
- browser_name_in_system (Optional[str]): The common name of the browser (e.g., "Chrome", "Edge").
326
- Used in conjunction with `use_browser_exe` to automatically detect the browser executable path.
327
- This parameter only takes effect if `use_browser_exe` is explicitly `True` or `False`.
328
- If `None`, no automatic detection based on name will occur through this method call.
329
- use_browser_exe (Optional[bool]): Controls the automatic detection of the browser executable.
330
- If `True` (and `browser_name_in_system` is provided), the browser executable path
331
- will be automatically detected if `browser_exe` is `None`.
332
- If `False` (and `browser_name_in_system` is provided), any existing `browser_exe`
333
- path in the flags manager will be cleared.
334
- If `None`, the current `use_browser_exe` state is maintained for the `_detect_browser_exe` logic.
335
- start_page_url (str): The URL that the browser will attempt to navigate to
336
- immediately after starting. Defaults to an empty string.
337
- window_rect (Optional[WindowRect]): The initial window size and position settings.
338
- If `None`, it defaults to a new `WindowRect()` instance, effectively resetting
339
- to the browser's default window behavior.
340
- trio_tokens_limit (Union[int, float]): The maximum number of concurrent synchronous
341
- WebDriver operations allowed by the Trio capacity limiter. Defaults to 40.
342
- """
343
-
344
- if not self.is_active:
345
- if window_rect is None:
346
- window_rect = WindowRect()
347
-
348
- if flags is not None:
349
- self._webdriver_flags_manager.set_flags(flags)
350
- else:
351
- self._webdriver_flags_manager.clear_flags()
352
-
353
- self._webdriver_flags_manager.browser_exe = browser_exe
354
-
355
- self.set_start_page_url(start_page_url)
356
- self.set_trio_tokens_limit(trio_tokens_limit)
357
- self._window_rect = window_rect
358
-
359
- if use_browser_exe is not None and browser_name_in_system is not None:
360
- self._detect_browser_exe(
361
- browser_name_in_system=browser_name_in_system,
362
- use_browser_exe=use_browser_exe
363
- )
364
-
365
- if self.browser_exe is not None and self.debugging_port is not None or self.debugging_ip is not None:
366
- self._set_debugging_port(self._find_debugging_port(self.debugging_port), self.debugging_ip)
367
- else:
368
- warnings.warn("Browser is already running.")
369
-
370
- def _create_driver(self):
371
- """
372
- Abstract method to create a WebDriver instance. Must be implemented in child classes.
373
-
374
- This method is intended to be overridden in subclasses to provide browser-specific
375
- WebDriver instantiation logic (e.g., creating ChromeDriver, FirefoxDriver, etc.).
376
-
377
- Raises:
378
- NotImplementedError: If the method is not implemented in a subclass.
379
- """
380
-
381
- raise NotImplementedError("This function must be implemented in child classes.")
382
-
383
- def _check_browser_exe_active(self) -> bool:
384
- """
385
- Checks if the WebDriver is active by verifying if the debugging port is in use.
386
-
387
- Determines if a WebDriver instance is currently running and active by checking if the configured
388
- debugging port is in use by any process. This is a way to verify if a browser session is active
389
- without directly querying the WebDriver itself.
390
-
391
- Returns:
392
- bool: True if the WebDriver is active (debugging port is in use), False otherwise.
393
- """
394
-
395
- for pid, ports in get_localhost_pids_with_addresses(console_encoding=self._console_encoding, ip_pattern=self._ip_pattern).items():
396
- if len(ports) == 1 and re.search(rf":{self.debugging_port}\Z", ports[0]) is not None:
397
- address = re.search(rf"\A(.+):{self.debugging_port}\Z", ports[0]).group(1)
398
-
399
- if address != self.debugging_ip:
400
- self._set_debugging_port(
401
- debugging_port=self.debugging_port,
402
- debugging_address=re.search(rf"\A(.+):{self.debugging_port}\Z", ports[0]).group(1)
403
- )
404
-
405
- return True
406
-
407
- return False
408
-
409
- def update_settings(
410
- self,
411
- flags: Optional[Union[BlinkFlags, _any_flags_mapping]] = None,
412
- browser_exe: Optional[Union[str, pathlib.Path]] = None,
413
- browser_name_in_system: Optional[str] = None,
414
- use_browser_exe: Optional[bool] = None,
415
- start_page_url: Optional[str] = None,
416
- window_rect: Optional[WindowRect] = None,
417
- trio_tokens_limit: Optional[Union[int, float]] = None,
418
- ):
419
- """
420
- Updates various browser settings selectively without resetting others.
421
-
422
- This method allows for dynamic updating of browser settings. Only the settings
423
- for which a non-None value is provided will be updated. Settings passed as `None`
424
- will retain their current values. This method can be called whether the browser
425
- is active or not, but some changes might only take effect after the browser is
426
- restarted.
427
-
428
- Args:
429
- flags (Optional[Union[BlinkFlags, Mapping[str, Any]]]): New browser flags to update.
430
- If provided, these flags will be merged with or overwrite existing flags
431
- within the flags manager. If `None`, existing flags remain unchanged.
432
- browser_exe (Optional[Union[str, pathlib.Path]]): The new path to the browser executable.
433
- If provided, this path will be set in the flags manager. If `None`, the
434
- current browser executable path remains unchanged.
435
- browser_name_in_system (Optional[str]): The common name of the browser (e.g., "Chrome", "Edge").
436
- Used in conjunction with `use_browser_exe` to automatically detect the browser executable path.
437
- This parameter only takes effect if `use_browser_exe` is explicitly provided.
438
- If `None`, no automatic detection based on name will occur through this method call.
439
- use_browser_exe (Optional[bool]): Controls the automatic detection of the browser executable.
440
- If `True` (and `browser_name_in_system` is provided), the browser executable path
441
- will be automatically detected if `browser_exe` is `None`.
442
- If `False` (and `browser_name_in_system` is provided), any existing `browser_exe`
443
- path in the flags manager will be cleared.
444
- If `None`, the current `use_browser_exe` state is maintained for the `_detect_browser_exe` logic.
445
- start_page_url (Optional[str]): The new URL that the browser will attempt to navigate to
446
- immediately after starting. If `None`, the current start page URL remains unchanged.
447
- window_rect (Optional[WindowRect]): The new window size and position settings.
448
- If `None`, the current window rectangle settings remain unchanged.
449
- trio_tokens_limit (Optional[Union[int, float]]): The new maximum number of concurrent
450
- asynchronous operations allowed by the Trio capacity limiter. If `None`, the
451
- current limit remains unchanged.
452
- """
453
-
454
- if flags is not None:
455
- self._webdriver_flags_manager.update_flags(flags)
456
-
457
- if browser_exe is not None:
458
- self._webdriver_flags_manager.browser_exe = browser_exe
459
-
460
- if start_page_url is not None:
461
- self.set_start_page_url(start_page_url)
462
-
463
- if window_rect is not None:
464
- self._window_rect = window_rect
465
-
466
- if trio_tokens_limit is not None:
467
- self.set_trio_tokens_limit(trio_tokens_limit)
468
-
469
- if use_browser_exe is not None and browser_name_in_system is not None:
470
- self._detect_browser_exe(
471
- browser_name_in_system=browser_name_in_system,
472
- use_browser_exe=use_browser_exe
473
- )
474
-
475
- self._set_debugging_port(self._find_debugging_port(self.debugging_port), self.debugging_ip)
476
-
477
- @property
478
- def driver(self) -> Optional[Union[webdriver.Chrome, webdriver.Edge]]:
479
- """
480
- Gets the underlying Selenium WebDriver instance associated with this object.
481
-
482
- This property provides direct access to the WebDriver object (e.g., Chrome, Edge)
483
- that is being controlled, allowing for direct Selenium operations if needed.
484
-
485
- Returns:
486
- Optional[Union[webdriver.Chrome, webdriver.Edge]]:
487
- The active WebDriver instance, or None if no driver is currently set or active.
488
- """
489
-
490
- return super().driver
491
-
492
- def start_webdriver(
493
- self,
494
- flags: Optional[Union[BlinkFlags, _any_flags_mapping]] = None,
495
- browser_exe: Optional[Union[str, pathlib.Path]] = None,
496
- browser_name_in_system: Optional[str] = None,
497
- use_browser_exe: Optional[bool] = None,
498
- start_page_url: Optional[str] = None,
499
- window_rect: Optional[WindowRect] = None,
500
- trio_tokens_limit: Optional[Union[int, float]] = None,
501
- ):
502
- """
503
- Starts the WebDriver service and the browser session.
504
-
505
- Initializes and starts the WebDriver instance and the associated browser process.
506
- It first updates settings based on provided parameters (if the driver is not already running),
507
- checks if a browser process needs to be started, starts it if necessary using Popen,
508
- waits for it to become active, and then creates the WebDriver client instance (`self.driver`).
509
-
510
- Args:
511
- flags (Optional[Union[BlinkFlags, Mapping[str, Any]]]): Override flags for this start.
512
- If provided, these flags will be applied. If `None`, current settings are used.
513
- browser_exe (Optional[Union[str, pathlib.Path]]): Override browser executable path for this start.
514
- If provided, this path will be used. If `None`, current settings are used.
515
- browser_name_in_system (Optional[str]): Override browser name for auto-detection for this start.
516
- Only takes effect if `use_browser_exe` is also provided. If `None`, current settings are used.
517
- use_browser_exe (Optional[bool]): Override auto-detection behavior for this start.
518
- If provided, this boolean determines if the browser executable is auto-detected.
519
- If `None`, current settings are used.
520
- start_page_url (Optional[str]): Override start page URL for this start.
521
- If provided, this URL will be used. If `None`, current setting is used.
522
- window_rect (Optional[WindowRect]): Override window rectangle for this start.
523
- If provided, these dimensions will be used. If `None`, current settings are used.
524
- trio_tokens_limit (Optional[Union[int, float]]): Override Trio token limit for this start.
525
- If provided, this limit will be used. If `None`, current setting is used.
526
- """
527
-
528
- if self.driver is None:
529
- self.update_settings(
530
- flags=flags,
531
- browser_exe=browser_exe,
532
- browser_name_in_system=browser_name_in_system,
533
- use_browser_exe=use_browser_exe,
534
- start_page_url=start_page_url,
535
- window_rect=window_rect,
536
- trio_tokens_limit=trio_tokens_limit,
537
- )
538
-
539
- if self.browser_exe is not None:
540
- self._is_active = self._check_browser_exe_active()
541
-
542
- if not self._is_active:
543
- Popen(self._webdriver_flags_manager.start_command, shell=True)
544
-
545
- while not self._is_active:
546
- self._is_active = self._check_browser_exe_active()
547
-
548
- self._create_driver()
549
-
550
- def close_webdriver(self):
551
- """
552
- Closes the WebDriver instance and terminates the associated browser subprocess.
553
-
554
- Quits the current WebDriver session, closes all browser windows, and then forcefully terminates
555
- the browser process. This ensures a clean shutdown of the browser and WebDriver environment.
556
- """
557
-
558
- if self.browser_exe is not None:
559
- for pid, ports in get_localhost_pids_with_ports(console_encoding=self._console_encoding, ip_pattern=self._ip_pattern).items():
560
- if ports == [self.debugging_port]:
561
- taskkill_windows(
562
- taskkill_type=TaskKillTypes.forcefully_terminate,
563
- selectors=ProcessID(pid)
564
- )
565
-
566
- self._is_active = self._check_browser_exe_active()
567
-
568
- while self._is_active:
569
- self._is_active = self._check_browser_exe_active()
570
-
571
- if self._driver is not None:
572
- self._driver.quit()
573
- self._driver = None
574
-
575
- def restart_webdriver(
576
- self,
577
- flags: Optional[Union[BlinkFlags, _any_flags_mapping]] = None,
578
- browser_exe: Optional[Union[str, pathlib.Path]] = None,
579
- browser_name_in_system: Optional[str] = None,
580
- use_browser_exe: Optional[bool] = None,
581
- start_page_url: Optional[str] = None,
582
- window_rect: Optional[WindowRect] = None,
583
- trio_tokens_limit: Optional[Union[int, float]] = None,
584
- ):
585
- """
586
- Restarts the WebDriver and browser session gracefully.
587
-
588
- Performs a clean restart by first closing the existing WebDriver session and browser
589
- (using `close_webdriver`), and then initiating a new session (using `start_webdriver`)
590
- with potentially updated settings. If settings arguments are provided, they override
591
- the existing settings for the new session; otherwise, the current settings are used.
592
-
593
- Args:
594
- flags (Optional[Union[BlinkFlags, Mapping[str, Any]]]): Override flags for the new session.
595
- If provided, these flags will be applied. If `None`, current settings are used.
596
- browser_exe (Optional[Union[str, pathlib.Path]]): Override browser executable for the new session.
597
- If provided, this path will be used. If `None`, current settings are used.
598
- browser_name_in_system (Optional[str]): Override browser name for auto-detection for the new session.
599
- Only takes effect if `use_browser_exe` is also provided. If `None`, current settings are used.
600
- use_browser_exe (Optional[bool]): Override auto-detection behavior for the new session.
601
- If provided, this boolean determines if the browser executable is auto-detected.
602
- If `None`, current settings are used.
603
- start_page_url (Optional[str]): Override start page URL for the new session.
604
- If provided, this URL will be used. If `None`, current setting is used.
605
- window_rect (Optional[WindowRect]): Override window rectangle for the new session.
606
- If provided, these dimensions will be used. If `None`, current settings are used.
607
- trio_tokens_limit (Optional[Union[int, float]]): Override Trio token limit for the new session.
608
- If provided, this limit will be used. If `None`, current setting is used.
609
- """
610
-
611
- self.close_webdriver()
612
- self.start_webdriver(
613
- flags=flags,
614
- browser_exe=browser_exe,
615
- browser_name_in_system=browser_name_in_system,
616
- use_browser_exe=use_browser_exe,
617
- start_page_url=start_page_url,
618
- window_rect=window_rect,
619
- trio_tokens_limit=trio_tokens_limit,
620
- )
621
-
622
- def to_wrapper(self) -> TrioBlinkWebDriverWrapperProtocol:
623
- """
624
- Creates a TrioBrowserWebDriverWrapper instance for asynchronous operations with Trio.
625
-
626
- Wraps the ...WebDriver instance in a TrioBrowserWebDriverWrapper, which allows for running WebDriver
627
- commands in a non-blocking manner within a Trio asynchronous context. This is essential for
628
- integrating Selenium WebDriver with asynchronous frameworks like Trio.
629
-
630
- Returns:
631
- TrioBlinkWebDriverWrapperProtocol: A TrioBrowserWebDriverWrapper instance wrapping this BrowserWebDriver.
632
- """
633
-
634
- return cast(
635
- TrioBlinkWebDriverWrapperProtocol,
636
- TrioBrowserWebDriverWrapper(_webdriver=self)
637
- )