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.
- osn_selenium/_base_models.py +41 -0
- osn_selenium/_cdp_import.py +253 -0
- osn_selenium/_functions.py +84 -0
- osn_selenium/_typehints.py +19 -0
- osn_selenium/abstract/executors/cdp/__init__.py +435 -0
- osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
- osn_selenium/abstract/executors/cdp/animation.py +47 -0
- osn_selenium/abstract/executors/cdp/audits.py +39 -0
- osn_selenium/abstract/executors/cdp/autofill.py +34 -0
- osn_selenium/abstract/executors/cdp/background_service.py +22 -0
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
- osn_selenium/abstract/executors/cdp/browser.py +122 -0
- osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
- osn_selenium/abstract/executors/cdp/cast.py +31 -0
- osn_selenium/abstract/executors/cdp/console.py +18 -0
- osn_selenium/abstract/executors/cdp/css.py +197 -0
- osn_selenium/abstract/executors/cdp/debugger.py +198 -0
- osn_selenium/abstract/executors/cdp/device_access.py +22 -0
- osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
- osn_selenium/abstract/executors/cdp/dom.py +305 -0
- osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
- osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
- osn_selenium/abstract/executors/cdp/emulation.py +259 -0
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
- osn_selenium/abstract/executors/cdp/extensions.py +31 -0
- osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
- osn_selenium/abstract/executors/cdp/fetch.py +76 -0
- osn_selenium/abstract/executors/cdp/file_system.py +11 -0
- osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
- osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
- osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
- osn_selenium/abstract/executors/cdp/input.py +158 -0
- osn_selenium/abstract/executors/cdp/inspector.py +14 -0
- osn_selenium/abstract/executors/cdp/io.py +24 -0
- osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
- osn_selenium/abstract/executors/cdp/log.py +27 -0
- osn_selenium/abstract/executors/cdp/media.py +14 -0
- osn_selenium/abstract/executors/cdp/memory.py +61 -0
- osn_selenium/abstract/executors/cdp/network.py +252 -0
- osn_selenium/abstract/executors/cdp/overlay.py +166 -0
- osn_selenium/abstract/executors/cdp/page.py +347 -0
- osn_selenium/abstract/executors/cdp/performance.py +28 -0
- osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
- osn_selenium/abstract/executors/cdp/preload.py +14 -0
- osn_selenium/abstract/executors/cdp/profiler.py +54 -0
- osn_selenium/abstract/executors/cdp/pwa.py +46 -0
- osn_selenium/abstract/executors/cdp/runtime.py +176 -0
- osn_selenium/abstract/executors/cdp/schema.py +11 -0
- osn_selenium/abstract/executors/cdp/security.py +26 -0
- osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
- osn_selenium/abstract/executors/cdp/storage.py +175 -0
- osn_selenium/abstract/executors/cdp/system_info.py +24 -0
- osn_selenium/abstract/executors/cdp/target.py +125 -0
- osn_selenium/abstract/executors/cdp/tethering.py +14 -0
- osn_selenium/abstract/executors/cdp/tracing.py +48 -0
- osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
- osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/executors/javascript.py +203 -0
- osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
- osn_selenium/abstract/instances/action_chains/base.py +25 -0
- osn_selenium/abstract/instances/action_chains/click.py +93 -0
- osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
- osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
- osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
- osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
- osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
- osn_selenium/abstract/instances/action_chains/move.py +60 -0
- osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
- osn_selenium/abstract/instances/action_chains/utils.py +44 -0
- osn_selenium/abstract/instances/alert.py +67 -0
- osn_selenium/abstract/instances/browser.py +76 -0
- osn_selenium/abstract/instances/browsing_context.py +310 -0
- osn_selenium/abstract/instances/dialog.py +107 -0
- osn_selenium/abstract/instances/fedcm.py +133 -0
- osn_selenium/abstract/instances/mobile.py +79 -0
- osn_selenium/abstract/instances/network.py +100 -0
- osn_selenium/abstract/instances/permissions.py +52 -0
- osn_selenium/abstract/instances/script.py +109 -0
- osn_selenium/abstract/instances/shadow_root.py +81 -0
- osn_selenium/abstract/instances/storage.py +98 -0
- osn_selenium/abstract/instances/switch_to.py +104 -0
- osn_selenium/abstract/instances/web_driver_wait.py +57 -0
- osn_selenium/abstract/instances/web_element.py +395 -0
- osn_selenium/abstract/instances/web_extension.py +70 -0
- osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
- osn_selenium/abstract/webdriver/blink/base.py +80 -0
- osn_selenium/abstract/webdriver/blink/casting.py +82 -0
- osn_selenium/abstract/webdriver/blink/features.py +51 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
- osn_selenium/abstract/webdriver/blink/logging.py +40 -0
- osn_selenium/abstract/webdriver/blink/network.py +45 -0
- osn_selenium/abstract/webdriver/blink/settings.py +68 -0
- osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
- osn_selenium/abstract/webdriver/chrome/base.py +36 -0
- osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
- osn_selenium/abstract/webdriver/core/__init__.py +16 -0
- osn_selenium/abstract/webdriver/core/actions.py +58 -0
- osn_selenium/abstract/webdriver/core/auth.py +145 -0
- osn_selenium/abstract/webdriver/core/base.py +298 -0
- osn_selenium/abstract/webdriver/core/capture.py +84 -0
- osn_selenium/abstract/webdriver/core/components.py +82 -0
- osn_selenium/abstract/webdriver/core/devtools.py +69 -0
- osn_selenium/abstract/webdriver/core/element.py +55 -0
- osn_selenium/abstract/webdriver/core/file.py +82 -0
- osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
- osn_selenium/abstract/webdriver/core/navigation.py +65 -0
- osn_selenium/abstract/webdriver/core/script.py +88 -0
- osn_selenium/abstract/webdriver/core/settings.py +43 -0
- osn_selenium/abstract/webdriver/core/storage.py +81 -0
- osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
- osn_selenium/abstract/webdriver/core/window.py +237 -0
- osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
- osn_selenium/abstract/webdriver/edge/base.py +36 -0
- osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/edge/settings.py +110 -0
- osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
- osn_selenium/abstract/webdriver/yandex/base.py +18 -0
- osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
- osn_selenium/base_mixin.py +122 -0
- osn_selenium/browsers_handler/__init__.py +47 -17
- osn_selenium/browsers_handler/_linux.py +226 -0
- osn_selenium/browsers_handler/_windows.py +21 -14
- osn_selenium/browsers_handler/{types.py → models.py} +5 -2
- osn_selenium/dev_tools/_decorators.py +149 -0
- osn_selenium/dev_tools/_exception_helpers.py +116 -0
- osn_selenium/dev_tools/_functions.py +174 -0
- osn_selenium/dev_tools/_system_utils.py +35 -0
- osn_selenium/dev_tools/_typehints.py +35 -0
- osn_selenium/dev_tools/_validators.py +227 -0
- osn_selenium/dev_tools/_wrappers.py +92 -0
- osn_selenium/dev_tools/domains/__init__.py +7 -40
- osn_selenium/dev_tools/domains/abstract.py +98 -254
- osn_selenium/dev_tools/domains/fetch.py +229 -906
- osn_selenium/dev_tools/domains_default/fetch.py +40 -28
- osn_selenium/dev_tools/filters.py +40 -0
- osn_selenium/dev_tools/logger/main.py +214 -0
- osn_selenium/dev_tools/logger/models.py +232 -0
- osn_selenium/dev_tools/logger/target.py +278 -0
- osn_selenium/dev_tools/manager/__init__.py +16 -0
- osn_selenium/dev_tools/manager/base.py +124 -0
- osn_selenium/dev_tools/manager/lifecycle.py +236 -0
- osn_selenium/dev_tools/manager/logging.py +153 -0
- osn_selenium/dev_tools/manager/settings.py +89 -0
- osn_selenium/dev_tools/manager/targets.py +175 -0
- osn_selenium/dev_tools/models.py +49 -0
- osn_selenium/dev_tools/settings.py +139 -0
- osn_selenium/dev_tools/target/__init__.py +16 -0
- osn_selenium/dev_tools/target/base.py +427 -0
- osn_selenium/dev_tools/target/detach.py +54 -0
- osn_selenium/dev_tools/target/discovery.py +112 -0
- osn_selenium/dev_tools/target/events.py +120 -0
- osn_selenium/dev_tools/target/fingerprint.py +126 -0
- osn_selenium/dev_tools/target/lifecycle.py +184 -0
- osn_selenium/dev_tools/target/logging.py +163 -0
- osn_selenium/exceptions/__init__.py +1 -0
- osn_selenium/exceptions/base.py +9 -0
- osn_selenium/exceptions/configuration.py +84 -0
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +114 -0
- osn_selenium/exceptions/flags.py +45 -0
- osn_selenium/exceptions/instance.py +92 -0
- osn_selenium/exceptions/javascript.py +31 -0
- osn_selenium/exceptions/logic.py +31 -0
- osn_selenium/exceptions/path.py +77 -0
- osn_selenium/exceptions/platform.py +33 -0
- osn_selenium/exceptions/protocol.py +86 -0
- osn_selenium/exceptions/webdriver.py +44 -0
- osn_selenium/exceptions/window.py +63 -0
- osn_selenium/executors/__init__.py +1 -0
- osn_selenium/executors/sync/__init__.py +1 -0
- osn_selenium/executors/sync/cdp/__init__.py +550 -0
- osn_selenium/executors/sync/cdp/accessibility.py +74 -0
- osn_selenium/executors/sync/cdp/animation.py +50 -0
- osn_selenium/executors/sync/cdp/audits.py +48 -0
- osn_selenium/executors/sync/cdp/autofill.py +39 -0
- osn_selenium/executors/sync/cdp/background_service.py +30 -0
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
- osn_selenium/executors/sync/cdp/browser.py +131 -0
- osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
- osn_selenium/executors/sync/cdp/cast.py +38 -0
- osn_selenium/executors/sync/cdp/console.py +24 -0
- osn_selenium/executors/sync/cdp/css.py +187 -0
- osn_selenium/executors/sync/cdp/debugger.py +206 -0
- osn_selenium/executors/sync/cdp/device_access.py +27 -0
- osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
- osn_selenium/executors/sync/cdp/dom.py +310 -0
- osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
- osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
- osn_selenium/executors/sync/cdp/emulation.py +270 -0
- osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
- osn_selenium/executors/sync/cdp/extensions.py +39 -0
- osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
- osn_selenium/executors/sync/cdp/fetch.py +96 -0
- osn_selenium/executors/sync/cdp/file_system.py +18 -0
- osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
- osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
- osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
- osn_selenium/executors/sync/cdp/input.py +233 -0
- osn_selenium/executors/sync/cdp/inspector.py +21 -0
- osn_selenium/executors/sync/cdp/io.py +33 -0
- osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
- osn_selenium/executors/sync/cdp/log.py +35 -0
- osn_selenium/executors/sync/cdp/media.py +21 -0
- osn_selenium/executors/sync/cdp/memory.py +62 -0
- osn_selenium/executors/sync/cdp/network.py +287 -0
- osn_selenium/executors/sync/cdp/overlay.py +174 -0
- osn_selenium/executors/sync/cdp/page.py +365 -0
- osn_selenium/executors/sync/cdp/performance.py +33 -0
- osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
- osn_selenium/executors/sync/cdp/preload.py +21 -0
- osn_selenium/executors/sync/cdp/profiler.py +58 -0
- osn_selenium/executors/sync/cdp/pwa.py +55 -0
- osn_selenium/executors/sync/cdp/runtime.py +221 -0
- osn_selenium/executors/sync/cdp/schema.py +23 -0
- osn_selenium/executors/sync/cdp/security.py +30 -0
- osn_selenium/executors/sync/cdp/service_worker.py +56 -0
- osn_selenium/executors/sync/cdp/storage.py +151 -0
- osn_selenium/executors/sync/cdp/system_info.py +30 -0
- osn_selenium/executors/sync/cdp/target.py +147 -0
- osn_selenium/executors/sync/cdp/tethering.py +21 -0
- osn_selenium/executors/sync/cdp/tracing.py +62 -0
- osn_selenium/executors/sync/cdp/web_audio.py +24 -0
- osn_selenium/executors/sync/cdp/web_authn.py +82 -0
- osn_selenium/executors/sync/cdp.py +100 -0
- osn_selenium/executors/sync/javascript.py +79 -0
- osn_selenium/executors/trio_threads/__init__.py +1 -0
- osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
- osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
- osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
- osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
- osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
- osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
- osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
- osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
- osn_selenium/executors/trio_threads/cdp/console.py +33 -0
- osn_selenium/executors/trio_threads/cdp/css.py +196 -0
- osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
- osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
- osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
- osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
- osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
- osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
- osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
- osn_selenium/executors/trio_threads/cdp/input.py +242 -0
- osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
- osn_selenium/executors/trio_threads/cdp/io.py +42 -0
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
- osn_selenium/executors/trio_threads/cdp/log.py +44 -0
- osn_selenium/executors/trio_threads/cdp/media.py +30 -0
- osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
- osn_selenium/executors/trio_threads/cdp/network.py +296 -0
- osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
- osn_selenium/executors/trio_threads/cdp/page.py +374 -0
- osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
- osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
- osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
- osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
- osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
- osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
- osn_selenium/executors/trio_threads/cdp/security.py +43 -0
- osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
- osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
- osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
- osn_selenium/executors/trio_threads/cdp/target.py +156 -0
- osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
- osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
- osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
- osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
- osn_selenium/executors/trio_threads/cdp.py +104 -0
- osn_selenium/executors/trio_threads/javascript.py +90 -0
- osn_selenium/executors/unified/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/accessibility.py +81 -0
- osn_selenium/executors/unified/cdp/animation.py +50 -0
- osn_selenium/executors/unified/cdp/audits.py +45 -0
- osn_selenium/executors/unified/cdp/autofill.py +41 -0
- osn_selenium/executors/unified/cdp/background_service.py +24 -0
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
- osn_selenium/executors/unified/cdp/browser.py +143 -0
- osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
- osn_selenium/executors/unified/cdp/cast.py +32 -0
- osn_selenium/executors/unified/cdp/console.py +18 -0
- osn_selenium/executors/unified/cdp/css.py +237 -0
- osn_selenium/executors/unified/cdp/debugger.py +243 -0
- osn_selenium/executors/unified/cdp/device_access.py +21 -0
- osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
- osn_selenium/executors/unified/cdp/dom.py +380 -0
- osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
- osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
- osn_selenium/executors/unified/cdp/emulation.py +312 -0
- osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
- osn_selenium/executors/unified/cdp/extensions.py +45 -0
- osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
- osn_selenium/executors/unified/cdp/fetch.py +111 -0
- osn_selenium/executors/unified/cdp/file_system.py +15 -0
- osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
- osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
- osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
- osn_selenium/executors/unified/cdp/input.py +254 -0
- osn_selenium/executors/unified/cdp/inspector.py +15 -0
- osn_selenium/executors/unified/cdp/io.py +29 -0
- osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
- osn_selenium/executors/unified/cdp/log.py +29 -0
- osn_selenium/executors/unified/cdp/media.py +15 -0
- osn_selenium/executors/unified/cdp/memory.py +59 -0
- osn_selenium/executors/unified/cdp/network.py +323 -0
- osn_selenium/executors/unified/cdp/overlay.py +209 -0
- osn_selenium/executors/unified/cdp/page.py +410 -0
- osn_selenium/executors/unified/cdp/performance.py +27 -0
- osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
- osn_selenium/executors/unified/cdp/preload.py +15 -0
- osn_selenium/executors/unified/cdp/profiler.py +55 -0
- osn_selenium/executors/unified/cdp/pwa.py +55 -0
- osn_selenium/executors/unified/cdp/runtime.py +245 -0
- osn_selenium/executors/unified/cdp/schema.py +17 -0
- osn_selenium/executors/unified/cdp/security.py +27 -0
- osn_selenium/executors/unified/cdp/service_worker.py +62 -0
- osn_selenium/executors/unified/cdp/storage.py +178 -0
- osn_selenium/executors/unified/cdp/system_info.py +24 -0
- osn_selenium/executors/unified/cdp/target.py +165 -0
- osn_selenium/executors/unified/cdp/tethering.py +15 -0
- osn_selenium/executors/unified/cdp/tracing.py +62 -0
- osn_selenium/executors/unified/cdp/web_audio.py +18 -0
- osn_selenium/executors/unified/cdp/web_authn.py +103 -0
- osn_selenium/executors/unified/javascript.py +104 -0
- osn_selenium/flags/__init__.py +1 -0
- osn_selenium/flags/_functions.py +45 -0
- osn_selenium/flags/_typehints.py +34 -0
- osn_selenium/flags/_validators.py +101 -0
- osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
- osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
- osn_selenium/flags/chrome.py +259 -0
- osn_selenium/flags/edge.py +259 -0
- osn_selenium/flags/models/__init__.py +1 -0
- osn_selenium/flags/models/base.py +130 -0
- osn_selenium/flags/models/blink.py +263 -0
- osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
- osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
- osn_selenium/flags/models/values.py +44 -0
- osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
- osn_selenium/flags/yandex.py +259 -0
- osn_selenium/instances/__init__.py +1 -0
- osn_selenium/instances/_functions.py +242 -0
- osn_selenium/instances/_typehints.py +148 -0
- osn_selenium/instances/_utils.py +143 -0
- osn_selenium/instances/convert.py +287 -0
- osn_selenium/instances/protocols.py +105 -0
- osn_selenium/instances/sync/__init__.py +1 -0
- osn_selenium/instances/sync/action_chains/__init__.py +32 -0
- osn_selenium/instances/sync/action_chains/base.py +74 -0
- osn_selenium/instances/sync/action_chains/click.py +61 -0
- osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
- osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
- osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
- osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
- osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
- osn_selenium/instances/sync/action_chains/move.py +46 -0
- osn_selenium/instances/sync/action_chains/scroll.py +43 -0
- osn_selenium/instances/sync/action_chains/utils.py +30 -0
- osn_selenium/instances/sync/alert.py +69 -0
- osn_selenium/instances/sync/browser.py +72 -0
- osn_selenium/instances/sync/browsing_context.py +193 -0
- osn_selenium/instances/sync/dialog.py +81 -0
- osn_selenium/instances/sync/fedcm.py +92 -0
- osn_selenium/instances/sync/mobile.py +75 -0
- osn_selenium/instances/sync/network.py +90 -0
- osn_selenium/instances/sync/permissions.py +80 -0
- osn_selenium/instances/sync/script.py +77 -0
- osn_selenium/instances/sync/shadow_root.py +113 -0
- osn_selenium/instances/sync/storage.py +91 -0
- osn_selenium/instances/sync/switch_to.py +92 -0
- osn_selenium/instances/sync/web_driver_wait.py +83 -0
- osn_selenium/instances/sync/web_element.py +179 -0
- osn_selenium/instances/sync/web_extension.py +77 -0
- osn_selenium/instances/trio_threads/__init__.py +1 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
- osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
- osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
- osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
- osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
- osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
- osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
- osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
- osn_selenium/instances/trio_threads/alert.py +87 -0
- osn_selenium/instances/trio_threads/browser.py +90 -0
- osn_selenium/instances/trio_threads/browsing_context.py +216 -0
- osn_selenium/instances/trio_threads/dialog.py +99 -0
- osn_selenium/instances/trio_threads/fedcm.py +110 -0
- osn_selenium/instances/trio_threads/mobile.py +93 -0
- osn_selenium/instances/trio_threads/network.py +108 -0
- osn_selenium/instances/trio_threads/permissions.py +102 -0
- osn_selenium/instances/trio_threads/script.py +95 -0
- osn_selenium/instances/trio_threads/shadow_root.py +154 -0
- osn_selenium/instances/trio_threads/storage.py +109 -0
- osn_selenium/instances/trio_threads/switch_to.py +124 -0
- osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
- osn_selenium/instances/trio_threads/web_element.py +217 -0
- osn_selenium/instances/trio_threads/web_extension.py +99 -0
- osn_selenium/instances/unified/__init__.py +1 -0
- osn_selenium/instances/unified/action_chains/__init__.py +22 -0
- osn_selenium/instances/unified/action_chains/base.py +31 -0
- osn_selenium/instances/unified/action_chains/click.py +27 -0
- osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
- osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
- osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
- osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
- osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
- osn_selenium/instances/unified/action_chains/move.py +24 -0
- osn_selenium/instances/unified/action_chains/scroll.py +21 -0
- osn_selenium/instances/unified/action_chains/utils.py +19 -0
- osn_selenium/instances/unified/alert.py +29 -0
- osn_selenium/instances/unified/browser.py +33 -0
- osn_selenium/instances/unified/browsing_context.py +151 -0
- osn_selenium/instances/unified/dialog.py +42 -0
- osn_selenium/instances/unified/fedcm.py +48 -0
- osn_selenium/instances/unified/mobile.py +36 -0
- osn_selenium/instances/unified/network.py +50 -0
- osn_selenium/instances/unified/permissions.py +43 -0
- osn_selenium/instances/unified/script.py +38 -0
- osn_selenium/instances/unified/shadow_root.py +46 -0
- osn_selenium/instances/unified/storage.py +48 -0
- osn_selenium/instances/unified/switch_to.py +49 -0
- osn_selenium/instances/unified/web_driver_wait.py +45 -0
- osn_selenium/instances/unified/web_element.py +145 -0
- osn_selenium/instances/unified/web_extension.py +38 -0
- osn_selenium/javascript/__init__.py +1 -0
- osn_selenium/javascript/_functions.py +63 -0
- osn_selenium/javascript/fingerprint/__init__.py +120 -0
- osn_selenium/javascript/fingerprint/_decorators.py +41 -0
- osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
- osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
- osn_selenium/javascript/fingerprint/_functions.py +35 -0
- osn_selenium/javascript/fingerprint/_typehints.py +27 -0
- osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
- osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
- osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
- osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
- osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
- osn_selenium/javascript/fingerprint/registry/models.py +41 -0
- osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
- osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
- osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
- osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
- osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
- osn_selenium/javascript/functions.py +44 -0
- osn_selenium/javascript/models.py +35 -0
- osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
- osn_selenium/models.py +94 -0
- osn_selenium/trio_threads_mixin.py +159 -0
- osn_selenium/webdrivers/_args_helpers.py +181 -0
- osn_selenium/webdrivers/_bridges.py +57 -0
- osn_selenium/webdrivers/_decorators.py +83 -0
- osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
- osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
- osn_selenium/webdrivers/_executable_tables/models.py +19 -0
- osn_selenium/webdrivers/_typehints.py +10 -0
- osn_selenium/webdrivers/protocols.py +50 -0
- osn_selenium/webdrivers/sync/__init__.py +1 -0
- osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
- osn_selenium/webdrivers/sync/blink/base.py +140 -0
- osn_selenium/webdrivers/sync/blink/casting.py +34 -0
- osn_selenium/webdrivers/sync/blink/features.py +28 -0
- osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/sync/blink/logging.py +25 -0
- osn_selenium/webdrivers/sync/blink/network.py +28 -0
- osn_selenium/webdrivers/sync/blink/settings.py +63 -0
- osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
- osn_selenium/webdrivers/sync/chrome/base.py +118 -0
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
- osn_selenium/webdrivers/sync/core/__init__.py +100 -0
- osn_selenium/webdrivers/sync/core/actions.py +59 -0
- osn_selenium/webdrivers/sync/core/auth.py +77 -0
- osn_selenium/webdrivers/sync/core/base.py +175 -0
- osn_selenium/webdrivers/sync/core/capture.py +37 -0
- osn_selenium/webdrivers/sync/core/comonents.py +57 -0
- osn_selenium/webdrivers/sync/core/devtools.py +47 -0
- osn_selenium/webdrivers/sync/core/element.py +42 -0
- osn_selenium/webdrivers/sync/core/file.py +40 -0
- osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
- osn_selenium/webdrivers/sync/core/navigation.py +36 -0
- osn_selenium/webdrivers/sync/core/script.py +53 -0
- osn_selenium/webdrivers/sync/core/settings.py +35 -0
- osn_selenium/webdrivers/sync/core/storage.py +48 -0
- osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
- osn_selenium/webdrivers/sync/core/window.py +99 -0
- osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
- osn_selenium/webdrivers/sync/edge/base.py +114 -0
- osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/edge/settings.py +58 -0
- osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
- osn_selenium/webdrivers/sync/yandex/base.py +111 -0
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
- osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
- osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
- osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
- osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
- osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
- osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
- osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
- osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
- osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
- osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
- osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
- osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
- osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
- osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
- osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
- osn_selenium/webdrivers/unified/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/base.py +135 -0
- osn_selenium/webdrivers/unified/blink/casting.py +30 -0
- osn_selenium/webdrivers/unified/blink/features.py +22 -0
- osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
- osn_selenium/webdrivers/unified/blink/logging.py +18 -0
- osn_selenium/webdrivers/unified/blink/network.py +22 -0
- osn_selenium/webdrivers/unified/blink/settings.py +86 -0
- osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
- osn_selenium/webdrivers/unified/chrome/base.py +58 -0
- osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
- osn_selenium/webdrivers/unified/core/__init__.py +1 -0
- osn_selenium/webdrivers/unified/core/actions.py +43 -0
- osn_selenium/webdrivers/unified/core/auth.py +70 -0
- osn_selenium/webdrivers/unified/core/base.py +139 -0
- osn_selenium/webdrivers/unified/core/capture.py +32 -0
- osn_selenium/webdrivers/unified/core/components.py +32 -0
- osn_selenium/webdrivers/unified/core/devtools.py +35 -0
- osn_selenium/webdrivers/unified/core/element.py +24 -0
- osn_selenium/webdrivers/unified/core/file.py +35 -0
- osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
- osn_selenium/webdrivers/unified/core/navigation.py +31 -0
- osn_selenium/webdrivers/unified/core/script.py +32 -0
- osn_selenium/webdrivers/unified/core/settings.py +44 -0
- osn_selenium/webdrivers/unified/core/storage.py +37 -0
- osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
- osn_selenium/webdrivers/unified/core/window.py +135 -0
- osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
- osn_selenium/webdrivers/unified/edge/base.py +56 -0
- osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/edge/settings.py +48 -0
- osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
- osn_selenium/webdrivers/unified/yandex/base.py +58 -0
- osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
- osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
- osn_selenium-1.1.0.dist-info/METADATA +252 -0
- osn_selenium-1.1.0.dist-info/RECORD +615 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
- osn_selenium/captcha_workers/__init__.py +0 -26
- osn_selenium/dev_tools/_types.py +0 -22
- osn_selenium/dev_tools/errors.py +0 -89
- osn_selenium/dev_tools/logger.py +0 -558
- osn_selenium/dev_tools/manager.py +0 -1551
- osn_selenium/dev_tools/utils.py +0 -509
- osn_selenium/errors.py +0 -16
- osn_selenium/types.py +0 -118
- osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
- osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
- osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
- osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
- osn_selenium/webdrivers/Blink/protocols.py +0 -330
- osn_selenium/webdrivers/Blink/webdriver.py +0 -637
- osn_selenium/webdrivers/Chrome/protocols.py +0 -228
- osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
- osn_selenium/webdrivers/Edge/protocols.py +0 -228
- osn_selenium/webdrivers/Edge/webdriver.py +0 -394
- osn_selenium/webdrivers/Yandex/protocols.py +0 -211
- osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
- osn_selenium/webdrivers/_functions.py +0 -504
- osn_selenium/webdrivers/types.py +0 -390
- osn_selenium-0.0.0.dist-info/METADATA +0 -710
- osn_selenium-0.0.0.dist-info/RECORD +0 -57
- /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import Optional, Self
|
|
3
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
4
|
+
from osn_selenium.instances._typehints import ALERT_TYPEHINT
|
|
5
|
+
from osn_selenium.instances.unified.alert import UnifiedAlert
|
|
6
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
7
|
+
from osn_selenium.abstract.instances.alert import AbstractAlert
|
|
8
|
+
from selenium.webdriver.common.alert import Alert as legacyAlert
|
|
9
|
+
from osn_selenium.exceptions.instance import (
|
|
10
|
+
CannotConvertTypeError
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
__all__ = ["Alert"]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Alert(UnifiedAlert, TrioThreadMixin, AbstractAlert):
|
|
18
|
+
"""
|
|
19
|
+
Wrapper for the legacy Selenium Alert instance.
|
|
20
|
+
|
|
21
|
+
Manages browser alerts, prompts, and confirmation dialogs, allowing
|
|
22
|
+
acceptance, dismissal, text retrieval, and input.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self,
|
|
27
|
+
selenium_alert: legacyAlert,
|
|
28
|
+
lock: trio.Lock,
|
|
29
|
+
limiter: Optional[trio.CapacityLimiter] = None,
|
|
30
|
+
) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Initializes the Alert wrapper.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
selenium_alert (legacyAlert): The legacy Selenium Alert instance to wrap.
|
|
36
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
37
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
UnifiedAlert.__init__(self, selenium_alert=selenium_alert)
|
|
41
|
+
|
|
42
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
43
|
+
|
|
44
|
+
async def accept(self) -> None:
|
|
45
|
+
await self.sync_to_trio(sync_function=self._accept_impl)()
|
|
46
|
+
|
|
47
|
+
async def dismiss(self) -> None:
|
|
48
|
+
await self.sync_to_trio(sync_function=self._dismiss_impl)()
|
|
49
|
+
|
|
50
|
+
@classmethod
|
|
51
|
+
def from_legacy(
|
|
52
|
+
cls,
|
|
53
|
+
legacy_object: ALERT_TYPEHINT,
|
|
54
|
+
lock: trio.Lock,
|
|
55
|
+
limiter: trio.CapacityLimiter,
|
|
56
|
+
) -> Self:
|
|
57
|
+
"""
|
|
58
|
+
Creates an instance from a legacy Selenium Alert object.
|
|
59
|
+
|
|
60
|
+
This factory method is used to wrap an existing Selenium Alert
|
|
61
|
+
instance into the new interface.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
legacy_object (ALERT_TYPEHINT): The legacy Selenium Alert instance or its wrapper.
|
|
65
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
66
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
Self: A new instance of a class implementing Alert.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
legacy_alert_obj = get_legacy_instance(instance=legacy_object)
|
|
73
|
+
|
|
74
|
+
if not isinstance(legacy_alert_obj, legacyAlert):
|
|
75
|
+
raise CannotConvertTypeError(from_=legacyAlert, to_=legacy_object)
|
|
76
|
+
|
|
77
|
+
return cls(selenium_alert=legacy_alert_obj, lock=lock, limiter=limiter)
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def legacy(self) -> legacyAlert:
|
|
81
|
+
return self._legacy_impl
|
|
82
|
+
|
|
83
|
+
async def send_keys(self, keysToSend: str) -> None:
|
|
84
|
+
await self.sync_to_trio(sync_function=self._send_keys_impl)(keysToSend=keysToSend)
|
|
85
|
+
|
|
86
|
+
async def text(self) -> str:
|
|
87
|
+
return await self.sync_to_trio(sync_function=self._text_impl)()
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import List, Self
|
|
3
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
4
|
+
from osn_selenium.instances._typehints import BROWSER_TYPEHINT
|
|
5
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
6
|
+
from osn_selenium.instances.unified.browser import UnifiedBrowser
|
|
7
|
+
from osn_selenium.abstract.instances.browser import AbstractBrowser
|
|
8
|
+
from osn_selenium.exceptions.instance import (
|
|
9
|
+
CannotConvertTypeError
|
|
10
|
+
)
|
|
11
|
+
from selenium.webdriver.common.bidi.browser import (
|
|
12
|
+
Browser as legacyBrowser,
|
|
13
|
+
ClientWindowInfo
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__all__ = ["Browser"]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Browser(UnifiedBrowser, TrioThreadMixin, AbstractBrowser):
|
|
21
|
+
"""
|
|
22
|
+
Wrapper for the legacy Selenium BiDi Browser instance.
|
|
23
|
+
|
|
24
|
+
Provides methods to manage user contexts (profiles) and inspect client
|
|
25
|
+
window information via the WebDriver BiDi protocol.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
selenium_browser: legacyBrowser,
|
|
31
|
+
lock: trio.Lock,
|
|
32
|
+
limiter: trio.CapacityLimiter,
|
|
33
|
+
) -> None:
|
|
34
|
+
"""
|
|
35
|
+
Initializes the Browser wrapper.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
selenium_browser (legacyBrowser): The legacy Selenium Browser instance to wrap.
|
|
39
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
40
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
UnifiedBrowser.__init__(self, selenium_browser=selenium_browser)
|
|
44
|
+
|
|
45
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
46
|
+
|
|
47
|
+
async def create_user_context(self) -> str:
|
|
48
|
+
return await self.sync_to_trio(sync_function=self._create_user_context_impl)()
|
|
49
|
+
|
|
50
|
+
@classmethod
|
|
51
|
+
def from_legacy(
|
|
52
|
+
cls,
|
|
53
|
+
legacy_object: BROWSER_TYPEHINT,
|
|
54
|
+
lock: trio.Lock,
|
|
55
|
+
limiter: trio.CapacityLimiter,
|
|
56
|
+
) -> Self:
|
|
57
|
+
"""
|
|
58
|
+
Creates an instance from a legacy Selenium Browser object.
|
|
59
|
+
|
|
60
|
+
This factory method is used to wrap an existing Selenium Browser
|
|
61
|
+
instance into the new interface.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
legacy_object (BROWSER_TYPEHINT): The legacy Selenium Browser instance or its wrapper.
|
|
65
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
66
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
Self: A new instance of a class implementing Browser.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
legacy_browser_obj = get_legacy_instance(instance=legacy_object)
|
|
73
|
+
|
|
74
|
+
if not isinstance(legacy_browser_obj, legacyBrowser):
|
|
75
|
+
raise CannotConvertTypeError(from_=legacyBrowser, to_=legacy_object)
|
|
76
|
+
|
|
77
|
+
return cls(selenium_browser=legacy_browser_obj, limiter=limiter, lock=lock)
|
|
78
|
+
|
|
79
|
+
async def get_client_windows(self) -> List[ClientWindowInfo]:
|
|
80
|
+
return await self.sync_to_trio(sync_function=self._get_client_windows_impl)()
|
|
81
|
+
|
|
82
|
+
async def get_user_contexts(self) -> List[str]:
|
|
83
|
+
return await self.sync_to_trio(sync_function=self._get_user_contexts_impl)()
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def legacy(self) -> legacyBrowser:
|
|
87
|
+
return self._legacy_impl
|
|
88
|
+
|
|
89
|
+
async def remove_user_context(self, user_context_id: str) -> None:
|
|
90
|
+
await self.sync_to_trio(sync_function=self._remove_user_context_impl)(user_context_id=user_context_id)
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
3
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
4
|
+
from osn_selenium.exceptions.instance import (
|
|
5
|
+
CannotConvertTypeError
|
|
6
|
+
)
|
|
7
|
+
from osn_selenium.instances._typehints import (
|
|
8
|
+
BROWSING_CONTEXT_TYPEHINT
|
|
9
|
+
)
|
|
10
|
+
from typing import (
|
|
11
|
+
Any,
|
|
12
|
+
Callable,
|
|
13
|
+
Dict,
|
|
14
|
+
List,
|
|
15
|
+
Optional,
|
|
16
|
+
Self,
|
|
17
|
+
Union
|
|
18
|
+
)
|
|
19
|
+
from osn_selenium.instances.unified.browsing_context import (
|
|
20
|
+
UnifiedBrowsingContext
|
|
21
|
+
)
|
|
22
|
+
from osn_selenium.abstract.instances.browsing_context import (
|
|
23
|
+
AbstractBrowsingContext
|
|
24
|
+
)
|
|
25
|
+
from selenium.webdriver.common.bidi.browsing_context import (
|
|
26
|
+
BrowsingContext as legacyBrowsingContext,
|
|
27
|
+
BrowsingContextInfo
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
__all__ = ["BrowsingContext"]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class BrowsingContext(UnifiedBrowsingContext, TrioThreadMixin, AbstractBrowsingContext):
|
|
35
|
+
"""
|
|
36
|
+
Wrapper for the legacy Selenium BiDi BrowsingContext instance (Trio/Async).
|
|
37
|
+
|
|
38
|
+
Controls browser tabs and windows (contexts), allowing navigation,
|
|
39
|
+
reloading, closing, screenshotting, and DOM tree inspection.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
def __init__(
|
|
43
|
+
self,
|
|
44
|
+
selenium_browsing_context: legacyBrowsingContext,
|
|
45
|
+
lock: trio.Lock,
|
|
46
|
+
limiter: trio.CapacityLimiter,
|
|
47
|
+
) -> None:
|
|
48
|
+
"""
|
|
49
|
+
Initializes the BrowsingContext wrapper.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
selenium_browsing_context (legacyBrowsingContext): The legacy Selenium instance to wrap.
|
|
53
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
54
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
UnifiedBrowsingContext.__init__(self, selenium_browsing_context=selenium_browsing_context)
|
|
58
|
+
|
|
59
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
60
|
+
|
|
61
|
+
async def activate(self, context: str) -> Any:
|
|
62
|
+
return await self.sync_to_trio(sync_function=self._activate_impl)(context=context)
|
|
63
|
+
|
|
64
|
+
async def add_event_handler(
|
|
65
|
+
self,
|
|
66
|
+
event: str,
|
|
67
|
+
callback: Callable,
|
|
68
|
+
contexts: Optional[List[str]] = None,
|
|
69
|
+
) -> int:
|
|
70
|
+
return await self.sync_to_trio(sync_function=self._add_event_handler_impl)(event=event, callback=callback, contexts=contexts)
|
|
71
|
+
|
|
72
|
+
async def capture_screenshot(
|
|
73
|
+
self,
|
|
74
|
+
context: str,
|
|
75
|
+
origin: str = "viewport",
|
|
76
|
+
format: Optional[Dict] = None,
|
|
77
|
+
clip: Optional[Dict] = None,
|
|
78
|
+
) -> str:
|
|
79
|
+
return await self.sync_to_trio(sync_function=self._capture_screenshot_impl)(context=context, origin=origin, format=format, clip=clip)
|
|
80
|
+
|
|
81
|
+
async def clear_event_handlers(self) -> None:
|
|
82
|
+
await self.sync_to_trio(sync_function=self._clear_event_handlers_impl)()
|
|
83
|
+
|
|
84
|
+
async def close(self, context: str, prompt_unload: bool = False) -> None:
|
|
85
|
+
await self.sync_to_trio(sync_function=self._close_impl)(context=context, prompt_unload=prompt_unload)
|
|
86
|
+
|
|
87
|
+
async def create(
|
|
88
|
+
self,
|
|
89
|
+
type: str,
|
|
90
|
+
reference_context: Optional[str] = None,
|
|
91
|
+
background: bool = False,
|
|
92
|
+
user_context: Optional[str] = None,
|
|
93
|
+
) -> str:
|
|
94
|
+
return await self.sync_to_trio(sync_function=self._create_impl)(
|
|
95
|
+
type=type,
|
|
96
|
+
reference_context=reference_context,
|
|
97
|
+
background=background,
|
|
98
|
+
user_context=user_context
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
@classmethod
|
|
102
|
+
def from_legacy(
|
|
103
|
+
cls,
|
|
104
|
+
legacy_object: BROWSING_CONTEXT_TYPEHINT,
|
|
105
|
+
lock: trio.Lock,
|
|
106
|
+
limiter: trio.CapacityLimiter,
|
|
107
|
+
) -> Self:
|
|
108
|
+
"""
|
|
109
|
+
Creates an instance from a legacy Selenium BrowsingContext object.
|
|
110
|
+
|
|
111
|
+
This factory method is used to wrap an existing Selenium BrowsingContext
|
|
112
|
+
instance into the new interface.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
legacy_object (BROWSING_CONTEXT_TYPEHINT): The legacy Selenium BrowsingContext instance or its wrapper.
|
|
116
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
117
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
Self: A new instance of a class implementing BrowsingContext.
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
legacy_browsing_context_obj = get_legacy_instance(instance=legacy_object)
|
|
124
|
+
|
|
125
|
+
if not isinstance(legacy_browsing_context_obj, legacyBrowsingContext):
|
|
126
|
+
raise CannotConvertTypeError(from_=legacyBrowsingContext, to_=legacy_object)
|
|
127
|
+
|
|
128
|
+
return cls(
|
|
129
|
+
selenium_browsing_context=legacy_browsing_context_obj,
|
|
130
|
+
lock=lock,
|
|
131
|
+
limiter=limiter
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
async def get_tree(self, max_depth: Optional[int] = None, root: Optional[str] = None) -> List[BrowsingContextInfo]:
|
|
135
|
+
return await self.sync_to_trio(sync_function=self._get_tree_impl)(max_depth=max_depth, root=root)
|
|
136
|
+
|
|
137
|
+
async def handle_user_prompt(
|
|
138
|
+
self,
|
|
139
|
+
context: str,
|
|
140
|
+
accept: Optional[bool] = None,
|
|
141
|
+
user_text: Optional[str] = None,
|
|
142
|
+
) -> None:
|
|
143
|
+
await self.sync_to_trio(sync_function=self._handle_user_prompt_impl)(context=context, accept=accept, user_text=user_text)
|
|
144
|
+
|
|
145
|
+
@property
|
|
146
|
+
def legacy(self) -> legacyBrowsingContext:
|
|
147
|
+
return self._legacy_impl
|
|
148
|
+
|
|
149
|
+
async def locate_nodes(
|
|
150
|
+
self,
|
|
151
|
+
context: str,
|
|
152
|
+
locator: Dict,
|
|
153
|
+
max_node_count: Optional[int] = None,
|
|
154
|
+
serialization_options: Optional[Dict] = None,
|
|
155
|
+
start_nodes: Optional[List[Dict]] = None,
|
|
156
|
+
) -> List[Dict]:
|
|
157
|
+
return await self.sync_to_trio(sync_function=self._locate_nodes_impl)(
|
|
158
|
+
context=context,
|
|
159
|
+
locator=locator,
|
|
160
|
+
max_node_count=max_node_count,
|
|
161
|
+
serialization_options=serialization_options,
|
|
162
|
+
start_nodes=start_nodes
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
async def navigate(self, context: str, url: str, wait: Optional[str] = None) -> Dict:
|
|
166
|
+
return await self.sync_to_trio(sync_function=self._navigate_impl)(context=context, url=url, wait=wait)
|
|
167
|
+
|
|
168
|
+
async def print(
|
|
169
|
+
self,
|
|
170
|
+
context: str,
|
|
171
|
+
background: bool = False,
|
|
172
|
+
margin: Optional[Dict] = None,
|
|
173
|
+
orientation: str = "portrait",
|
|
174
|
+
page: Optional[Dict] = None,
|
|
175
|
+
page_ranges: Optional[List[Union[int, str]]] = None,
|
|
176
|
+
scale: float = 1.0,
|
|
177
|
+
shrink_to_fit: bool = True,
|
|
178
|
+
) -> str:
|
|
179
|
+
return await self.sync_to_trio(sync_function=self._print_impl)(
|
|
180
|
+
context=context,
|
|
181
|
+
background=background,
|
|
182
|
+
margin=margin,
|
|
183
|
+
orientation=orientation,
|
|
184
|
+
page=page,
|
|
185
|
+
page_ranges=page_ranges,
|
|
186
|
+
scale=scale,
|
|
187
|
+
shrink_to_fit=shrink_to_fit
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
async def reload(
|
|
191
|
+
self,
|
|
192
|
+
context: str,
|
|
193
|
+
ignore_cache: Optional[bool] = None,
|
|
194
|
+
wait: Optional[str] = None,
|
|
195
|
+
) -> Dict:
|
|
196
|
+
return await self.sync_to_trio(sync_function=self._reload_impl)(context=context, ignore_cache=ignore_cache, wait=wait)
|
|
197
|
+
|
|
198
|
+
async def remove_event_handler(self, event: str, callback_id: int) -> None:
|
|
199
|
+
await self.sync_to_trio(sync_function=self._remove_event_handler_impl)(event=event, callback_id=callback_id)
|
|
200
|
+
|
|
201
|
+
async def set_viewport(
|
|
202
|
+
self,
|
|
203
|
+
context: Optional[str] = None,
|
|
204
|
+
viewport: Optional[Dict] = None,
|
|
205
|
+
device_pixel_ratio: Optional[float] = None,
|
|
206
|
+
user_contexts: Optional[List[str]] = None,
|
|
207
|
+
) -> None:
|
|
208
|
+
await self.sync_to_trio(sync_function=self._set_viewport_impl)(
|
|
209
|
+
context=context,
|
|
210
|
+
viewport=viewport,
|
|
211
|
+
device_pixel_ratio=device_pixel_ratio,
|
|
212
|
+
user_contexts=user_contexts
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
async def traverse_history(self, context: str, delta: int) -> Dict:
|
|
216
|
+
return await self.sync_to_trio(sync_function=self._traverse_history_impl)(context=context, delta=delta)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import List, Optional, Self
|
|
3
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
4
|
+
from selenium.webdriver.common.fedcm.account import Account
|
|
5
|
+
from osn_selenium.instances._typehints import DIALOG_TYPEHINT
|
|
6
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
7
|
+
from osn_selenium.instances.unified.dialog import UnifiedDialog
|
|
8
|
+
from osn_selenium.abstract.instances.dialog import AbstractDialog
|
|
9
|
+
from osn_selenium.exceptions.instance import (
|
|
10
|
+
CannotConvertTypeError
|
|
11
|
+
)
|
|
12
|
+
from selenium.webdriver.common.fedcm.dialog import (
|
|
13
|
+
Dialog as legacyDialog
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__all__ = ["Dialog"]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Dialog(UnifiedDialog, TrioThreadMixin, AbstractDialog):
|
|
21
|
+
"""
|
|
22
|
+
Wrapper for the legacy Selenium FedCM Dialog instance.
|
|
23
|
+
|
|
24
|
+
Handles Federated Credential Management dialogs, including account selection
|
|
25
|
+
and dismissal.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
selenium_dialog: legacyDialog,
|
|
31
|
+
lock: trio.Lock,
|
|
32
|
+
limiter: trio.CapacityLimiter,
|
|
33
|
+
) -> None:
|
|
34
|
+
"""
|
|
35
|
+
Initializes the Dialog wrapper.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
selenium_dialog (legacyDialog): The legacy Selenium Dialog instance to wrap.
|
|
39
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
40
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
UnifiedDialog.__init__(self, selenium_dialog=selenium_dialog)
|
|
44
|
+
|
|
45
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
46
|
+
|
|
47
|
+
async def accept(self) -> None:
|
|
48
|
+
await self.sync_to_trio(sync_function=self._accept_impl)()
|
|
49
|
+
|
|
50
|
+
async def dismiss(self) -> None:
|
|
51
|
+
await self.sync_to_trio(sync_function=self._dismiss_impl)()
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def from_legacy(
|
|
55
|
+
cls,
|
|
56
|
+
legacy_object: DIALOG_TYPEHINT,
|
|
57
|
+
lock: trio.Lock,
|
|
58
|
+
limiter: trio.CapacityLimiter,
|
|
59
|
+
) -> Self:
|
|
60
|
+
"""
|
|
61
|
+
Creates an instance from a legacy Selenium Dialog object.
|
|
62
|
+
|
|
63
|
+
This factory method is used to wrap an existing Selenium Dialog
|
|
64
|
+
instance into the new interface.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
legacy_object (DIALOG_TYPEHINT): The legacy Selenium Dialog instance or its wrapper.
|
|
68
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
69
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
Self: A new instance of a class implementing Dialog.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
legacy_dialog_obj = get_legacy_instance(instance=legacy_object)
|
|
76
|
+
|
|
77
|
+
if not isinstance(legacy_dialog_obj, legacyDialog):
|
|
78
|
+
raise CannotConvertTypeError(from_=legacyDialog, to_=legacy_object)
|
|
79
|
+
|
|
80
|
+
return cls(selenium_dialog=legacy_dialog_obj, lock=lock, limiter=limiter)
|
|
81
|
+
|
|
82
|
+
async def get_accounts(self) -> List[Account]:
|
|
83
|
+
return await self.sync_to_trio(sync_function=self._get_accounts_impl)()
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def legacy(self) -> legacyDialog:
|
|
87
|
+
return self._legacy_impl
|
|
88
|
+
|
|
89
|
+
async def select_account(self, index: int) -> None:
|
|
90
|
+
await self.sync_to_trio(sync_function=self._select_account_impl)(index=index)
|
|
91
|
+
|
|
92
|
+
async def subtitle(self) -> Optional[str]:
|
|
93
|
+
return await self.sync_to_trio(sync_function=self._subtitle_impl)()
|
|
94
|
+
|
|
95
|
+
async def title(self) -> str:
|
|
96
|
+
return await self.sync_to_trio(sync_function=self._title_impl)()
|
|
97
|
+
|
|
98
|
+
async def type(self) -> Optional[str]:
|
|
99
|
+
return await self.sync_to_trio(sync_function=self._type_impl)()
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
3
|
+
from typing import (
|
|
4
|
+
Dict,
|
|
5
|
+
List,
|
|
6
|
+
Optional,
|
|
7
|
+
Self
|
|
8
|
+
)
|
|
9
|
+
from osn_selenium.instances._typehints import FEDCM_TYPEHINT
|
|
10
|
+
from osn_selenium.instances.unified.fedcm import UnifiedFedCM
|
|
11
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
12
|
+
from osn_selenium.abstract.instances.fedcm import AbstractFedCM
|
|
13
|
+
from selenium.webdriver.remote.fedcm import FedCM as legacyFedCM
|
|
14
|
+
from osn_selenium.exceptions.instance import (
|
|
15
|
+
CannotConvertTypeError
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
__all__ = ["FedCM"]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class FedCM(UnifiedFedCM, TrioThreadMixin, AbstractFedCM):
|
|
23
|
+
"""
|
|
24
|
+
Wrapper for the legacy Selenium FedCM instance.
|
|
25
|
+
|
|
26
|
+
Provides an interface for controlling the Federated Credential Management API,
|
|
27
|
+
including dialog delays and cooldown resets.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
selenium_fedcm: legacyFedCM,
|
|
33
|
+
lock: trio.Lock,
|
|
34
|
+
limiter: trio.CapacityLimiter,
|
|
35
|
+
) -> None:
|
|
36
|
+
"""
|
|
37
|
+
Initializes the FedCM wrapper.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
selenium_fedcm (legacyFedCM): The legacy Selenium FedCM instance to wrap.
|
|
41
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
42
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
UnifiedFedCM.__init__(self, selenium_fedcm=selenium_fedcm)
|
|
46
|
+
|
|
47
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
48
|
+
|
|
49
|
+
async def accept(self) -> None:
|
|
50
|
+
await self.sync_to_trio(sync_function=self._accept_impl)()
|
|
51
|
+
|
|
52
|
+
async def account_list(self) -> List[Dict]:
|
|
53
|
+
return await self.sync_to_trio(sync_function=self._account_list_impl)()
|
|
54
|
+
|
|
55
|
+
async def dialog_type(self) -> str:
|
|
56
|
+
return await self.sync_to_trio(sync_function=self._dialog_type_impl)()
|
|
57
|
+
|
|
58
|
+
async def disable_delay(self) -> None:
|
|
59
|
+
await self.sync_to_trio(sync_function=self._disable_delay_impl)()
|
|
60
|
+
|
|
61
|
+
async def dismiss(self) -> None:
|
|
62
|
+
await self.sync_to_trio(sync_function=self._dismiss_impl)()
|
|
63
|
+
|
|
64
|
+
async def enable_delay(self) -> None:
|
|
65
|
+
await self.sync_to_trio(sync_function=self._enable_delay_impl)()
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def from_legacy(
|
|
69
|
+
cls,
|
|
70
|
+
legacy_object: FEDCM_TYPEHINT,
|
|
71
|
+
lock: trio.Lock,
|
|
72
|
+
limiter: trio.CapacityLimiter,
|
|
73
|
+
) -> Self:
|
|
74
|
+
"""
|
|
75
|
+
Creates an instance from a legacy Selenium FedCM object.
|
|
76
|
+
|
|
77
|
+
This factory method is used to wrap an existing Selenium FedCM
|
|
78
|
+
instance into the new interface.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
legacy_object (FEDCM_TYPEHINT): The legacy Selenium FedCM instance or its wrapper.
|
|
82
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
83
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
Self: A new instance of a class implementing FedCM.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
legacy_fedcm_obj = get_legacy_instance(instance=legacy_object)
|
|
90
|
+
|
|
91
|
+
if not isinstance(legacy_fedcm_obj, legacyFedCM):
|
|
92
|
+
raise CannotConvertTypeError(from_=legacyFedCM, to_=legacy_object)
|
|
93
|
+
|
|
94
|
+
return cls(selenium_fedcm=legacy_fedcm_obj, lock=lock, limiter=limiter)
|
|
95
|
+
|
|
96
|
+
@property
|
|
97
|
+
def legacy(self) -> legacyFedCM:
|
|
98
|
+
return self._legacy_impl
|
|
99
|
+
|
|
100
|
+
async def reset_cooldown(self) -> None:
|
|
101
|
+
await self.sync_to_trio(sync_function=self._reset_cooldown_impl)()
|
|
102
|
+
|
|
103
|
+
async def select_account(self, index: int) -> None:
|
|
104
|
+
await self.sync_to_trio(sync_function=self._select_account_impl)(index=index)
|
|
105
|
+
|
|
106
|
+
async def subtitle(self) -> Optional[str]:
|
|
107
|
+
return await self.sync_to_trio(sync_function=self._subtitle_impl)()
|
|
108
|
+
|
|
109
|
+
async def title(self) -> str:
|
|
110
|
+
return await self.sync_to_trio(sync_function=self._title_impl)()
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import List, Self, Union
|
|
3
|
+
from osn_selenium.trio_threads_mixin import TrioThreadMixin
|
|
4
|
+
from osn_selenium.instances._typehints import MOBILE_TYPEHINT
|
|
5
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
6
|
+
from osn_selenium.instances.unified.mobile import UnifiedMobile
|
|
7
|
+
from osn_selenium.abstract.instances.mobile import AbstractMobile
|
|
8
|
+
from osn_selenium.exceptions.instance import (
|
|
9
|
+
CannotConvertTypeError
|
|
10
|
+
)
|
|
11
|
+
from selenium.webdriver.remote.mobile import (
|
|
12
|
+
Mobile as legacyMobile,
|
|
13
|
+
_ConnectionType
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__all__ = ["Mobile"]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Mobile(UnifiedMobile, TrioThreadMixin, AbstractMobile):
|
|
21
|
+
"""
|
|
22
|
+
Wrapper for the legacy Selenium Mobile instance.
|
|
23
|
+
|
|
24
|
+
Manages network connection types and context settings (e.g., native app vs web view)
|
|
25
|
+
for mobile emulation.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
selenium_mobile: legacyMobile,
|
|
31
|
+
lock: trio.Lock,
|
|
32
|
+
limiter: trio.CapacityLimiter,
|
|
33
|
+
) -> None:
|
|
34
|
+
"""
|
|
35
|
+
Initializes the Mobile wrapper.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
selenium_mobile (legacyMobile): The legacy Selenium Mobile instance to wrap.
|
|
39
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
40
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
UnifiedMobile.__init__(self, selenium_mobile=selenium_mobile)
|
|
44
|
+
|
|
45
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
46
|
+
|
|
47
|
+
async def context(self) -> str:
|
|
48
|
+
return await self.sync_to_trio(sync_function=self._get_context_impl)()
|
|
49
|
+
|
|
50
|
+
async def contexts(self) -> List[str]:
|
|
51
|
+
return await self.sync_to_trio(sync_function=self._contexts_impl)()
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def from_legacy(
|
|
55
|
+
cls,
|
|
56
|
+
legacy_object: MOBILE_TYPEHINT,
|
|
57
|
+
lock: trio.Lock,
|
|
58
|
+
limiter: trio.CapacityLimiter,
|
|
59
|
+
) -> Self:
|
|
60
|
+
"""
|
|
61
|
+
Creates an instance from a legacy Selenium Mobile object.
|
|
62
|
+
|
|
63
|
+
This factory method is used to wrap an existing Selenium Mobile
|
|
64
|
+
instance into the new interface.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
legacy_object (MOBILE_TYPEHINT): The legacy Selenium Mobile instance or its wrapper.
|
|
68
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
69
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
Self: A new instance of a class implementing Mobile.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
legacy_mobile_obj = get_legacy_instance(instance=legacy_object)
|
|
76
|
+
|
|
77
|
+
if not isinstance(legacy_mobile_obj, legacyMobile):
|
|
78
|
+
raise CannotConvertTypeError(from_=legacyMobile, to_=legacy_object)
|
|
79
|
+
|
|
80
|
+
return cls(selenium_mobile=legacy_mobile_obj, lock=lock, limiter=limiter)
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def legacy(self) -> legacyMobile:
|
|
84
|
+
return self._legacy_impl
|
|
85
|
+
|
|
86
|
+
async def network_connection(self) -> _ConnectionType:
|
|
87
|
+
return await self.sync_to_trio(sync_function=self._network_connection_impl)()
|
|
88
|
+
|
|
89
|
+
async def set_context(self, new_context: str) -> None:
|
|
90
|
+
await self.sync_to_trio(sync_function=self._set_context_impl)(new_context=new_context)
|
|
91
|
+
|
|
92
|
+
async def set_network_connection(self, network: Union[int, _ConnectionType]) -> _ConnectionType:
|
|
93
|
+
return await self.sync_to_trio(sync_function=self._set_network_connection_impl)(network=network)
|