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.
- 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/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 +140 -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 +32 -0
- osn_selenium/dev_tools/_validators.py +227 -0
- osn_selenium/dev_tools/_wrappers.py +95 -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 +226 -0
- osn_selenium/dev_tools/logger/models.py +232 -0
- osn_selenium/dev_tools/logger/target.py +258 -0
- osn_selenium/dev_tools/manager/__init__.py +16 -0
- osn_selenium/dev_tools/manager/base.py +147 -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 +135 -0
- osn_selenium/dev_tools/target/__init__.py +16 -0
- osn_selenium/dev_tools/target/base.py +438 -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 +179 -0
- osn_selenium/dev_tools/target/logging.py +155 -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/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/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/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 +108 -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} +165 -243
- osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +133 -371
- 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 +26 -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 +91 -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 +26 -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 +123 -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 +139 -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 +114 -0
- osn_selenium/webdrivers/sync/blink/base.py +128 -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 +67 -0
- osn_selenium/webdrivers/sync/chrome/base.py +106 -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 +91 -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 +167 -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 +67 -0
- osn_selenium/webdrivers/sync/edge/base.py +102 -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 +67 -0
- osn_selenium/webdrivers/sync/yandex/base.py +99 -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 +124 -0
- osn_selenium/webdrivers/trio_threads/blink/base.py +133 -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 +81 -0
- osn_selenium/webdrivers/trio_threads/chrome/base.py +107 -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 +109 -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 +191 -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 +81 -0
- osn_selenium/webdrivers/trio_threads/edge/base.py +103 -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 +81 -0
- osn_selenium/webdrivers/trio_threads/yandex/base.py +100 -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 +131 -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 +54 -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 +132 -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 +52 -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 +54 -0
- osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
- osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
- osn_selenium-1.0.0.dist-info/METADATA +239 -0
- osn_selenium-1.0.0.dist-info/RECORD +608 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.0.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.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from osn_selenium.base_mixin import TrioThreadMixin
|
|
3
|
+
from typing import (
|
|
4
|
+
Callable,
|
|
5
|
+
List,
|
|
6
|
+
Optional,
|
|
7
|
+
Self
|
|
8
|
+
)
|
|
9
|
+
from osn_selenium.instances._typehints import NETWORK_TYPEHINT
|
|
10
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
11
|
+
from osn_selenium.instances.unified.network import UnifiedNetwork
|
|
12
|
+
from osn_selenium.abstract.instances.network import AbstractNetwork
|
|
13
|
+
from osn_selenium.exceptions.instance import (
|
|
14
|
+
CannotConvertTypeError
|
|
15
|
+
)
|
|
16
|
+
from selenium.webdriver.common.bidi.network import (
|
|
17
|
+
Network as legacyNetwork
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
__all__ = ["Network"]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Network(UnifiedNetwork, TrioThreadMixin, AbstractNetwork):
|
|
25
|
+
"""
|
|
26
|
+
Wrapper for the legacy Selenium BiDi Network instance.
|
|
27
|
+
|
|
28
|
+
Allows interception of network requests, adding authentication handlers,
|
|
29
|
+
and managing request callbacks.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def __init__(
|
|
33
|
+
self,
|
|
34
|
+
selenium_network: legacyNetwork,
|
|
35
|
+
lock: trio.Lock,
|
|
36
|
+
limiter: trio.CapacityLimiter,
|
|
37
|
+
) -> None:
|
|
38
|
+
"""
|
|
39
|
+
Initializes the Network wrapper.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
selenium_network (legacyNetwork): The legacy Selenium Network instance to wrap.
|
|
43
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
44
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
UnifiedNetwork.__init__(self, selenium_network=selenium_network)
|
|
48
|
+
|
|
49
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
50
|
+
|
|
51
|
+
async def add_auth_handler(self, username: str, password: str) -> int:
|
|
52
|
+
return await self.sync_to_trio(sync_function=self._add_auth_handler_impl)(username=username, password=password)
|
|
53
|
+
|
|
54
|
+
async def add_request_handler(
|
|
55
|
+
self,
|
|
56
|
+
event: str,
|
|
57
|
+
callback: Callable,
|
|
58
|
+
url_patterns: Optional[List[str]] = None,
|
|
59
|
+
contexts: Optional[List[str]] = None,
|
|
60
|
+
) -> int:
|
|
61
|
+
return await self.sync_to_trio(sync_function=self._add_request_handler_impl)(
|
|
62
|
+
event=event,
|
|
63
|
+
callback=callback,
|
|
64
|
+
url_patterns=url_patterns,
|
|
65
|
+
contexts=contexts
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
async def clear_request_handlers(self) -> None:
|
|
69
|
+
await self.sync_to_trio(sync_function=self._clear_request_handlers_impl)()
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def from_legacy(
|
|
73
|
+
cls,
|
|
74
|
+
legacy_object: NETWORK_TYPEHINT,
|
|
75
|
+
lock: trio.Lock,
|
|
76
|
+
limiter: trio.CapacityLimiter,
|
|
77
|
+
) -> Self:
|
|
78
|
+
"""
|
|
79
|
+
Creates an instance from a legacy Selenium Network object.
|
|
80
|
+
|
|
81
|
+
This factory method is used to wrap an existing Selenium Network
|
|
82
|
+
instance into the new interface.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
legacy_object (NETWORK_TYPEHINT): The legacy Selenium Network instance or its wrapper.
|
|
86
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
87
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
Self: A new instance of a class implementing Network.
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
legacy_network_obj = get_legacy_instance(instance=legacy_object)
|
|
94
|
+
|
|
95
|
+
if not isinstance(legacy_network_obj, legacyNetwork):
|
|
96
|
+
raise CannotConvertTypeError(from_=legacyNetwork, to_=legacy_object)
|
|
97
|
+
|
|
98
|
+
return cls(selenium_network=legacy_network_obj, lock=lock, limiter=limiter)
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def legacy(self) -> legacyNetwork:
|
|
102
|
+
return self._legacy_impl
|
|
103
|
+
|
|
104
|
+
async def remove_auth_handler(self, callback_id: int) -> None:
|
|
105
|
+
await self.sync_to_trio(sync_function=self._remove_auth_handler_impl)(callback_id=callback_id)
|
|
106
|
+
|
|
107
|
+
async def remove_request_handler(self, event: str, callback_id: int) -> None:
|
|
108
|
+
await self.sync_to_trio(sync_function=self._remove_request_handler_impl)(event=event, callback_id=callback_id)
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from osn_selenium.base_mixin import TrioThreadMixin
|
|
3
|
+
from typing import (
|
|
4
|
+
Any,
|
|
5
|
+
Dict,
|
|
6
|
+
Optional,
|
|
7
|
+
Self,
|
|
8
|
+
Union
|
|
9
|
+
)
|
|
10
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
11
|
+
from osn_selenium.instances._typehints import PERMISSIONS_TYPEHINT
|
|
12
|
+
from osn_selenium.exceptions.instance import (
|
|
13
|
+
CannotConvertTypeError
|
|
14
|
+
)
|
|
15
|
+
from osn_selenium.instances.unified.permissions import UnifiedPermissions
|
|
16
|
+
from osn_selenium.abstract.instances.permissions import AbstractPermissions
|
|
17
|
+
from selenium.webdriver.common.bidi.permissions import (
|
|
18
|
+
PermissionDescriptor,
|
|
19
|
+
Permissions as legacyPermissions
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
__all__ = ["Permissions"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class Permissions(UnifiedPermissions, TrioThreadMixin, AbstractPermissions):
|
|
27
|
+
"""
|
|
28
|
+
Wrapper for the legacy Selenium Permissions instance.
|
|
29
|
+
|
|
30
|
+
Provides methods to set and modify browser permissions (e.g., camera, microphone, geolocation)
|
|
31
|
+
via the WebDriver BiDi protocol.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
selenium_permissions: legacyPermissions,
|
|
37
|
+
lock: trio.Lock,
|
|
38
|
+
limiter: trio.CapacityLimiter,
|
|
39
|
+
) -> None:
|
|
40
|
+
"""
|
|
41
|
+
Initializes the Permissions wrapper.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
selenium_permissions (legacyPermissions): The legacy Selenium Permissions instance to wrap.
|
|
45
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
46
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
UnifiedPermissions.__init__(self, selenium_permissions=selenium_permissions)
|
|
50
|
+
|
|
51
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def from_legacy(
|
|
55
|
+
cls,
|
|
56
|
+
legacy_object: PERMISSIONS_TYPEHINT,
|
|
57
|
+
lock: trio.Lock,
|
|
58
|
+
limiter: trio.CapacityLimiter,
|
|
59
|
+
) -> Self:
|
|
60
|
+
"""
|
|
61
|
+
Creates an instance from a legacy Selenium Permissions object.
|
|
62
|
+
|
|
63
|
+
This factory method is used to wrap an existing Selenium Permissions
|
|
64
|
+
instance into the new interface.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
legacy_object (PERMISSIONS_TYPEHINT): The legacy Selenium Permissions 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 Permissions.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
legacy_permissions_obj = get_legacy_instance(instance=legacy_object)
|
|
76
|
+
|
|
77
|
+
if not isinstance(legacy_permissions_obj, legacyPermissions):
|
|
78
|
+
raise CannotConvertTypeError(from_=legacyPermissions, to_=legacy_object)
|
|
79
|
+
|
|
80
|
+
return cls(
|
|
81
|
+
selenium_permissions=legacy_permissions_obj,
|
|
82
|
+
lock=lock,
|
|
83
|
+
limiter=limiter
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def legacy(self) -> legacyPermissions:
|
|
88
|
+
return self._legacy_impl
|
|
89
|
+
|
|
90
|
+
async def set_permission(
|
|
91
|
+
self,
|
|
92
|
+
descriptor: Union[Dict[str, Any], PermissionDescriptor],
|
|
93
|
+
state: str,
|
|
94
|
+
origin: str,
|
|
95
|
+
user_context: Optional[str] = None,
|
|
96
|
+
) -> None:
|
|
97
|
+
await self.sync_to_trio(sync_function=self._set_permission_impl)(
|
|
98
|
+
descriptor=descriptor,
|
|
99
|
+
state=state,
|
|
100
|
+
origin=origin,
|
|
101
|
+
user_context=user_context
|
|
102
|
+
)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import Any, Callable, Self
|
|
3
|
+
from osn_selenium.base_mixin import TrioThreadMixin
|
|
4
|
+
from osn_selenium.instances._typehints import SCRIPT_TYPEHINT
|
|
5
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
6
|
+
from osn_selenium.instances.unified.script import UnifiedScript
|
|
7
|
+
from osn_selenium.abstract.instances.script import AbstractScript
|
|
8
|
+
from osn_selenium.exceptions.instance import (
|
|
9
|
+
CannotConvertTypeError
|
|
10
|
+
)
|
|
11
|
+
from selenium.webdriver.common.bidi.script import (
|
|
12
|
+
Script as legacyScript
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
__all__ = ["Script"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class Script(UnifiedScript, TrioThreadMixin, AbstractScript):
|
|
20
|
+
"""
|
|
21
|
+
Wrapper for the legacy Selenium BiDi Script instance.
|
|
22
|
+
|
|
23
|
+
Facilitates execution of JavaScript within specific contexts, adding preload scripts,
|
|
24
|
+
and handling console messages or JS errors.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(
|
|
28
|
+
self,
|
|
29
|
+
selenium_script: legacyScript,
|
|
30
|
+
lock: trio.Lock,
|
|
31
|
+
limiter: trio.CapacityLimiter,
|
|
32
|
+
) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Initializes the Script wrapper.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
selenium_script (legacyScript): The legacy Selenium Script instance to wrap.
|
|
38
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
39
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
UnifiedScript.__init__(self, selenium_script=selenium_script)
|
|
43
|
+
|
|
44
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
45
|
+
|
|
46
|
+
async def add_console_message_handler(self, handler: Callable[[Any], None]) -> int:
|
|
47
|
+
return await self.sync_to_trio(sync_function=self._add_console_message_handler_impl)(handler=handler)
|
|
48
|
+
|
|
49
|
+
async def add_javascript_error_handler(self, handler: Callable[[Any], None]) -> int:
|
|
50
|
+
return await self.sync_to_trio(sync_function=self._add_javascript_error_handler_impl)(handler=handler)
|
|
51
|
+
|
|
52
|
+
async def execute(self, script: str, *args: Any) -> Any:
|
|
53
|
+
return await self.sync_to_trio(sync_function=self._execute_impl)(script, *args)
|
|
54
|
+
|
|
55
|
+
@classmethod
|
|
56
|
+
def from_legacy(
|
|
57
|
+
cls,
|
|
58
|
+
legacy_object: SCRIPT_TYPEHINT,
|
|
59
|
+
lock: trio.Lock,
|
|
60
|
+
limiter: trio.CapacityLimiter,
|
|
61
|
+
) -> Self:
|
|
62
|
+
"""
|
|
63
|
+
Creates an instance from a legacy Selenium Script object.
|
|
64
|
+
|
|
65
|
+
This factory method is used to wrap an existing Selenium Script
|
|
66
|
+
instance into the new interface.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
legacy_object (SCRIPT_TYPEHINT): The legacy Selenium Script instance or its wrapper.
|
|
70
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
71
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
Self: A new instance of a class implementing Script.
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
legacy_script_obj = get_legacy_instance(instance=legacy_object)
|
|
78
|
+
|
|
79
|
+
if not isinstance(legacy_script_obj, legacyScript):
|
|
80
|
+
raise CannotConvertTypeError(from_=legacyScript, to_=legacy_object)
|
|
81
|
+
|
|
82
|
+
return cls(selenium_script=legacy_script_obj, lock=lock, limiter=limiter)
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
def legacy(self) -> legacyScript:
|
|
86
|
+
return self._legacy_impl
|
|
87
|
+
|
|
88
|
+
async def pin(self, script: str) -> str:
|
|
89
|
+
return await self.sync_to_trio(sync_function=self._pin_impl)(script=script)
|
|
90
|
+
|
|
91
|
+
async def remove_console_message_handler(self, id: int) -> None:
|
|
92
|
+
await self.sync_to_trio(sync_function=self._remove_console_message_handler_impl)(id=id)
|
|
93
|
+
|
|
94
|
+
async def unpin(self, script_id: str) -> None:
|
|
95
|
+
await self.sync_to_trio(sync_function=self._unpin_impl)(script_id=script_id)
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from selenium.webdriver.common.by import By
|
|
3
|
+
from osn_selenium.base_mixin import TrioThreadMixin
|
|
4
|
+
from typing import (
|
|
5
|
+
List,
|
|
6
|
+
Optional,
|
|
7
|
+
Self,
|
|
8
|
+
TYPE_CHECKING
|
|
9
|
+
)
|
|
10
|
+
from osn_selenium.instances._typehints import SHADOW_ROOT_TYPEHINT
|
|
11
|
+
from osn_selenium.exceptions.instance import (
|
|
12
|
+
CannotConvertTypeError
|
|
13
|
+
)
|
|
14
|
+
from osn_selenium.instances.unified.shadow_root import UnifiedShadowRoot
|
|
15
|
+
from osn_selenium.abstract.instances.shadow_root import AbstractShadowRoot
|
|
16
|
+
from selenium.webdriver.remote.shadowroot import (
|
|
17
|
+
ShadowRoot as legacyShadowRoot
|
|
18
|
+
)
|
|
19
|
+
from osn_selenium.instances.convert import (
|
|
20
|
+
get_legacy_instance,
|
|
21
|
+
get_trio_thread_instance_wrapper
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
__all__ = ["ShadowRoot"]
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from osn_selenium.instances.trio_threads.web_element import WebElement
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ShadowRoot(UnifiedShadowRoot, TrioThreadMixin, AbstractShadowRoot):
|
|
32
|
+
"""
|
|
33
|
+
Wrapper for the legacy Selenium ShadowRoot instance.
|
|
34
|
+
|
|
35
|
+
Represents the root of a Shadow DOM tree, allowing element search
|
|
36
|
+
within the encapsulated shadow scope.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(
|
|
40
|
+
self,
|
|
41
|
+
selenium_shadow_root: legacyShadowRoot,
|
|
42
|
+
lock: trio.Lock,
|
|
43
|
+
limiter: trio.CapacityLimiter,
|
|
44
|
+
) -> None:
|
|
45
|
+
"""
|
|
46
|
+
Initializes the ShadowRoot wrapper.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
selenium_shadow_root (legacyShadowRoot): The legacy Selenium ShadowRoot instance to wrap.
|
|
50
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
51
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
UnifiedShadowRoot.__init__(self, selenium_shadow_root=selenium_shadow_root)
|
|
55
|
+
|
|
56
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
57
|
+
|
|
58
|
+
async def find_element(self, by: str = By.ID, value: Optional[str] = None) -> "WebElement":
|
|
59
|
+
legacy_element = await self.sync_to_trio(sync_function=self._find_element_impl)(by=by, value=value)
|
|
60
|
+
|
|
61
|
+
from osn_selenium.instances.trio_threads.web_element import WebElement
|
|
62
|
+
|
|
63
|
+
return get_trio_thread_instance_wrapper(
|
|
64
|
+
wrapper_class=WebElement,
|
|
65
|
+
legacy_object=legacy_element,
|
|
66
|
+
lock=self._lock,
|
|
67
|
+
limiter=self._capacity_limiter
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
async def find_elements(self, by: str = By.ID, value: Optional[str] = None) -> List["WebElement"]:
|
|
71
|
+
legacy_elements = await self.sync_to_trio(sync_function=self._find_elements_impl)(by=by, value=value)
|
|
72
|
+
|
|
73
|
+
from osn_selenium.instances.trio_threads.web_element import WebElement
|
|
74
|
+
|
|
75
|
+
return [
|
|
76
|
+
get_trio_thread_instance_wrapper(
|
|
77
|
+
wrapper_class=WebElement,
|
|
78
|
+
legacy_object=legacy_element,
|
|
79
|
+
lock=self._lock,
|
|
80
|
+
limiter=self._capacity_limiter
|
|
81
|
+
)
|
|
82
|
+
for legacy_element in legacy_elements
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def from_legacy(
|
|
87
|
+
cls,
|
|
88
|
+
legacy_object: SHADOW_ROOT_TYPEHINT,
|
|
89
|
+
lock: trio.Lock,
|
|
90
|
+
limiter: trio.CapacityLimiter,
|
|
91
|
+
) -> Self:
|
|
92
|
+
"""
|
|
93
|
+
Creates an instance from a legacy Selenium ShadowRoot object.
|
|
94
|
+
|
|
95
|
+
This factory method is used to wrap an existing Selenium ShadowRoot
|
|
96
|
+
instance into the new interface.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
legacy_object (SHADOW_ROOT_TYPEHINT): The legacy Selenium ShadowRoot instance or its wrapper.
|
|
100
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
101
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
Self: A new instance of a class implementing ShadowRoot.
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
legacy_shadow_root_obj = get_legacy_instance(instance=legacy_object)
|
|
108
|
+
|
|
109
|
+
if not isinstance(legacy_shadow_root_obj, legacyShadowRoot):
|
|
110
|
+
raise CannotConvertTypeError(from_=legacyShadowRoot, to_=legacy_object)
|
|
111
|
+
|
|
112
|
+
return cls(
|
|
113
|
+
selenium_shadow_root=legacy_shadow_root_obj,
|
|
114
|
+
lock=lock,
|
|
115
|
+
limiter=limiter
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
async def id(self) -> str:
|
|
119
|
+
return await self.sync_to_trio(sync_function=self._id_impl)()
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def legacy(self) -> legacyShadowRoot:
|
|
123
|
+
return self._legacy_impl
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import (
|
|
3
|
+
Optional,
|
|
4
|
+
Self,
|
|
5
|
+
Union
|
|
6
|
+
)
|
|
7
|
+
from osn_selenium.base_mixin import TrioThreadMixin
|
|
8
|
+
from osn_selenium.instances._typehints import STORAGE_TYPEHINT
|
|
9
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
10
|
+
from osn_selenium.instances.unified.storage import UnifiedStorage
|
|
11
|
+
from osn_selenium.abstract.instances.storage import AbstractStorage
|
|
12
|
+
from osn_selenium.exceptions.instance import (
|
|
13
|
+
CannotConvertTypeError
|
|
14
|
+
)
|
|
15
|
+
from selenium.webdriver.common.bidi.storage import (
|
|
16
|
+
BrowsingContextPartitionDescriptor,
|
|
17
|
+
CookieFilter,
|
|
18
|
+
DeleteCookiesResult,
|
|
19
|
+
GetCookiesResult,
|
|
20
|
+
PartialCookie,
|
|
21
|
+
SetCookieResult,
|
|
22
|
+
Storage as legacyStorage,
|
|
23
|
+
StorageKeyPartitionDescriptor
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
__all__ = ["Storage"]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class Storage(UnifiedStorage, TrioThreadMixin, AbstractStorage):
|
|
31
|
+
"""
|
|
32
|
+
Wrapper for the legacy Selenium BiDi Storage instance.
|
|
33
|
+
|
|
34
|
+
Manages browser storage mechanisms, primarily focusing on getting, setting,
|
|
35
|
+
and deleting cookies with specific filters and partition descriptors.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
selenium_storage: legacyStorage,
|
|
41
|
+
lock: trio.Lock,
|
|
42
|
+
limiter: trio.CapacityLimiter,
|
|
43
|
+
) -> None:
|
|
44
|
+
"""
|
|
45
|
+
Initializes the Storage wrapper.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
selenium_storage (legacyStorage): The legacy Selenium Storage instance to wrap.
|
|
49
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
50
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
UnifiedStorage.__init__(self, selenium_storage=selenium_storage)
|
|
54
|
+
|
|
55
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
56
|
+
|
|
57
|
+
async def delete_cookies(
|
|
58
|
+
self,
|
|
59
|
+
filter: Optional[CookieFilter] = None,
|
|
60
|
+
partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
|
|
61
|
+
) -> DeleteCookiesResult:
|
|
62
|
+
return await self.sync_to_trio(sync_function=self._delete_cookies_impl)(filter=filter, partition=partition)
|
|
63
|
+
|
|
64
|
+
@classmethod
|
|
65
|
+
def from_legacy(
|
|
66
|
+
cls,
|
|
67
|
+
legacy_object: STORAGE_TYPEHINT,
|
|
68
|
+
lock: trio.Lock,
|
|
69
|
+
limiter: trio.CapacityLimiter,
|
|
70
|
+
) -> Self:
|
|
71
|
+
"""
|
|
72
|
+
Creates an instance from a legacy Selenium Storage object.
|
|
73
|
+
|
|
74
|
+
This factory method is used to wrap an existing Selenium Storage
|
|
75
|
+
instance into the new interface.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
legacy_object (STORAGE_TYPEHINT): The legacy Selenium Storage instance or its wrapper.
|
|
79
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
80
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
Self: A new instance of a class implementing Storage.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
legacy_storage_obj = get_legacy_instance(instance=legacy_object)
|
|
87
|
+
|
|
88
|
+
if not isinstance(legacy_storage_obj, legacyStorage):
|
|
89
|
+
raise CannotConvertTypeError(from_=legacyStorage, to_=legacy_object)
|
|
90
|
+
|
|
91
|
+
return cls(selenium_storage=legacy_storage_obj, lock=lock, limiter=limiter)
|
|
92
|
+
|
|
93
|
+
async def get_cookies(
|
|
94
|
+
self,
|
|
95
|
+
filter: Optional[CookieFilter] = None,
|
|
96
|
+
partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
|
|
97
|
+
) -> GetCookiesResult:
|
|
98
|
+
return await self.sync_to_trio(sync_function=self._get_cookies_impl)(filter=filter, partition=partition)
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def legacy(self) -> legacyStorage:
|
|
102
|
+
return self._legacy_impl
|
|
103
|
+
|
|
104
|
+
async def set_cookie(
|
|
105
|
+
self,
|
|
106
|
+
cookie: PartialCookie,
|
|
107
|
+
partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
|
|
108
|
+
) -> SetCookieResult:
|
|
109
|
+
return await self.sync_to_trio(sync_function=self._set_cookie_impl)(cookie=cookie, partition=partition)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import (
|
|
3
|
+
Optional,
|
|
4
|
+
Self,
|
|
5
|
+
Union
|
|
6
|
+
)
|
|
7
|
+
from osn_selenium.base_mixin import TrioThreadMixin
|
|
8
|
+
from osn_selenium.instances.trio_threads.alert import Alert
|
|
9
|
+
from osn_selenium.instances.unified.switch_to import UnifiedSwitchTo
|
|
10
|
+
from osn_selenium.abstract.instances.switch_to import AbstractSwitchTo
|
|
11
|
+
from osn_selenium.instances.trio_threads.web_element import WebElement
|
|
12
|
+
from osn_selenium.exceptions.instance import (
|
|
13
|
+
CannotConvertTypeError
|
|
14
|
+
)
|
|
15
|
+
from selenium.webdriver.remote.switch_to import (
|
|
16
|
+
SwitchTo as legacySwitchTo
|
|
17
|
+
)
|
|
18
|
+
from osn_selenium.instances._typehints import (
|
|
19
|
+
SWITCH_TO_TYPEHINT,
|
|
20
|
+
WEB_ELEMENT_TYPEHINT
|
|
21
|
+
)
|
|
22
|
+
from osn_selenium.instances.convert import (
|
|
23
|
+
get_legacy_instance,
|
|
24
|
+
get_trio_thread_instance_wrapper
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
__all__ = ["SwitchTo"]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class SwitchTo(UnifiedSwitchTo, TrioThreadMixin, AbstractSwitchTo):
|
|
32
|
+
"""
|
|
33
|
+
Wrapper for the legacy Selenium SwitchTo instance.
|
|
34
|
+
|
|
35
|
+
Provides mechanisms to change the driver's focus to different frames,
|
|
36
|
+
windows, or alerts.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(
|
|
40
|
+
self,
|
|
41
|
+
selenium_switch_to: legacySwitchTo,
|
|
42
|
+
lock: trio.Lock,
|
|
43
|
+
limiter: trio.CapacityLimiter,
|
|
44
|
+
) -> None:
|
|
45
|
+
"""
|
|
46
|
+
Initializes the SwitchTo wrapper.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
selenium_switch_to (legacySwitchTo): The legacy Selenium SwitchTo instance to wrap.
|
|
50
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
51
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
UnifiedSwitchTo.__init__(self, selenium_switch_to=selenium_switch_to)
|
|
55
|
+
|
|
56
|
+
TrioThreadMixin.__init__(self, lock=lock, limiter=limiter)
|
|
57
|
+
|
|
58
|
+
async def active_element(self) -> WebElement:
|
|
59
|
+
legacy_element = await self.sync_to_trio(sync_function=self._active_element_impl)()
|
|
60
|
+
|
|
61
|
+
return get_trio_thread_instance_wrapper(
|
|
62
|
+
wrapper_class=WebElement,
|
|
63
|
+
legacy_object=legacy_element,
|
|
64
|
+
lock=self._lock,
|
|
65
|
+
limiter=self._capacity_limiter,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
async def alert(self) -> Alert:
|
|
69
|
+
legacy_alert_instance = await self.sync_to_trio(sync_function=self._alert_impl)()
|
|
70
|
+
|
|
71
|
+
return get_trio_thread_instance_wrapper(
|
|
72
|
+
wrapper_class=Alert,
|
|
73
|
+
legacy_object=legacy_alert_instance,
|
|
74
|
+
lock=self._lock,
|
|
75
|
+
limiter=self._capacity_limiter,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
async def default_content(self) -> None:
|
|
79
|
+
await self.sync_to_trio(sync_function=self._default_content_impl)()
|
|
80
|
+
|
|
81
|
+
async def frame(self, frame_reference: Union[str, int, WEB_ELEMENT_TYPEHINT]) -> None:
|
|
82
|
+
await self.sync_to_trio(sync_function=self._frame_impl)(frame_reference=frame_reference)
|
|
83
|
+
|
|
84
|
+
@classmethod
|
|
85
|
+
def from_legacy(
|
|
86
|
+
cls,
|
|
87
|
+
legacy_object: SWITCH_TO_TYPEHINT,
|
|
88
|
+
lock: trio.Lock,
|
|
89
|
+
limiter: trio.CapacityLimiter,
|
|
90
|
+
) -> Self:
|
|
91
|
+
"""
|
|
92
|
+
Creates an instance from a legacy Selenium SwitchTo object.
|
|
93
|
+
|
|
94
|
+
This factory method is used to wrap an existing Selenium SwitchTo
|
|
95
|
+
instance into the new interface.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
legacy_object (SWITCH_TO_TYPEHINT): The legacy Selenium SwitchTo instance or its wrapper.
|
|
99
|
+
lock (trio.Lock): A Trio lock for managing concurrent access.
|
|
100
|
+
limiter (trio.CapacityLimiter): A Trio capacity limiter for rate limiting.
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
Self: A new instance of a class implementing SwitchTo.
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
legacy_switch_to_obj = get_legacy_instance(instance=legacy_object)
|
|
107
|
+
|
|
108
|
+
if not isinstance(legacy_switch_to_obj, legacySwitchTo):
|
|
109
|
+
raise CannotConvertTypeError(from_=legacySwitchTo, to_=legacy_object)
|
|
110
|
+
|
|
111
|
+
return cls(selenium_switch_to=legacy_switch_to_obj, lock=lock, limiter=limiter)
|
|
112
|
+
|
|
113
|
+
@property
|
|
114
|
+
def legacy(self) -> legacySwitchTo:
|
|
115
|
+
return self._legacy_impl
|
|
116
|
+
|
|
117
|
+
async def new_window(self, type_hint: Optional[str] = None) -> None:
|
|
118
|
+
await self.sync_to_trio(sync_function=self._new_window_impl)(type_hint=type_hint)
|
|
119
|
+
|
|
120
|
+
async def parent_frame(self) -> None:
|
|
121
|
+
await self.sync_to_trio(sync_function=self._parent_frame_impl)()
|
|
122
|
+
|
|
123
|
+
async def window(self, window_name: str) -> None:
|
|
124
|
+
await self.sync_to_trio(sync_function=self._window_impl)(window_name=window_name)
|