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
|
@@ -1,132 +1,44 @@
|
|
|
1
|
+
from copy import deepcopy
|
|
2
|
+
from osn_selenium.models import DictModel
|
|
1
3
|
from typing import (
|
|
2
4
|
Any,
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
Dict,
|
|
6
|
+
List,
|
|
7
|
+
Optional
|
|
6
8
|
)
|
|
7
|
-
from osn_selenium.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
from osn_selenium.flags._functions import argument_to_flag
|
|
10
|
+
from osn_selenium.exceptions.logic import (
|
|
11
|
+
AbstractImplementationError
|
|
12
|
+
)
|
|
13
|
+
from osn_selenium.flags._typehints import (
|
|
14
|
+
ANY_WEBDRIVER_OPTION_TYPEHINT
|
|
15
|
+
)
|
|
16
|
+
from osn_selenium.exceptions.flags import (
|
|
17
|
+
FlagNotDefinedError,
|
|
18
|
+
FlagTypeNotDefinedError
|
|
19
|
+
)
|
|
20
|
+
from osn_selenium.flags.models.values import (
|
|
21
|
+
ArgumentValue,
|
|
22
|
+
AttributeValue,
|
|
23
|
+
ExperimentalOptionValue
|
|
12
24
|
)
|
|
13
|
-
from osn_selenium.
|
|
25
|
+
from osn_selenium.flags._validators import (
|
|
14
26
|
bool_adding_validation_function,
|
|
15
27
|
optional_bool_adding_validation_function
|
|
16
28
|
)
|
|
29
|
+
from osn_selenium.flags.models.base import (
|
|
30
|
+
BrowserArguments,
|
|
31
|
+
BrowserAttributes,
|
|
32
|
+
BrowserExperimentalOptions,
|
|
33
|
+
BrowserFlags,
|
|
34
|
+
FlagDefinition,
|
|
35
|
+
FlagNotDefined,
|
|
36
|
+
FlagType,
|
|
37
|
+
FlagTypeNotDefined
|
|
38
|
+
)
|
|
17
39
|
|
|
18
40
|
|
|
19
|
-
|
|
20
|
-
"""
|
|
21
|
-
Typed dictionary representing a single command-line argument and its value.
|
|
22
|
-
|
|
23
|
-
Attributes:
|
|
24
|
-
command_line (str): The command-line string for the argument.
|
|
25
|
-
value (Any): The value associated with the argument.
|
|
26
|
-
"""
|
|
27
|
-
|
|
28
|
-
command_line: str
|
|
29
|
-
value: Any
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def _argument_to_flag(argument: ArgumentValue) -> str:
|
|
33
|
-
"""
|
|
34
|
-
Formats a command-line argument from an ArgumentValue dictionary.
|
|
35
|
-
|
|
36
|
-
If the command string contains '{value}', it will be replaced by the argument's value.
|
|
37
|
-
Otherwise, the command string is returned as is.
|
|
38
|
-
|
|
39
|
-
Args:
|
|
40
|
-
argument (ArgumentValue): A dictionary containing the command-line string and its value.
|
|
41
|
-
|
|
42
|
-
Returns:
|
|
43
|
-
str: The formatted command-line argument string.
|
|
44
|
-
"""
|
|
45
|
-
|
|
46
|
-
argument_command = argument["command_line"]
|
|
47
|
-
argument_value = argument["value"]
|
|
48
|
-
|
|
49
|
-
if "{value}" in argument_command:
|
|
50
|
-
return argument_command.format(value=argument_value)
|
|
51
|
-
else:
|
|
52
|
-
return argument_command
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
class ExperimentalOptionValue(TypedDict):
|
|
56
|
-
"""
|
|
57
|
-
Typed dictionary representing a single experimental option and its value.
|
|
58
|
-
|
|
59
|
-
Attributes:
|
|
60
|
-
option_name (str): The name of the experimental option.
|
|
61
|
-
value (Any): The value of the experimental option.
|
|
62
|
-
"""
|
|
63
|
-
|
|
64
|
-
option_name: str
|
|
65
|
-
value: Any
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
class AttributeValue(TypedDict):
|
|
69
|
-
"""
|
|
70
|
-
Typed dictionary representing a single WebDriver attribute and its value.
|
|
71
|
-
|
|
72
|
-
Attributes:
|
|
73
|
-
attribute_name (str): The name of the attribute.
|
|
74
|
-
value (Any): The value of the attribute.
|
|
75
|
-
"""
|
|
76
|
-
|
|
77
|
-
attribute_name: str
|
|
78
|
-
value: Any
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
class FlagTypeNotDefined:
|
|
82
|
-
"""A sentinel class to indicate that a flag type definition was not found."""
|
|
83
|
-
|
|
84
|
-
pass
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
class BrowserExperimentalOptions(TypedDict, total=False):
|
|
88
|
-
"""
|
|
89
|
-
Typed dictionary for browser-agnostic experimental options.
|
|
90
|
-
"""
|
|
91
|
-
|
|
92
|
-
pass
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
class BrowserAttributes(TypedDict, total=False):
|
|
96
|
-
"""
|
|
97
|
-
Typed dictionary for browser-agnostic WebDriver attributes.
|
|
98
|
-
|
|
99
|
-
Attributes:
|
|
100
|
-
enable_bidi (Optional[bool]): Enables/disables BiDi (Bidirectional) protocol mapper.
|
|
101
|
-
"""
|
|
102
|
-
|
|
103
|
-
enable_bidi: Optional[bool]
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
class BrowserArguments(TypedDict, total=False):
|
|
107
|
-
"""
|
|
108
|
-
Typed dictionary for browser-agnostic command-line arguments.
|
|
109
|
-
|
|
110
|
-
Attributes:
|
|
111
|
-
se_downloads_enabled (bool): Enables/disables Selenium downloads.
|
|
112
|
-
"""
|
|
113
|
-
|
|
114
|
-
se_downloads_enabled: bool
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
class BrowserFlags(TypedDict, total=False):
|
|
118
|
-
"""
|
|
119
|
-
Typed dictionary representing a collection of all flag types.
|
|
120
|
-
|
|
121
|
-
Attributes:
|
|
122
|
-
argument (BrowserArguments): Command-line arguments for the browser.
|
|
123
|
-
experimental_option (BrowserExperimentalOptions): Experimental options for WebDriver.
|
|
124
|
-
attribute (BrowserAttributes): WebDriver attributes.
|
|
125
|
-
"""
|
|
126
|
-
|
|
127
|
-
argument: BrowserArguments
|
|
128
|
-
experimental_option: BrowserExperimentalOptions
|
|
129
|
-
attribute: BrowserAttributes
|
|
41
|
+
__all__ = ["BrowserFlagsManager"]
|
|
130
42
|
|
|
131
43
|
|
|
132
44
|
class BrowserFlagsManager:
|
|
@@ -137,25 +49,25 @@ class BrowserFlagsManager:
|
|
|
137
49
|
for various Selenium WebDriver instances.
|
|
138
50
|
|
|
139
51
|
Attributes:
|
|
140
|
-
_flags_types (
|
|
141
|
-
_flags_definitions (
|
|
142
|
-
_flags_definitions_by_types (
|
|
143
|
-
_arguments (
|
|
144
|
-
_experimental_options (
|
|
145
|
-
_attributes (
|
|
52
|
+
_flags_types (Dict[str, FlagType]): A dictionary mapping flag types to their handler functions.
|
|
53
|
+
_flags_definitions (Dict[str, FlagDefinition]): A dictionary of all available flag definitions.
|
|
54
|
+
_flags_definitions_by_types (Dict[str, Dict[str, FlagDefinition]]): Flags definitions grouped by type.
|
|
55
|
+
_arguments (Dict[str, ArgumentValue]): Stores the configured command-line arguments.
|
|
56
|
+
_experimental_options (Dict[str, ExperimentalOptionValue]): Stores the configured experimental options.
|
|
57
|
+
_attributes (Dict[str, AttributeValue]): Stores the configured WebDriver attributes.
|
|
146
58
|
"""
|
|
147
59
|
|
|
148
60
|
def __init__(
|
|
149
61
|
self,
|
|
150
|
-
flags_types: Optional[
|
|
151
|
-
flags_definitions: Optional[
|
|
62
|
+
flags_types: Optional[Dict[str, FlagType]] = None,
|
|
63
|
+
flags_definitions: Optional[Dict[str, FlagDefinition]] = None
|
|
152
64
|
):
|
|
153
65
|
"""
|
|
154
66
|
Initializes the BrowserFlagsManager.
|
|
155
67
|
|
|
156
68
|
Args:
|
|
157
|
-
flags_types (Optional[
|
|
158
|
-
flags_definitions (Optional[
|
|
69
|
+
flags_types (Optional[Dict[str, FlagType]]): Custom flag types and their corresponding functions.
|
|
70
|
+
flags_definitions (Optional[Dict[str, FlagDefinition]]): Custom flag definitions to add or override.
|
|
159
71
|
"""
|
|
160
72
|
|
|
161
73
|
inner_flags_types = {
|
|
@@ -165,8 +77,8 @@ class BrowserFlagsManager:
|
|
|
165
77
|
set_flags_function=self.set_arguments,
|
|
166
78
|
update_flags_function=self.update_arguments,
|
|
167
79
|
clear_flags_function=self.clear_arguments,
|
|
168
|
-
build_options_function=self.
|
|
169
|
-
build_start_args_function=self.
|
|
80
|
+
build_options_function=self._build_options_arguments,
|
|
81
|
+
build_start_args_function=self._build_start_args_arguments
|
|
170
82
|
),
|
|
171
83
|
"experimental_option": FlagType(
|
|
172
84
|
set_flag_function=self.set_experimental_option,
|
|
@@ -174,8 +86,8 @@ class BrowserFlagsManager:
|
|
|
174
86
|
set_flags_function=self.set_experimental_options,
|
|
175
87
|
update_flags_function=self.update_experimental_options,
|
|
176
88
|
clear_flags_function=self.clear_experimental_options,
|
|
177
|
-
build_options_function=self.
|
|
178
|
-
build_start_args_function=lambda: []
|
|
89
|
+
build_options_function=self._build_options_experimental_options,
|
|
90
|
+
build_start_args_function=lambda: [],
|
|
179
91
|
),
|
|
180
92
|
"attribute": FlagType(
|
|
181
93
|
set_flag_function=self.set_attribute,
|
|
@@ -183,8 +95,8 @@ class BrowserFlagsManager:
|
|
|
183
95
|
set_flags_function=self.set_attributes,
|
|
184
96
|
update_flags_function=self.update_attributes,
|
|
185
97
|
clear_flags_function=self.clear_attributes,
|
|
186
|
-
build_options_function=self.
|
|
187
|
-
build_start_args_function=lambda: []
|
|
98
|
+
build_options_function=self._build_options_attributes,
|
|
99
|
+
build_start_args_function=lambda: [],
|
|
188
100
|
),
|
|
189
101
|
}
|
|
190
102
|
|
|
@@ -214,33 +126,33 @@ class BrowserFlagsManager:
|
|
|
214
126
|
self._flags_types = inner_flags_types
|
|
215
127
|
self._flags_definitions = inner_flags_definitions
|
|
216
128
|
|
|
217
|
-
self._flags_definitions_by_types:
|
|
129
|
+
self._flags_definitions_by_types: Dict[str, Dict[str, FlagDefinition]] = {
|
|
218
130
|
option_type: dict(
|
|
219
|
-
filter(lambda di: di[1]
|
|
131
|
+
filter(lambda di: di[1].type == option_type, self._flags_definitions.items())
|
|
220
132
|
)
|
|
221
133
|
for option_type in self._flags_types.keys()
|
|
222
134
|
}
|
|
223
135
|
|
|
224
|
-
self._arguments:
|
|
225
|
-
self._experimental_options:
|
|
226
|
-
self._attributes:
|
|
136
|
+
self._arguments: Dict[str, ArgumentValue] = {}
|
|
137
|
+
self._experimental_options: Dict[str, ExperimentalOptionValue] = {}
|
|
138
|
+
self._attributes: Dict[str, AttributeValue] = {}
|
|
227
139
|
|
|
228
|
-
def
|
|
140
|
+
def _build_options_attributes(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
229
141
|
"""
|
|
230
142
|
Applies configured attributes to the WebDriver options object.
|
|
231
143
|
|
|
232
144
|
Only attributes with `mode` set to 'webdriver_option' or 'both' are applied.
|
|
233
145
|
|
|
234
146
|
Args:
|
|
235
|
-
options (
|
|
147
|
+
options (any_webdriver_option_type): The WebDriver options object to modify.
|
|
236
148
|
|
|
237
149
|
Returns:
|
|
238
|
-
|
|
150
|
+
any_webdriver_option_type: The modified WebDriver options object.
|
|
239
151
|
"""
|
|
240
152
|
|
|
241
153
|
for name, value in self._attributes.items():
|
|
242
|
-
if self._flags_definitions_by_types["attribute"][name]
|
|
243
|
-
setattr(options, value
|
|
154
|
+
if self._flags_definitions_by_types["attribute"][name].mode in ["webdriver_option", "both"]:
|
|
155
|
+
setattr(options, value.attribute_name, value.value)
|
|
244
156
|
|
|
245
157
|
return options
|
|
246
158
|
|
|
@@ -262,73 +174,70 @@ class BrowserFlagsManager:
|
|
|
262
174
|
|
|
263
175
|
self._attributes.pop(attribute_name, None)
|
|
264
176
|
|
|
265
|
-
def set_attribute(self, attribute: FlagDefinition, value:
|
|
177
|
+
def set_attribute(self, attribute: FlagDefinition, value: DictModel):
|
|
266
178
|
"""
|
|
267
179
|
Sets a browser attribute. If the attribute already exists, it is overwritten.
|
|
268
180
|
|
|
269
181
|
Args:
|
|
270
182
|
attribute (FlagDefinition): The definition of the attribute to set.
|
|
271
|
-
value (
|
|
183
|
+
value (DictModel): The value to assign to the attribute.
|
|
272
184
|
"""
|
|
273
185
|
|
|
274
|
-
attribute_name = attribute
|
|
275
|
-
attribute_command = attribute
|
|
276
|
-
adding_validation_function = attribute
|
|
186
|
+
attribute_name = attribute.name
|
|
187
|
+
attribute_command = attribute.command
|
|
188
|
+
adding_validation_function = attribute.adding_validation_function
|
|
277
189
|
|
|
278
190
|
self.remove_attribute(attribute_name)
|
|
279
191
|
|
|
280
192
|
if adding_validation_function(value):
|
|
281
193
|
self._attributes[attribute_name] = AttributeValue(attribute_name=attribute_command, value=value)
|
|
282
194
|
|
|
283
|
-
def update_attributes(self, attributes:
|
|
195
|
+
def update_attributes(self, attributes: BrowserAttributes):
|
|
284
196
|
"""
|
|
285
197
|
Updates browser attributes from a dictionary without clearing existing ones.
|
|
286
198
|
|
|
287
199
|
Args:
|
|
288
|
-
attributes (
|
|
200
|
+
attributes (BrowserAttributes): A dictionary of attributes to set or update.
|
|
289
201
|
|
|
290
202
|
Raises:
|
|
291
|
-
|
|
203
|
+
FlagNotDefinedError: If an unknown attribute key is provided.
|
|
292
204
|
"""
|
|
293
205
|
|
|
294
|
-
for key, value in attributes.items():
|
|
206
|
+
for key, value in attributes.model_dump(exclude_none=True).items():
|
|
295
207
|
flag_definition = self._flags_definitions_by_types["attribute"].get(key, FlagNotDefined())
|
|
296
208
|
|
|
297
209
|
if isinstance(flag_definition, FlagNotDefined):
|
|
298
|
-
raise
|
|
210
|
+
raise FlagNotDefinedError(flag_name=key, flag_type="attributes")
|
|
299
211
|
|
|
300
|
-
self.set_attribute(flag_definition,
|
|
212
|
+
self.set_attribute(flag_definition, getattr(attributes, key))
|
|
301
213
|
|
|
302
|
-
def set_attributes(self, attributes:
|
|
214
|
+
def set_attributes(self, attributes: BrowserAttributes):
|
|
303
215
|
"""
|
|
304
216
|
Clears existing and sets new browser attributes from a dictionary.
|
|
305
217
|
|
|
306
218
|
Args:
|
|
307
|
-
attributes (
|
|
308
|
-
|
|
309
|
-
Raises:
|
|
310
|
-
ValueError: If an unknown attribute key is provided.
|
|
219
|
+
attributes (BrowserAttributes): A dictionary of attributes to set.
|
|
311
220
|
"""
|
|
312
221
|
|
|
313
222
|
self.clear_attributes()
|
|
314
223
|
self.update_attributes(attributes)
|
|
315
224
|
|
|
316
|
-
def
|
|
225
|
+
def _build_options_experimental_options(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
317
226
|
"""
|
|
318
227
|
Adds configured experimental options to the WebDriver options object.
|
|
319
228
|
|
|
320
229
|
Only options with `mode` set to 'webdriver_option' or 'both' are added.
|
|
321
230
|
|
|
322
231
|
Args:
|
|
323
|
-
options (
|
|
232
|
+
options (any_webdriver_option_type): The WebDriver options object to modify.
|
|
324
233
|
|
|
325
234
|
Returns:
|
|
326
|
-
|
|
235
|
+
any_webdriver_option_type: The modified WebDriver options object.
|
|
327
236
|
"""
|
|
328
237
|
|
|
329
238
|
for name, value in self._experimental_options.items():
|
|
330
|
-
if self._flags_definitions_by_types["experimental_option"][name]
|
|
331
|
-
options.add_experimental_option(value
|
|
239
|
+
if self._flags_definitions_by_types["experimental_option"][name].mode in ["webdriver_option", "both"]:
|
|
240
|
+
options.add_experimental_option(value.option_name, value.value)
|
|
332
241
|
|
|
333
242
|
return options
|
|
334
243
|
|
|
@@ -351,95 +260,86 @@ class BrowserFlagsManager:
|
|
|
351
260
|
|
|
352
261
|
self._experimental_options.pop(experimental_option_name, None)
|
|
353
262
|
|
|
354
|
-
def set_experimental_option(self, experimental_option: FlagDefinition, value:
|
|
263
|
+
def set_experimental_option(self, experimental_option: FlagDefinition, value: DictModel):
|
|
355
264
|
"""
|
|
356
265
|
Sets an experimental browser option. If the option already exists, it is overwritten.
|
|
357
266
|
|
|
358
267
|
Args:
|
|
359
268
|
experimental_option (FlagDefinition): The definition of the experimental option to set.
|
|
360
|
-
value (
|
|
269
|
+
value (DictModel): The value to assign to the option.
|
|
361
270
|
"""
|
|
362
271
|
|
|
363
|
-
experimental_option_name = experimental_option
|
|
364
|
-
experimental_option_command = experimental_option
|
|
365
|
-
adding_validation_function = experimental_option
|
|
272
|
+
experimental_option_name = experimental_option.name
|
|
273
|
+
experimental_option_command = experimental_option.command
|
|
274
|
+
adding_validation_function = experimental_option.adding_validation_function
|
|
366
275
|
|
|
367
276
|
self.remove_experimental_option(experimental_option_name)
|
|
368
277
|
|
|
369
278
|
if adding_validation_function(value):
|
|
370
279
|
self._experimental_options[experimental_option_name] = ExperimentalOptionValue(option_name=experimental_option_command, value=value)
|
|
371
280
|
|
|
372
|
-
def update_experimental_options(
|
|
373
|
-
self,
|
|
374
|
-
experimental_options: Union[BrowserExperimentalOptions, dict[str, Any]]
|
|
375
|
-
):
|
|
281
|
+
def update_experimental_options(self, experimental_options: BrowserExperimentalOptions):
|
|
376
282
|
"""
|
|
377
283
|
Updates experimental options from a dictionary without clearing existing ones.
|
|
378
284
|
|
|
379
285
|
Args:
|
|
380
|
-
experimental_options (
|
|
286
|
+
experimental_options (BrowserExperimentalOptions): A dictionary of experimental options to set or update.
|
|
381
287
|
|
|
382
288
|
Raises:
|
|
383
|
-
|
|
289
|
+
FlagNotDefinedError: If an unknown experimental option key is provided.
|
|
384
290
|
"""
|
|
385
291
|
|
|
386
|
-
for key, value in experimental_options.items():
|
|
292
|
+
for key, value in experimental_options.model_dump(exclude_none=True).items():
|
|
387
293
|
flag_definition = self._flags_definitions_by_types["experimental_option"].get(key, FlagNotDefined())
|
|
388
294
|
|
|
389
295
|
if isinstance(flag_definition, FlagNotDefined):
|
|
390
|
-
raise
|
|
296
|
+
raise FlagNotDefinedError(flag_name=key, flag_type="experimental options")
|
|
391
297
|
|
|
392
|
-
self.set_experimental_option(flag_definition,
|
|
298
|
+
self.set_experimental_option(flag_definition, getattr(experimental_options, key))
|
|
393
299
|
|
|
394
|
-
def set_experimental_options(
|
|
395
|
-
self,
|
|
396
|
-
experimental_options: Union[BrowserExperimentalOptions, dict[str, Any]]
|
|
397
|
-
):
|
|
300
|
+
def set_experimental_options(self, experimental_options: BrowserExperimentalOptions):
|
|
398
301
|
"""
|
|
399
302
|
Clears existing and sets new experimental options from a dictionary.
|
|
400
303
|
|
|
401
304
|
Args:
|
|
402
|
-
experimental_options (
|
|
403
|
-
|
|
404
|
-
Raises:
|
|
405
|
-
ValueError: If an unknown experimental option key is provided.
|
|
305
|
+
experimental_options (BrowserExperimentalOptions): A dictionary of experimental options to set.
|
|
406
306
|
"""
|
|
407
307
|
|
|
408
308
|
self.clear_experimental_options()
|
|
409
309
|
self.update_experimental_options(experimental_options)
|
|
410
310
|
|
|
411
|
-
def
|
|
311
|
+
def _build_start_args_arguments(self) -> List[str]:
|
|
412
312
|
"""
|
|
413
|
-
Builds a
|
|
313
|
+
Builds a List of command-line arguments intended for browser startup.
|
|
414
314
|
|
|
415
315
|
Only arguments with `mode` set to 'startup_argument' or 'both' are included.
|
|
416
316
|
|
|
417
317
|
Returns:
|
|
418
|
-
|
|
318
|
+
List[str]: A List of formatted command-line argument strings.
|
|
419
319
|
"""
|
|
420
320
|
|
|
421
321
|
return [
|
|
422
|
-
|
|
322
|
+
argument_to_flag(value)
|
|
423
323
|
for name, value in self._arguments.items()
|
|
424
|
-
if self._flags_definitions_by_types["argument"][name]
|
|
324
|
+
if self._flags_definitions_by_types["argument"][name].mode in ["startup_argument", "both"]
|
|
425
325
|
]
|
|
426
326
|
|
|
427
|
-
def
|
|
327
|
+
def _build_options_arguments(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
428
328
|
"""
|
|
429
329
|
Adds configured command-line arguments to the WebDriver options object.
|
|
430
330
|
|
|
431
331
|
Only arguments with `mode` set to 'webdriver_option' or 'both' are added.
|
|
432
332
|
|
|
433
333
|
Args:
|
|
434
|
-
options (
|
|
334
|
+
options (any_webdriver_option_type): The WebDriver options object to modify.
|
|
435
335
|
|
|
436
336
|
Returns:
|
|
437
|
-
|
|
337
|
+
any_webdriver_option_type: The modified WebDriver options object.
|
|
438
338
|
"""
|
|
439
339
|
|
|
440
340
|
for name, value in self._arguments.items():
|
|
441
|
-
if self._flags_definitions_by_types["argument"][name]
|
|
442
|
-
options.add_argument(
|
|
341
|
+
if self._flags_definitions_by_types["argument"][name].mode in ["webdriver_option", "both"]:
|
|
342
|
+
options.add_argument(argument_to_flag(value))
|
|
443
343
|
|
|
444
344
|
return options
|
|
445
345
|
|
|
@@ -470,55 +370,76 @@ class BrowserFlagsManager:
|
|
|
470
370
|
value (Any): The value for the argument. This may be a boolean for a simple flag or a string/number for a valued flag.
|
|
471
371
|
"""
|
|
472
372
|
|
|
473
|
-
argument_name = argument
|
|
474
|
-
argument_command = argument
|
|
475
|
-
adding_validation_function = argument
|
|
373
|
+
argument_name = argument.name
|
|
374
|
+
argument_command = argument.command
|
|
375
|
+
adding_validation_function = argument.adding_validation_function
|
|
476
376
|
|
|
477
377
|
self.remove_argument(argument_name)
|
|
478
378
|
|
|
479
379
|
if adding_validation_function(value):
|
|
480
380
|
self._arguments[argument_name] = ArgumentValue(command_line=argument_command, value=value)
|
|
481
381
|
|
|
482
|
-
def update_arguments(self, arguments:
|
|
382
|
+
def update_arguments(self, arguments: BrowserArguments):
|
|
483
383
|
"""
|
|
484
384
|
Updates command-line arguments from a dictionary without clearing existing ones.
|
|
485
385
|
|
|
486
386
|
Args:
|
|
487
|
-
arguments (
|
|
387
|
+
arguments (BrowserArguments): A dictionary of arguments to set or update.
|
|
488
388
|
|
|
489
389
|
Raises:
|
|
490
|
-
|
|
390
|
+
FlagNotDefinedError: If an unknown argument key is provided.
|
|
491
391
|
"""
|
|
492
392
|
|
|
493
|
-
for key, value in arguments.items():
|
|
393
|
+
for key, value in arguments.model_dump(exclude_none=True).items():
|
|
494
394
|
flag_definition = self._flags_definitions_by_types["argument"].get(key, FlagNotDefined())
|
|
495
395
|
|
|
496
396
|
if isinstance(flag_definition, FlagNotDefined):
|
|
497
|
-
raise
|
|
397
|
+
raise FlagNotDefinedError(flag_name=key, flag_type="arguments")
|
|
498
398
|
|
|
499
|
-
self.set_argument(flag_definition,
|
|
399
|
+
self.set_argument(flag_definition, getattr(arguments, key))
|
|
500
400
|
|
|
501
|
-
def set_arguments(self, arguments:
|
|
401
|
+
def set_arguments(self, arguments: BrowserArguments):
|
|
502
402
|
"""
|
|
503
403
|
Clears existing and sets new command-line arguments from a dictionary.
|
|
504
404
|
|
|
505
405
|
Args:
|
|
506
|
-
arguments (
|
|
507
|
-
|
|
508
|
-
Raises:
|
|
509
|
-
ValueError: If an unknown argument key is provided.
|
|
406
|
+
arguments (BrowserArguments): A dictionary of arguments to set.
|
|
510
407
|
"""
|
|
511
408
|
|
|
512
409
|
self.clear_arguments()
|
|
513
410
|
self.update_arguments(arguments)
|
|
514
411
|
|
|
412
|
+
@property
|
|
413
|
+
def arguments(self) -> Dict[str, ArgumentValue]:
|
|
414
|
+
return deepcopy(self._arguments)
|
|
415
|
+
|
|
416
|
+
@property
|
|
417
|
+
def attributes(self) -> Dict[str, AttributeValue]:
|
|
418
|
+
return deepcopy(self._attributes)
|
|
419
|
+
|
|
515
420
|
def clear_flags(self):
|
|
516
421
|
"""Clears all configured flags of all types (arguments, options, attributes)."""
|
|
517
422
|
|
|
518
423
|
for type_name, type_functions in self._flags_types.items():
|
|
519
|
-
type_functions
|
|
424
|
+
type_functions.clear_flags_function()
|
|
425
|
+
|
|
426
|
+
@property
|
|
427
|
+
def experimental_options(self) -> Dict[str, ExperimentalOptionValue]:
|
|
428
|
+
return deepcopy(self._experimental_options)
|
|
520
429
|
|
|
521
|
-
|
|
430
|
+
@property
|
|
431
|
+
def flags_definitions(self) -> Dict[str, FlagDefinition]:
|
|
432
|
+
return deepcopy(self._flags_definitions)
|
|
433
|
+
|
|
434
|
+
@property
|
|
435
|
+
def flags_definitions_by_types(self) -> Dict[str, Dict[str, FlagDefinition]]:
|
|
436
|
+
return deepcopy(self._flags_definitions_by_types)
|
|
437
|
+
|
|
438
|
+
@property
|
|
439
|
+
def flags_types(self) -> Dict[str, FlagType]:
|
|
440
|
+
return deepcopy(self._flags_types)
|
|
441
|
+
|
|
442
|
+
def _renew_webdriver_options(self) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
522
443
|
"""
|
|
523
444
|
Abstract method to renew WebDriver options. Must be implemented in child classes.
|
|
524
445
|
|
|
@@ -526,27 +447,30 @@ class BrowserFlagsManager:
|
|
|
526
447
|
browser-specific WebDriver options instances (e.g., ChromeOptions, FirefoxOptions).
|
|
527
448
|
|
|
528
449
|
Returns:
|
|
529
|
-
|
|
450
|
+
any_webdriver_option_type: A new instance of WebDriver options (e.g., ChromeOptions, FirefoxOptions).
|
|
530
451
|
|
|
531
452
|
Raises:
|
|
532
|
-
|
|
453
|
+
AbstractImplementationError: If the method is not implemented in a subclass.
|
|
533
454
|
"""
|
|
534
455
|
|
|
535
|
-
raise
|
|
456
|
+
raise AbstractImplementationError(
|
|
457
|
+
method_name="_renew_webdriver_options",
|
|
458
|
+
class_name=self.__class__.__name__
|
|
459
|
+
)
|
|
536
460
|
|
|
537
461
|
@property
|
|
538
|
-
def options(self) ->
|
|
462
|
+
def options(self) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
539
463
|
"""
|
|
540
464
|
Builds and returns a WebDriver options object with all configured flags applied.
|
|
541
465
|
|
|
542
466
|
Returns:
|
|
543
|
-
|
|
467
|
+
any_webdriver_option_type: A configured WebDriver options object.
|
|
544
468
|
"""
|
|
545
469
|
|
|
546
470
|
options = self._renew_webdriver_options()
|
|
547
471
|
|
|
548
472
|
for type_name, type_functions in self._flags_types.items():
|
|
549
|
-
options = type_functions
|
|
473
|
+
options = type_functions.build_options_function(options)
|
|
550
474
|
|
|
551
475
|
return options
|
|
552
476
|
|
|
@@ -562,16 +486,16 @@ class BrowserFlagsManager:
|
|
|
562
486
|
option (WebdriverOption): The configuration object defining the option to be removed.
|
|
563
487
|
|
|
564
488
|
Raises:
|
|
565
|
-
|
|
489
|
+
FlagTypeNotDefinedError: If the option type is not recognized.
|
|
566
490
|
"""
|
|
567
491
|
|
|
568
492
|
for type_name, type_functions in self._flags_types.items():
|
|
569
|
-
if option
|
|
570
|
-
type_functions
|
|
493
|
+
if option.type == type_name:
|
|
494
|
+
type_functions.remove_flag_function(option.name)
|
|
571
495
|
|
|
572
|
-
raise
|
|
496
|
+
raise FlagTypeNotDefinedError(flag_type=option.type)
|
|
573
497
|
|
|
574
|
-
def set_flags(self, flags:
|
|
498
|
+
def set_flags(self, flags: BrowserFlags):
|
|
575
499
|
"""
|
|
576
500
|
Clears all existing flags and sets new ones from a comprehensive dictionary.
|
|
577
501
|
|
|
@@ -580,20 +504,20 @@ class BrowserFlagsManager:
|
|
|
580
504
|
previously configured flags for that type.
|
|
581
505
|
|
|
582
506
|
Args:
|
|
583
|
-
flags (
|
|
507
|
+
flags (BrowserFlags): A dictionary where keys are flag types
|
|
584
508
|
and values are dictionaries of flags to set for that type.
|
|
585
509
|
|
|
586
510
|
Raises:
|
|
587
|
-
|
|
511
|
+
FlagTypeNotDefinedError: If an unknown flag type is provided in the `flags` dictionary.
|
|
588
512
|
"""
|
|
589
513
|
|
|
590
|
-
for type_name, type_flags in flags.items():
|
|
514
|
+
for type_name, type_flags in flags.model_dump(exclude_none=True).items():
|
|
591
515
|
flags_type_definition = self._flags_types.get(type_name, FlagTypeNotDefined())
|
|
592
516
|
|
|
593
517
|
if isinstance(flags_type_definition, FlagTypeNotDefined):
|
|
594
|
-
raise
|
|
518
|
+
raise FlagTypeNotDefinedError(flag_type=type_name)
|
|
595
519
|
|
|
596
|
-
flags_type_definition
|
|
520
|
+
flags_type_definition.set_flags_function(getattr(flags, type_name))
|
|
597
521
|
|
|
598
522
|
def set_option(self, option: FlagDefinition, value: Any):
|
|
599
523
|
"""
|
|
@@ -608,18 +532,16 @@ class BrowserFlagsManager:
|
|
|
608
532
|
value (Any): The value to be set for the option. The type and acceptable values depend on the specific browser option being configured.
|
|
609
533
|
|
|
610
534
|
Raises:
|
|
611
|
-
|
|
535
|
+
FlagTypeNotDefinedError: If the option type is not recognized.
|
|
612
536
|
"""
|
|
613
537
|
|
|
614
538
|
for type_name, type_functions in self._flags_types.items():
|
|
615
|
-
if option
|
|
616
|
-
type_functions
|
|
539
|
+
if option.type == type_name:
|
|
540
|
+
type_functions.set_flag_function(option, value)
|
|
617
541
|
|
|
618
|
-
raise
|
|
619
|
-
f"Unknown option type ({option}). Acceptable types are: {', '.join(self._flags_types.keys())}."
|
|
620
|
-
)
|
|
542
|
+
raise FlagTypeNotDefinedError(flag_type=option.type)
|
|
621
543
|
|
|
622
|
-
def update_flags(self, flags:
|
|
544
|
+
def update_flags(self, flags: BrowserFlags):
|
|
623
545
|
"""
|
|
624
546
|
Updates all flags from a comprehensive dictionary without clearing existing ones.
|
|
625
547
|
|
|
@@ -628,17 +550,17 @@ class BrowserFlagsManager:
|
|
|
628
550
|
flags without affecting other existing flags.
|
|
629
551
|
|
|
630
552
|
Args:
|
|
631
|
-
flags (
|
|
553
|
+
flags (BrowserFlags): A dictionary where keys are flag types
|
|
632
554
|
and values are dictionaries of flags to update for that type.
|
|
633
555
|
|
|
634
556
|
Raises:
|
|
635
|
-
|
|
557
|
+
FlagTypeNotDefinedError: If an unknown flag type is provided in the `flags` dictionary.
|
|
636
558
|
"""
|
|
637
559
|
|
|
638
|
-
for type_name, type_flags in flags.items():
|
|
560
|
+
for type_name, type_flags in flags.model_dump(exclude_none=True).items():
|
|
639
561
|
flags_type_definition = self._flags_types.get(type_name, FlagTypeNotDefined())
|
|
640
562
|
|
|
641
563
|
if isinstance(flags_type_definition, FlagTypeNotDefined):
|
|
642
|
-
raise
|
|
564
|
+
raise FlagTypeNotDefinedError(flag_type=type_name)
|
|
643
565
|
|
|
644
|
-
flags_type_definition
|
|
566
|
+
flags_type_definition.update_flags_function(getattr(flags, type_name))
|