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,181 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import Any, Callable, Dict
|
|
3
|
+
from osn_selenium.instances.protocols import AnyInstanceWrapper
|
|
4
|
+
from osn_selenium.exceptions.protocol import (
|
|
5
|
+
ProtocolComplianceError
|
|
6
|
+
)
|
|
7
|
+
from osn_selenium.webdrivers._typehints import (
|
|
8
|
+
ANY_WEBDRIVER_PROTOCOL_TYPEHINT
|
|
9
|
+
)
|
|
10
|
+
from osn_selenium.instances.sync.web_element import (
|
|
11
|
+
WebElement as SyncWebElement
|
|
12
|
+
)
|
|
13
|
+
from selenium.webdriver.remote.webelement import (
|
|
14
|
+
WebElement as SeleniumWebElement
|
|
15
|
+
)
|
|
16
|
+
from osn_selenium.webdrivers.protocols import (
|
|
17
|
+
SyncWebDriver,
|
|
18
|
+
TrioThreadWebDriver
|
|
19
|
+
)
|
|
20
|
+
from osn_selenium.instances.trio_threads.web_element import (
|
|
21
|
+
WebElement as TrioThreadWebElement
|
|
22
|
+
)
|
|
23
|
+
from osn_selenium.instances.convert import (
|
|
24
|
+
get_sync_instance_wrapper,
|
|
25
|
+
get_trio_thread_instance_wrapper
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
__all__ = [
|
|
30
|
+
"build_cdp_kwargs",
|
|
31
|
+
"get_wrap_args_function",
|
|
32
|
+
"unwrap_args",
|
|
33
|
+
"wrap_sync_args",
|
|
34
|
+
"wrap_trio_thread_args"
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def unwrap_args(args: Any) -> Any:
|
|
39
|
+
"""
|
|
40
|
+
Recursively unwraps objects by extracting the legacy Selenium object from wrappers.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
args (Any): Data structure containing potential instance wrappers.
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
Any: Data structure with raw Selenium objects.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
if isinstance(args, list):
|
|
50
|
+
return [unwrap_args(arg) for arg in args]
|
|
51
|
+
|
|
52
|
+
if isinstance(args, set):
|
|
53
|
+
return {unwrap_args(arg) for arg in args}
|
|
54
|
+
|
|
55
|
+
if isinstance(args, tuple):
|
|
56
|
+
return (unwrap_args(arg) for arg in args)
|
|
57
|
+
|
|
58
|
+
if isinstance(args, dict):
|
|
59
|
+
return {unwrap_args(key): unwrap_args(value) for key, value in args.items()}
|
|
60
|
+
|
|
61
|
+
if isinstance(args, AnyInstanceWrapper):
|
|
62
|
+
return args.legacy
|
|
63
|
+
|
|
64
|
+
return args
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def wrap_trio_thread_args(args: Any, lock: trio.Lock, limiter: trio.CapacityLimiter) -> Any:
|
|
68
|
+
"""
|
|
69
|
+
Recursively wraps Selenium WebElements into TrioThreadWebElement instances.
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
args (Any): Data structure containing potential Selenium WebElements.
|
|
73
|
+
lock (trio.Lock): Trio lock for synchronization.
|
|
74
|
+
limiter (trio.CapacityLimiter): Trio capacity limiter.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Any: Data structure with wrapped elements.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
if isinstance(args, list):
|
|
81
|
+
return [wrap_trio_thread_args(arg, lock=lock, limiter=limiter) for arg in args]
|
|
82
|
+
|
|
83
|
+
if isinstance(args, set):
|
|
84
|
+
return {wrap_trio_thread_args(arg, lock=lock, limiter=limiter) for arg in args}
|
|
85
|
+
|
|
86
|
+
if isinstance(args, tuple):
|
|
87
|
+
return (wrap_trio_thread_args(arg, lock=lock, limiter=limiter) for arg in args)
|
|
88
|
+
|
|
89
|
+
if isinstance(args, dict):
|
|
90
|
+
return {
|
|
91
|
+
wrap_trio_thread_args(key, lock=lock, limiter=limiter): wrap_trio_thread_args(value, lock=lock, limiter=limiter)
|
|
92
|
+
for key, value in args.items()
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if isinstance(args, SeleniumWebElement):
|
|
96
|
+
return get_trio_thread_instance_wrapper(
|
|
97
|
+
wrapper_class=TrioThreadWebElement,
|
|
98
|
+
legacy_object=args,
|
|
99
|
+
lock=lock,
|
|
100
|
+
limiter=limiter,
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
return args
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def wrap_sync_args(args: Any) -> Any:
|
|
107
|
+
"""
|
|
108
|
+
Recursively wraps Selenium WebElements into SyncWebElement instances.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
args (Any): Data structure containing potential Selenium WebElements.
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
Any: Data structure with wrapped elements.
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
if isinstance(args, list):
|
|
118
|
+
return [wrap_sync_args(arg) for arg in args]
|
|
119
|
+
|
|
120
|
+
if isinstance(args, set):
|
|
121
|
+
return {wrap_sync_args(arg) for arg in args}
|
|
122
|
+
|
|
123
|
+
if isinstance(args, tuple):
|
|
124
|
+
return (wrap_sync_args(arg) for arg in args)
|
|
125
|
+
|
|
126
|
+
if isinstance(args, dict):
|
|
127
|
+
return {wrap_sync_args(key): wrap_sync_args(value) for key, value in args.items()}
|
|
128
|
+
|
|
129
|
+
if isinstance(args, SeleniumWebElement):
|
|
130
|
+
return get_sync_instance_wrapper(wrapper_class=SyncWebElement, legacy_object=args)
|
|
131
|
+
|
|
132
|
+
return args
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def get_wrap_args_function(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[[Any], Any]:
|
|
136
|
+
"""
|
|
137
|
+
Determines the appropriate argument wrapping function based on the driver's architecture.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
driver (ANY_WEBDRIVER_PROTOCOL): The driver instance.
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
Callable[[Any], Any]: A function to wrap elements.
|
|
144
|
+
|
|
145
|
+
Raises:
|
|
146
|
+
ExpectedTypeError: If the driver instance type is not supported.
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
if isinstance(driver, SyncWebDriver) and driver._architecture_impl == "sync":
|
|
150
|
+
def wrapper(args: Any) -> Any:
|
|
151
|
+
return wrap_sync_args(args)
|
|
152
|
+
|
|
153
|
+
return wrapper
|
|
154
|
+
|
|
155
|
+
if isinstance(driver, TrioThreadWebDriver) and driver._architecture_impl == "trio_threads":
|
|
156
|
+
def wrapper(args: Any) -> Any:
|
|
157
|
+
return wrap_trio_thread_args(args, lock=driver.lock, limiter=driver.capacity_limiter)
|
|
158
|
+
|
|
159
|
+
return wrapper
|
|
160
|
+
|
|
161
|
+
raise ProtocolComplianceError(instance=driver, expected_protocols=(SyncWebDriver, TrioThreadWebDriver))
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def build_cdp_kwargs(**kwargs: Any) -> Dict[str, Any]:
|
|
165
|
+
"""
|
|
166
|
+
Builds a dictionary of keyword arguments for a CDP command, excluding None values.
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
**kwargs (Any): Keyword arguments to filter.
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
Dict[str, Any]: A dictionary containing only the non-None keyword arguments.
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
dict_ = {}
|
|
176
|
+
|
|
177
|
+
for key, value in kwargs.items():
|
|
178
|
+
if value is not None:
|
|
179
|
+
dict_[key] = value
|
|
180
|
+
|
|
181
|
+
return dict_
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from typing import Any, Callable, Dict
|
|
2
|
+
from osn_selenium.webdrivers._typehints import (
|
|
3
|
+
ANY_WEBDRIVER_PROTOCOL_TYPEHINT
|
|
4
|
+
)
|
|
5
|
+
from osn_selenium.webdrivers._args_helpers import (
|
|
6
|
+
get_wrap_args_function,
|
|
7
|
+
unwrap_args
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
__all__ = ["get_cdp_executor_bridge", "get_js_executor_bridge"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_js_executor_bridge(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[[str, Any], Any]:
|
|
15
|
+
"""
|
|
16
|
+
Creates a bridge function for executing JavaScript in the browser.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
driver (ANY_WEBDRIVER_PROTOCOL): The driver instance.
|
|
20
|
+
|
|
21
|
+
Returns:
|
|
22
|
+
Callable[[str, Any], Any]: A wrapper for execute_script.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def wrapper(script: str, *args: Any) -> Any:
|
|
26
|
+
args = unwrap_args(args)
|
|
27
|
+
|
|
28
|
+
result = driver._driver_impl.execute_script(script, *args)
|
|
29
|
+
|
|
30
|
+
return wrapper_function(result)
|
|
31
|
+
|
|
32
|
+
wrapper_function = get_wrap_args_function(driver=driver)
|
|
33
|
+
|
|
34
|
+
return wrapper
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def get_cdp_executor_bridge(driver: ANY_WEBDRIVER_PROTOCOL_TYPEHINT) -> Callable[[str, Dict[str, Any]], Any]:
|
|
38
|
+
"""
|
|
39
|
+
Creates a bridge function for executing CDP commands in the browser.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
driver (ANY_WEBDRIVER_PROTOCOL): The driver instance.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
Callable[[str, Dict[str, Any]], Any]: A wrapper for execute_cdp_cmd.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
def wrapper(cmd: str, cmd_args: Dict[str, Any]) -> Any:
|
|
49
|
+
cmd_args = unwrap_args(cmd_args)
|
|
50
|
+
|
|
51
|
+
result = driver._driver_impl.execute_cdp_cmd(cmd, cmd_args)
|
|
52
|
+
|
|
53
|
+
return wrapper_function(result)
|
|
54
|
+
|
|
55
|
+
wrapper_function = get_wrap_args_function(driver=driver)
|
|
56
|
+
|
|
57
|
+
return wrapper
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import inspect
|
|
2
|
+
import functools
|
|
3
|
+
from typing import (
|
|
4
|
+
Any,
|
|
5
|
+
Callable,
|
|
6
|
+
ParamSpec,
|
|
7
|
+
TypeVar
|
|
8
|
+
)
|
|
9
|
+
from osn_selenium.exceptions.instance import NotExpectedTypeError
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
__all__ = ["requires_driver"]
|
|
13
|
+
|
|
14
|
+
_METHOD_INPUT = ParamSpec("_METHOD_INPUT")
|
|
15
|
+
_METHOD_OUTPUT = TypeVar("_METHOD_OUTPUT")
|
|
16
|
+
_METHOD = TypeVar("_METHOD", bound=Callable[..., Any])
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def requires_driver(func: _METHOD) -> _METHOD:
|
|
20
|
+
"""
|
|
21
|
+
A decorator that ensures a '_ensure_driver' method is called before
|
|
22
|
+
executing the decorated method.
|
|
23
|
+
|
|
24
|
+
This decorator handles both synchronous and asynchronous methods,
|
|
25
|
+
calling '_ensure_driver' on the instance (self) before delegating
|
|
26
|
+
to the original method.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
func (_METHOD): The method to decorate.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
_METHOD: The wrapped synchronous or asynchronous method.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
@functools.wraps(func)
|
|
36
|
+
def sync_wrapper(
|
|
37
|
+
self: object,
|
|
38
|
+
*args: _METHOD_INPUT.args,
|
|
39
|
+
**kwargs: _METHOD_INPUT.kwargs
|
|
40
|
+
) -> _METHOD_OUTPUT:
|
|
41
|
+
"""
|
|
42
|
+
Synchronous wrapper for methods decorated with requires_driver.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
self (object): The instance on which the method is called.
|
|
46
|
+
*args (_METHOD_INPUT.args): Positional arguments for the wrapped method.
|
|
47
|
+
**kwargs (_METHOD_INPUT.kwargs): Keyword arguments for the wrapped method.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
_METHOD_OUTPUT: The result of the wrapped method.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
getattr(self, "_ensure_driver")()
|
|
54
|
+
return func(self, *args, **kwargs)
|
|
55
|
+
|
|
56
|
+
@functools.wraps(func)
|
|
57
|
+
async def async_wrapper(
|
|
58
|
+
self: object,
|
|
59
|
+
*args: _METHOD_INPUT.args,
|
|
60
|
+
**kwargs: _METHOD_INPUT.kwargs
|
|
61
|
+
) -> _METHOD_OUTPUT:
|
|
62
|
+
"""
|
|
63
|
+
Asynchronous wrapper for methods decorated with requires_driver.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
self (object): The instance on which the method is called.
|
|
67
|
+
*args (_METHOD_INPUT.args): Positional arguments for the wrapped method.
|
|
68
|
+
**kwargs (_METHOD_INPUT.kwargs): Keyword arguments for the wrapped method.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
_METHOD_OUTPUT: The result of the wrapped method.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
getattr(self, "_ensure_driver")()
|
|
75
|
+
return await func(self, *args, **kwargs)
|
|
76
|
+
|
|
77
|
+
if inspect.iscoroutinefunction(func):
|
|
78
|
+
return async_wrapper
|
|
79
|
+
|
|
80
|
+
if inspect.isfunction(func):
|
|
81
|
+
return sync_wrapper
|
|
82
|
+
|
|
83
|
+
raise NotExpectedTypeError(expected_type=["coroutine function", "function"], received_instance=func)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import re
|
|
2
|
+
import psutil
|
|
3
|
+
from typing import Iterator, Optional
|
|
4
|
+
from osn_selenium._functions import validate_path
|
|
5
|
+
from osn_selenium._typehints import PATH_TYPEHINT
|
|
6
|
+
from osn_system_utils.api._utils import LOCALHOST_IPS
|
|
7
|
+
from osn_selenium.webdrivers._executable_tables.models import ExecutablesTableRow
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"find_browser_previous_session",
|
|
12
|
+
"get_active_executables_table",
|
|
13
|
+
"get_found_profile_dir"
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_found_profile_dir(row: ExecutablesTableRow, profile_dir_command: str) -> Optional[str]:
|
|
18
|
+
"""
|
|
19
|
+
Extracts the profile directory path from the command line of a running process.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
row (ExecutablesTableRow): The data row containing the PID of the process.
|
|
23
|
+
profile_dir_command (str): The command line pattern to search for, using `{value}` as placeholder.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
Optional[str]: The extracted profile directory path if found, otherwise None.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
proc = psutil.Process(row.pid)
|
|
31
|
+
cmdline_args = proc.cmdline()
|
|
32
|
+
|
|
33
|
+
found_command_line = " ".join(cmdline_args)
|
|
34
|
+
pattern = profile_dir_command.format(value="(.*?)")
|
|
35
|
+
|
|
36
|
+
found_profile_dir = re.search(pattern=pattern, string=found_command_line)
|
|
37
|
+
|
|
38
|
+
if found_profile_dir is not None:
|
|
39
|
+
result = found_profile_dir.group(1)
|
|
40
|
+
|
|
41
|
+
return result
|
|
42
|
+
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
|
43
|
+
return None
|
|
44
|
+
|
|
45
|
+
return None
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def get_active_executables_table(browser_exe: PATH_TYPEHINT) -> Iterator[ExecutablesTableRow]:
|
|
49
|
+
"""
|
|
50
|
+
Iterates through active network connections to find processes matching the browser executable.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
browser_exe (PATH_TYPEHINT): Path or name of the browser executable.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Iterator[ExecutablesTableRow]: An iterator of matching process information rows.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
target_name = validate_path(path=browser_exe).name
|
|
60
|
+
|
|
61
|
+
for conn in psutil.net_connections(kind="inet"):
|
|
62
|
+
if (
|
|
63
|
+
conn.status != psutil.CONN_LISTEN
|
|
64
|
+
or not conn.laddr
|
|
65
|
+
or conn.laddr.ip not in LOCALHOST_IPS
|
|
66
|
+
or not conn.pid
|
|
67
|
+
):
|
|
68
|
+
continue
|
|
69
|
+
|
|
70
|
+
try:
|
|
71
|
+
process = psutil.Process(conn.pid)
|
|
72
|
+
process_name = process.name()
|
|
73
|
+
|
|
74
|
+
if process_name.lower() == target_name.lower():
|
|
75
|
+
yield ExecutablesTableRow(
|
|
76
|
+
executable=process_name,
|
|
77
|
+
address=f"{conn.laddr.ip}:{conn.laddr.port}",
|
|
78
|
+
pid=conn.pid,
|
|
79
|
+
)
|
|
80
|
+
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
|
81
|
+
continue
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def find_browser_previous_session(
|
|
85
|
+
browser_exe: PATH_TYPEHINT,
|
|
86
|
+
profile_dir_command: str,
|
|
87
|
+
profile_dir: Optional[str]
|
|
88
|
+
) -> Optional[int]:
|
|
89
|
+
"""
|
|
90
|
+
Finds the port number of a previously opened browser session, if it exists.
|
|
91
|
+
|
|
92
|
+
This function checks for an existing browser session by examining network connections.
|
|
93
|
+
It searches for listening connections associated with the given browser executable and profile directory.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
browser_exe (PATH_TYPEHINT): Path to the browser executable or just the executable name.
|
|
97
|
+
profile_dir_command (str): Command line pattern to find the profile directory argument.
|
|
98
|
+
Should use `{value}` as a placeholder for the directory path.
|
|
99
|
+
profile_dir (Optional[str]): The expected profile directory path to match against.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
Optional[int]: The port number of the previous session if found and matched, otherwise None.
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
ip_pattern = re.compile(r"127\.0\.0\.1:(\d+)")
|
|
106
|
+
|
|
107
|
+
for row in get_active_executables_table(browser_exe=browser_exe):
|
|
108
|
+
found_profile_dir = get_found_profile_dir(row=row, profile_dir_command=profile_dir_command)
|
|
109
|
+
|
|
110
|
+
if found_profile_dir == profile_dir:
|
|
111
|
+
return int(re.search(pattern=ip_pattern, string=row.address).group(1))
|
|
112
|
+
|
|
113
|
+
return None
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from osn_selenium.models import DictModel
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
__all__ = ["ExecutablesTableRow"]
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ExecutablesTableRow(DictModel):
|
|
8
|
+
"""
|
|
9
|
+
Represents a row in the executables table containing process information.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
executable (str): The name of the executable file.
|
|
13
|
+
address (str): The network address (IP:Port) the process is listening on.
|
|
14
|
+
pid (int): The process identifier.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
executable: str
|
|
18
|
+
address: str
|
|
19
|
+
pid: int
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from typing import (
|
|
3
|
+
Optional,
|
|
4
|
+
Protocol,
|
|
5
|
+
runtime_checkable
|
|
6
|
+
)
|
|
7
|
+
from selenium.webdriver.remote.webdriver import (
|
|
8
|
+
WebDriver as legacyWebDriver
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
__all__ = ["SyncWebDriver", "TrioThreadWebDriver"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@runtime_checkable
|
|
16
|
+
class TrioThreadWebDriver(Protocol):
|
|
17
|
+
"""
|
|
18
|
+
Protocol for a WebDriver that operates within a Trio thread pool.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def architecture(self) -> str:
|
|
23
|
+
...
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def capacity_limiter(self) -> trio.CapacityLimiter:
|
|
27
|
+
...
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def driver(self) -> Optional[legacyWebDriver]:
|
|
31
|
+
...
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def lock(self) -> trio.Lock:
|
|
35
|
+
...
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@runtime_checkable
|
|
39
|
+
class SyncWebDriver(Protocol):
|
|
40
|
+
"""
|
|
41
|
+
Protocol for a synchronous WebDriver.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def architecture(self) -> str:
|
|
46
|
+
...
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def driver(self) -> Optional[legacyWebDriver]:
|
|
50
|
+
...
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
from typing import Optional, Type
|
|
2
|
+
from osn_selenium.models import WindowRect
|
|
3
|
+
from osn_selenium._typehints import PATH_TYPEHINT
|
|
4
|
+
from osn_selenium.flags.blink import BlinkFlagsManager
|
|
5
|
+
from osn_selenium.flags.models.blink import BlinkFlags
|
|
6
|
+
from osn_selenium.webdrivers.sync.core import CoreWebDriver
|
|
7
|
+
from osn_selenium.webdrivers.sync.blink.base import BlinkBaseMixin
|
|
8
|
+
from osn_selenium.webdrivers.sync.blink.casting import BlinkCastingMixin
|
|
9
|
+
from osn_selenium.webdrivers.sync.blink.logging import BlinkLoggingMixin
|
|
10
|
+
from osn_selenium.webdrivers.sync.blink.network import BlinkNetworkMixin
|
|
11
|
+
from osn_selenium.webdrivers.sync.blink.features import BlinkFeaturesMixin
|
|
12
|
+
from osn_selenium.webdrivers.sync.blink.settings import BlinkSettingsMixin
|
|
13
|
+
from osn_selenium.webdrivers.sync.blink.lifecycle import BlinkLifecycleMixin
|
|
14
|
+
from osn_selenium.abstract.webdriver.blink import (
|
|
15
|
+
AbstractBlinkWebDriver
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
__all__ = ["BlinkWebDriver"]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class BlinkWebDriver(
|
|
23
|
+
BlinkBaseMixin,
|
|
24
|
+
BlinkCastingMixin,
|
|
25
|
+
BlinkFeaturesMixin,
|
|
26
|
+
BlinkLifecycleMixin,
|
|
27
|
+
BlinkLoggingMixin,
|
|
28
|
+
BlinkNetworkMixin,
|
|
29
|
+
BlinkSettingsMixin,
|
|
30
|
+
CoreWebDriver,
|
|
31
|
+
AbstractBlinkWebDriver
|
|
32
|
+
):
|
|
33
|
+
"""
|
|
34
|
+
Concrete Blink WebDriver implementation combining all functional mixins.
|
|
35
|
+
|
|
36
|
+
This class aggregates lifecycle management, element interaction, navigation,
|
|
37
|
+
and browser-specific features into a single usable driver instance.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(
|
|
41
|
+
self,
|
|
42
|
+
browser_exe: Optional[PATH_TYPEHINT],
|
|
43
|
+
browser_name_in_system: str,
|
|
44
|
+
webdriver_path: str,
|
|
45
|
+
use_browser_exe: bool = True,
|
|
46
|
+
flags_manager_type: Type[BlinkFlagsManager] = BlinkFlagsManager,
|
|
47
|
+
flags: Optional[BlinkFlags] = None,
|
|
48
|
+
start_page_url: str = "",
|
|
49
|
+
implicitly_wait: int = 5,
|
|
50
|
+
page_load_timeout: int = 5,
|
|
51
|
+
script_timeout: int = 5,
|
|
52
|
+
window_rect: Optional[WindowRect] = None,
|
|
53
|
+
):
|
|
54
|
+
"""
|
|
55
|
+
Initializes the BlinkWebDriver instance.
|
|
56
|
+
|
|
57
|
+
This constructor sets up the necessary components for controlling a Blink-based browser,
|
|
58
|
+
including paths, flag managers, timeouts, and integration with DevTools and Trio.
|
|
59
|
+
It also initializes properties related to console encoding and IP pattern matching
|
|
60
|
+
for managing browser processes.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
browser_exe (Optional[PATH_TYPEHINT]): The path to the browser executable
|
|
64
|
+
(e.g., `chrome.exe` or `msedge.exe`). If None, the browser executable will not be
|
|
65
|
+
managed directly by this class (e.g., for remote WebDriver connections where the
|
|
66
|
+
browser is already running).
|
|
67
|
+
browser_name_in_system (str): The common name of the browser executable in the system
|
|
68
|
+
(e.g., "Chrome", "Edge"). Used to auto-detect `browser_exe` if `use_browser_exe` is True.
|
|
69
|
+
webdriver_path (str): The file path to the WebDriver executable (e.g., `chromedriver.exe`).
|
|
70
|
+
use_browser_exe (bool): If True, the browser executable path will be
|
|
71
|
+
automatically determined based on `browser_name_in_system` if `browser_exe`
|
|
72
|
+
is not explicitly provided. If False, `browser_exe` must be None.
|
|
73
|
+
Defaults to True.
|
|
74
|
+
flags_manager_type (Type[BlinkFlagsManager]): The type of flags manager to use.
|
|
75
|
+
Defaults to `BlinkFlagsManager`, which is suitable for Chrome/Edge.
|
|
76
|
+
flags (Optional[BlinkFlags]): Initial browser flags or options
|
|
77
|
+
specific to Blink-based browsers. Can be a `BlinkFlags` object or a generic mapping.
|
|
78
|
+
Defaults to None.
|
|
79
|
+
start_page_url (str): The URL that the browser will attempt to navigate to
|
|
80
|
+
immediately after starting. Defaults to an empty string.
|
|
81
|
+
implicitly_wait (int): The default implicit wait time in seconds for element searches.
|
|
82
|
+
Defaults to 5.
|
|
83
|
+
page_load_timeout (int): The default page load timeout in seconds. Defaults to 5.
|
|
84
|
+
script_timeout (int): The default asynchronous script timeout in seconds. Defaults to 5.
|
|
85
|
+
window_rect (Optional[WindowRect]): The initial window size and position. If None,
|
|
86
|
+
the browser's default window size will be used. Defaults to None.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
CoreWebDriver.__init__(
|
|
90
|
+
self,
|
|
91
|
+
webdriver_path=webdriver_path,
|
|
92
|
+
flags_manager_type=flags_manager_type,
|
|
93
|
+
flags=flags,
|
|
94
|
+
implicitly_wait=implicitly_wait,
|
|
95
|
+
page_load_timeout=page_load_timeout,
|
|
96
|
+
script_timeout=script_timeout,
|
|
97
|
+
window_rect=window_rect,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
BlinkBaseMixin.__init__(
|
|
101
|
+
self,
|
|
102
|
+
browser_exe=browser_exe,
|
|
103
|
+
browser_name_in_system=browser_name_in_system,
|
|
104
|
+
use_browser_exe=use_browser_exe,
|
|
105
|
+
webdriver_path=webdriver_path,
|
|
106
|
+
architecture="sync",
|
|
107
|
+
flags_manager_type=flags_manager_type,
|
|
108
|
+
flags=flags,
|
|
109
|
+
start_page_url=start_page_url,
|
|
110
|
+
implicitly_wait=implicitly_wait,
|
|
111
|
+
page_load_timeout=page_load_timeout,
|
|
112
|
+
script_timeout=script_timeout,
|
|
113
|
+
window_rect=window_rect,
|
|
114
|
+
)
|