osn-selenium 0.0.0__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- osn_selenium/_base_models.py +41 -0
- osn_selenium/_cdp_import.py +253 -0
- osn_selenium/_functions.py +84 -0
- osn_selenium/_typehints.py +19 -0
- osn_selenium/abstract/executors/cdp/__init__.py +435 -0
- osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
- osn_selenium/abstract/executors/cdp/animation.py +47 -0
- osn_selenium/abstract/executors/cdp/audits.py +39 -0
- osn_selenium/abstract/executors/cdp/autofill.py +34 -0
- osn_selenium/abstract/executors/cdp/background_service.py +22 -0
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
- osn_selenium/abstract/executors/cdp/browser.py +122 -0
- osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
- osn_selenium/abstract/executors/cdp/cast.py +31 -0
- osn_selenium/abstract/executors/cdp/console.py +18 -0
- osn_selenium/abstract/executors/cdp/css.py +197 -0
- osn_selenium/abstract/executors/cdp/debugger.py +198 -0
- osn_selenium/abstract/executors/cdp/device_access.py +22 -0
- osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
- osn_selenium/abstract/executors/cdp/dom.py +305 -0
- osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
- osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
- osn_selenium/abstract/executors/cdp/emulation.py +259 -0
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
- osn_selenium/abstract/executors/cdp/extensions.py +31 -0
- osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
- osn_selenium/abstract/executors/cdp/fetch.py +76 -0
- osn_selenium/abstract/executors/cdp/file_system.py +11 -0
- osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
- osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
- osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
- osn_selenium/abstract/executors/cdp/input.py +158 -0
- osn_selenium/abstract/executors/cdp/inspector.py +14 -0
- osn_selenium/abstract/executors/cdp/io.py +24 -0
- osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
- osn_selenium/abstract/executors/cdp/log.py +27 -0
- osn_selenium/abstract/executors/cdp/media.py +14 -0
- osn_selenium/abstract/executors/cdp/memory.py +61 -0
- osn_selenium/abstract/executors/cdp/network.py +252 -0
- osn_selenium/abstract/executors/cdp/overlay.py +166 -0
- osn_selenium/abstract/executors/cdp/page.py +347 -0
- osn_selenium/abstract/executors/cdp/performance.py +28 -0
- osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
- osn_selenium/abstract/executors/cdp/preload.py +14 -0
- osn_selenium/abstract/executors/cdp/profiler.py +54 -0
- osn_selenium/abstract/executors/cdp/pwa.py +46 -0
- osn_selenium/abstract/executors/cdp/runtime.py +176 -0
- osn_selenium/abstract/executors/cdp/schema.py +11 -0
- osn_selenium/abstract/executors/cdp/security.py +26 -0
- osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
- osn_selenium/abstract/executors/cdp/storage.py +175 -0
- osn_selenium/abstract/executors/cdp/system_info.py +24 -0
- osn_selenium/abstract/executors/cdp/target.py +125 -0
- osn_selenium/abstract/executors/cdp/tethering.py +14 -0
- osn_selenium/abstract/executors/cdp/tracing.py +48 -0
- osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
- osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/executors/javascript.py +203 -0
- osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
- osn_selenium/abstract/instances/action_chains/base.py +25 -0
- osn_selenium/abstract/instances/action_chains/click.py +93 -0
- osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
- osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
- osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
- osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
- osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
- osn_selenium/abstract/instances/action_chains/move.py +60 -0
- osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
- osn_selenium/abstract/instances/action_chains/utils.py +44 -0
- osn_selenium/abstract/instances/alert.py +67 -0
- osn_selenium/abstract/instances/browser.py +76 -0
- osn_selenium/abstract/instances/browsing_context.py +310 -0
- osn_selenium/abstract/instances/dialog.py +107 -0
- osn_selenium/abstract/instances/fedcm.py +133 -0
- osn_selenium/abstract/instances/mobile.py +79 -0
- osn_selenium/abstract/instances/network.py +100 -0
- osn_selenium/abstract/instances/permissions.py +52 -0
- osn_selenium/abstract/instances/script.py +109 -0
- osn_selenium/abstract/instances/shadow_root.py +81 -0
- osn_selenium/abstract/instances/storage.py +98 -0
- osn_selenium/abstract/instances/switch_to.py +104 -0
- osn_selenium/abstract/instances/web_driver_wait.py +57 -0
- osn_selenium/abstract/instances/web_element.py +395 -0
- osn_selenium/abstract/instances/web_extension.py +70 -0
- osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
- osn_selenium/abstract/webdriver/blink/base.py +80 -0
- osn_selenium/abstract/webdriver/blink/casting.py +82 -0
- osn_selenium/abstract/webdriver/blink/features.py +51 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
- osn_selenium/abstract/webdriver/blink/logging.py +40 -0
- osn_selenium/abstract/webdriver/blink/network.py +45 -0
- osn_selenium/abstract/webdriver/blink/settings.py +68 -0
- osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
- osn_selenium/abstract/webdriver/chrome/base.py +36 -0
- osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
- osn_selenium/abstract/webdriver/core/__init__.py +16 -0
- osn_selenium/abstract/webdriver/core/actions.py +58 -0
- osn_selenium/abstract/webdriver/core/auth.py +145 -0
- osn_selenium/abstract/webdriver/core/base.py +298 -0
- osn_selenium/abstract/webdriver/core/capture.py +84 -0
- osn_selenium/abstract/webdriver/core/components.py +82 -0
- osn_selenium/abstract/webdriver/core/devtools.py +69 -0
- osn_selenium/abstract/webdriver/core/element.py +55 -0
- osn_selenium/abstract/webdriver/core/file.py +82 -0
- osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
- osn_selenium/abstract/webdriver/core/navigation.py +65 -0
- osn_selenium/abstract/webdriver/core/script.py +88 -0
- osn_selenium/abstract/webdriver/core/settings.py +43 -0
- osn_selenium/abstract/webdriver/core/storage.py +81 -0
- osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
- osn_selenium/abstract/webdriver/core/window.py +237 -0
- osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
- osn_selenium/abstract/webdriver/edge/base.py +36 -0
- osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/edge/settings.py +110 -0
- osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
- osn_selenium/abstract/webdriver/yandex/base.py +18 -0
- osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
- osn_selenium/base_mixin.py +122 -0
- osn_selenium/browsers_handler/__init__.py +47 -17
- osn_selenium/browsers_handler/_linux.py +226 -0
- osn_selenium/browsers_handler/_windows.py +21 -14
- osn_selenium/browsers_handler/{types.py → models.py} +5 -2
- osn_selenium/dev_tools/_decorators.py +149 -0
- osn_selenium/dev_tools/_exception_helpers.py +116 -0
- osn_selenium/dev_tools/_functions.py +174 -0
- osn_selenium/dev_tools/_system_utils.py +35 -0
- osn_selenium/dev_tools/_typehints.py +35 -0
- osn_selenium/dev_tools/_validators.py +227 -0
- osn_selenium/dev_tools/_wrappers.py +92 -0
- osn_selenium/dev_tools/domains/__init__.py +7 -40
- osn_selenium/dev_tools/domains/abstract.py +98 -254
- osn_selenium/dev_tools/domains/fetch.py +229 -906
- osn_selenium/dev_tools/domains_default/fetch.py +40 -28
- osn_selenium/dev_tools/filters.py +40 -0
- osn_selenium/dev_tools/logger/main.py +214 -0
- osn_selenium/dev_tools/logger/models.py +232 -0
- osn_selenium/dev_tools/logger/target.py +278 -0
- osn_selenium/dev_tools/manager/__init__.py +16 -0
- osn_selenium/dev_tools/manager/base.py +124 -0
- osn_selenium/dev_tools/manager/lifecycle.py +236 -0
- osn_selenium/dev_tools/manager/logging.py +153 -0
- osn_selenium/dev_tools/manager/settings.py +89 -0
- osn_selenium/dev_tools/manager/targets.py +175 -0
- osn_selenium/dev_tools/models.py +49 -0
- osn_selenium/dev_tools/settings.py +139 -0
- osn_selenium/dev_tools/target/__init__.py +16 -0
- osn_selenium/dev_tools/target/base.py +427 -0
- osn_selenium/dev_tools/target/detach.py +54 -0
- osn_selenium/dev_tools/target/discovery.py +112 -0
- osn_selenium/dev_tools/target/events.py +120 -0
- osn_selenium/dev_tools/target/fingerprint.py +126 -0
- osn_selenium/dev_tools/target/lifecycle.py +184 -0
- osn_selenium/dev_tools/target/logging.py +163 -0
- osn_selenium/exceptions/__init__.py +1 -0
- osn_selenium/exceptions/base.py +9 -0
- osn_selenium/exceptions/configuration.py +84 -0
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +114 -0
- osn_selenium/exceptions/flags.py +45 -0
- osn_selenium/exceptions/instance.py +92 -0
- osn_selenium/exceptions/javascript.py +31 -0
- osn_selenium/exceptions/logic.py +31 -0
- osn_selenium/exceptions/path.py +77 -0
- osn_selenium/exceptions/platform.py +33 -0
- osn_selenium/exceptions/protocol.py +86 -0
- osn_selenium/exceptions/webdriver.py +44 -0
- osn_selenium/exceptions/window.py +63 -0
- osn_selenium/executors/__init__.py +1 -0
- osn_selenium/executors/sync/__init__.py +1 -0
- osn_selenium/executors/sync/cdp/__init__.py +550 -0
- osn_selenium/executors/sync/cdp/accessibility.py +74 -0
- osn_selenium/executors/sync/cdp/animation.py +50 -0
- osn_selenium/executors/sync/cdp/audits.py +48 -0
- osn_selenium/executors/sync/cdp/autofill.py +39 -0
- osn_selenium/executors/sync/cdp/background_service.py +30 -0
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
- osn_selenium/executors/sync/cdp/browser.py +131 -0
- osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
- osn_selenium/executors/sync/cdp/cast.py +38 -0
- osn_selenium/executors/sync/cdp/console.py +24 -0
- osn_selenium/executors/sync/cdp/css.py +187 -0
- osn_selenium/executors/sync/cdp/debugger.py +206 -0
- osn_selenium/executors/sync/cdp/device_access.py +27 -0
- osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
- osn_selenium/executors/sync/cdp/dom.py +310 -0
- osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
- osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
- osn_selenium/executors/sync/cdp/emulation.py +270 -0
- osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
- osn_selenium/executors/sync/cdp/extensions.py +39 -0
- osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
- osn_selenium/executors/sync/cdp/fetch.py +96 -0
- osn_selenium/executors/sync/cdp/file_system.py +18 -0
- osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
- osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
- osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
- osn_selenium/executors/sync/cdp/input.py +233 -0
- osn_selenium/executors/sync/cdp/inspector.py +21 -0
- osn_selenium/executors/sync/cdp/io.py +33 -0
- osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
- osn_selenium/executors/sync/cdp/log.py +35 -0
- osn_selenium/executors/sync/cdp/media.py +21 -0
- osn_selenium/executors/sync/cdp/memory.py +62 -0
- osn_selenium/executors/sync/cdp/network.py +287 -0
- osn_selenium/executors/sync/cdp/overlay.py +174 -0
- osn_selenium/executors/sync/cdp/page.py +365 -0
- osn_selenium/executors/sync/cdp/performance.py +33 -0
- osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
- osn_selenium/executors/sync/cdp/preload.py +21 -0
- osn_selenium/executors/sync/cdp/profiler.py +58 -0
- osn_selenium/executors/sync/cdp/pwa.py +55 -0
- osn_selenium/executors/sync/cdp/runtime.py +221 -0
- osn_selenium/executors/sync/cdp/schema.py +23 -0
- osn_selenium/executors/sync/cdp/security.py +30 -0
- osn_selenium/executors/sync/cdp/service_worker.py +56 -0
- osn_selenium/executors/sync/cdp/storage.py +151 -0
- osn_selenium/executors/sync/cdp/system_info.py +30 -0
- osn_selenium/executors/sync/cdp/target.py +147 -0
- osn_selenium/executors/sync/cdp/tethering.py +21 -0
- osn_selenium/executors/sync/cdp/tracing.py +62 -0
- osn_selenium/executors/sync/cdp/web_audio.py +24 -0
- osn_selenium/executors/sync/cdp/web_authn.py +82 -0
- osn_selenium/executors/sync/cdp.py +100 -0
- osn_selenium/executors/sync/javascript.py +79 -0
- osn_selenium/executors/trio_threads/__init__.py +1 -0
- osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
- osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
- osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
- osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
- osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
- osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
- osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
- osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
- osn_selenium/executors/trio_threads/cdp/console.py +33 -0
- osn_selenium/executors/trio_threads/cdp/css.py +196 -0
- osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
- osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
- osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
- osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
- osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
- osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
- osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
- osn_selenium/executors/trio_threads/cdp/input.py +242 -0
- osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
- osn_selenium/executors/trio_threads/cdp/io.py +42 -0
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
- osn_selenium/executors/trio_threads/cdp/log.py +44 -0
- osn_selenium/executors/trio_threads/cdp/media.py +30 -0
- osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
- osn_selenium/executors/trio_threads/cdp/network.py +296 -0
- osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
- osn_selenium/executors/trio_threads/cdp/page.py +374 -0
- osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
- osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
- osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
- osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
- osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
- osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
- osn_selenium/executors/trio_threads/cdp/security.py +43 -0
- osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
- osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
- osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
- osn_selenium/executors/trio_threads/cdp/target.py +156 -0
- osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
- osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
- osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
- osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
- osn_selenium/executors/trio_threads/cdp.py +104 -0
- osn_selenium/executors/trio_threads/javascript.py +90 -0
- osn_selenium/executors/unified/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/accessibility.py +81 -0
- osn_selenium/executors/unified/cdp/animation.py +50 -0
- osn_selenium/executors/unified/cdp/audits.py +45 -0
- osn_selenium/executors/unified/cdp/autofill.py +41 -0
- osn_selenium/executors/unified/cdp/background_service.py +24 -0
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
- osn_selenium/executors/unified/cdp/browser.py +143 -0
- osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
- osn_selenium/executors/unified/cdp/cast.py +32 -0
- osn_selenium/executors/unified/cdp/console.py +18 -0
- osn_selenium/executors/unified/cdp/css.py +237 -0
- osn_selenium/executors/unified/cdp/debugger.py +243 -0
- osn_selenium/executors/unified/cdp/device_access.py +21 -0
- osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
- osn_selenium/executors/unified/cdp/dom.py +380 -0
- osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
- osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
- osn_selenium/executors/unified/cdp/emulation.py +312 -0
- osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
- osn_selenium/executors/unified/cdp/extensions.py +45 -0
- osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
- osn_selenium/executors/unified/cdp/fetch.py +111 -0
- osn_selenium/executors/unified/cdp/file_system.py +15 -0
- osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
- osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
- osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
- osn_selenium/executors/unified/cdp/input.py +254 -0
- osn_selenium/executors/unified/cdp/inspector.py +15 -0
- osn_selenium/executors/unified/cdp/io.py +29 -0
- osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
- osn_selenium/executors/unified/cdp/log.py +29 -0
- osn_selenium/executors/unified/cdp/media.py +15 -0
- osn_selenium/executors/unified/cdp/memory.py +59 -0
- osn_selenium/executors/unified/cdp/network.py +323 -0
- osn_selenium/executors/unified/cdp/overlay.py +209 -0
- osn_selenium/executors/unified/cdp/page.py +410 -0
- osn_selenium/executors/unified/cdp/performance.py +27 -0
- osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
- osn_selenium/executors/unified/cdp/preload.py +15 -0
- osn_selenium/executors/unified/cdp/profiler.py +55 -0
- osn_selenium/executors/unified/cdp/pwa.py +55 -0
- osn_selenium/executors/unified/cdp/runtime.py +245 -0
- osn_selenium/executors/unified/cdp/schema.py +17 -0
- osn_selenium/executors/unified/cdp/security.py +27 -0
- osn_selenium/executors/unified/cdp/service_worker.py +62 -0
- osn_selenium/executors/unified/cdp/storage.py +178 -0
- osn_selenium/executors/unified/cdp/system_info.py +24 -0
- osn_selenium/executors/unified/cdp/target.py +165 -0
- osn_selenium/executors/unified/cdp/tethering.py +15 -0
- osn_selenium/executors/unified/cdp/tracing.py +62 -0
- osn_selenium/executors/unified/cdp/web_audio.py +18 -0
- osn_selenium/executors/unified/cdp/web_authn.py +103 -0
- osn_selenium/executors/unified/javascript.py +104 -0
- osn_selenium/flags/__init__.py +1 -0
- osn_selenium/flags/_functions.py +45 -0
- osn_selenium/flags/_typehints.py +34 -0
- osn_selenium/flags/_validators.py +101 -0
- osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
- osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
- osn_selenium/flags/chrome.py +259 -0
- osn_selenium/flags/edge.py +259 -0
- osn_selenium/flags/models/__init__.py +1 -0
- osn_selenium/flags/models/base.py +130 -0
- osn_selenium/flags/models/blink.py +263 -0
- osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
- osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
- osn_selenium/flags/models/values.py +44 -0
- osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
- osn_selenium/flags/yandex.py +259 -0
- osn_selenium/instances/__init__.py +1 -0
- osn_selenium/instances/_functions.py +242 -0
- osn_selenium/instances/_typehints.py +148 -0
- osn_selenium/instances/_utils.py +143 -0
- osn_selenium/instances/convert.py +287 -0
- osn_selenium/instances/protocols.py +105 -0
- osn_selenium/instances/sync/__init__.py +1 -0
- osn_selenium/instances/sync/action_chains/__init__.py +32 -0
- osn_selenium/instances/sync/action_chains/base.py +74 -0
- osn_selenium/instances/sync/action_chains/click.py +61 -0
- osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
- osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
- osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
- osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
- osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
- osn_selenium/instances/sync/action_chains/move.py +46 -0
- osn_selenium/instances/sync/action_chains/scroll.py +43 -0
- osn_selenium/instances/sync/action_chains/utils.py +30 -0
- osn_selenium/instances/sync/alert.py +69 -0
- osn_selenium/instances/sync/browser.py +72 -0
- osn_selenium/instances/sync/browsing_context.py +193 -0
- osn_selenium/instances/sync/dialog.py +81 -0
- osn_selenium/instances/sync/fedcm.py +92 -0
- osn_selenium/instances/sync/mobile.py +75 -0
- osn_selenium/instances/sync/network.py +90 -0
- osn_selenium/instances/sync/permissions.py +80 -0
- osn_selenium/instances/sync/script.py +77 -0
- osn_selenium/instances/sync/shadow_root.py +113 -0
- osn_selenium/instances/sync/storage.py +91 -0
- osn_selenium/instances/sync/switch_to.py +92 -0
- osn_selenium/instances/sync/web_driver_wait.py +83 -0
- osn_selenium/instances/sync/web_element.py +179 -0
- osn_selenium/instances/sync/web_extension.py +77 -0
- osn_selenium/instances/trio_threads/__init__.py +1 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
- osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
- osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
- osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
- osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
- osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
- osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
- osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
- osn_selenium/instances/trio_threads/alert.py +87 -0
- osn_selenium/instances/trio_threads/browser.py +90 -0
- osn_selenium/instances/trio_threads/browsing_context.py +216 -0
- osn_selenium/instances/trio_threads/dialog.py +99 -0
- osn_selenium/instances/trio_threads/fedcm.py +110 -0
- osn_selenium/instances/trio_threads/mobile.py +93 -0
- osn_selenium/instances/trio_threads/network.py +108 -0
- osn_selenium/instances/trio_threads/permissions.py +102 -0
- osn_selenium/instances/trio_threads/script.py +95 -0
- osn_selenium/instances/trio_threads/shadow_root.py +154 -0
- osn_selenium/instances/trio_threads/storage.py +109 -0
- osn_selenium/instances/trio_threads/switch_to.py +124 -0
- osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
- osn_selenium/instances/trio_threads/web_element.py +217 -0
- osn_selenium/instances/trio_threads/web_extension.py +99 -0
- osn_selenium/instances/unified/__init__.py +1 -0
- osn_selenium/instances/unified/action_chains/__init__.py +22 -0
- osn_selenium/instances/unified/action_chains/base.py +31 -0
- osn_selenium/instances/unified/action_chains/click.py +27 -0
- osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
- osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
- osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
- osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
- osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
- osn_selenium/instances/unified/action_chains/move.py +24 -0
- osn_selenium/instances/unified/action_chains/scroll.py +21 -0
- osn_selenium/instances/unified/action_chains/utils.py +19 -0
- osn_selenium/instances/unified/alert.py +29 -0
- osn_selenium/instances/unified/browser.py +33 -0
- osn_selenium/instances/unified/browsing_context.py +151 -0
- osn_selenium/instances/unified/dialog.py +42 -0
- osn_selenium/instances/unified/fedcm.py +48 -0
- osn_selenium/instances/unified/mobile.py +36 -0
- osn_selenium/instances/unified/network.py +50 -0
- osn_selenium/instances/unified/permissions.py +43 -0
- osn_selenium/instances/unified/script.py +38 -0
- osn_selenium/instances/unified/shadow_root.py +46 -0
- osn_selenium/instances/unified/storage.py +48 -0
- osn_selenium/instances/unified/switch_to.py +49 -0
- osn_selenium/instances/unified/web_driver_wait.py +45 -0
- osn_selenium/instances/unified/web_element.py +145 -0
- osn_selenium/instances/unified/web_extension.py +38 -0
- osn_selenium/javascript/__init__.py +1 -0
- osn_selenium/javascript/_functions.py +63 -0
- osn_selenium/javascript/fingerprint/__init__.py +120 -0
- osn_selenium/javascript/fingerprint/_decorators.py +41 -0
- osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
- osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
- osn_selenium/javascript/fingerprint/_functions.py +35 -0
- osn_selenium/javascript/fingerprint/_typehints.py +27 -0
- osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
- osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
- osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
- osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
- osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
- osn_selenium/javascript/fingerprint/registry/models.py +41 -0
- osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
- osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
- osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
- osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
- osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
- osn_selenium/javascript/functions.py +44 -0
- osn_selenium/javascript/models.py +35 -0
- osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
- osn_selenium/models.py +94 -0
- osn_selenium/trio_threads_mixin.py +159 -0
- osn_selenium/webdrivers/_args_helpers.py +181 -0
- osn_selenium/webdrivers/_bridges.py +57 -0
- osn_selenium/webdrivers/_decorators.py +83 -0
- osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
- osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
- osn_selenium/webdrivers/_executable_tables/models.py +19 -0
- osn_selenium/webdrivers/_typehints.py +10 -0
- osn_selenium/webdrivers/protocols.py +50 -0
- osn_selenium/webdrivers/sync/__init__.py +1 -0
- osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
- osn_selenium/webdrivers/sync/blink/base.py +140 -0
- osn_selenium/webdrivers/sync/blink/casting.py +34 -0
- osn_selenium/webdrivers/sync/blink/features.py +28 -0
- osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/sync/blink/logging.py +25 -0
- osn_selenium/webdrivers/sync/blink/network.py +28 -0
- osn_selenium/webdrivers/sync/blink/settings.py +63 -0
- osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
- osn_selenium/webdrivers/sync/chrome/base.py +118 -0
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
- osn_selenium/webdrivers/sync/core/__init__.py +100 -0
- osn_selenium/webdrivers/sync/core/actions.py +59 -0
- osn_selenium/webdrivers/sync/core/auth.py +77 -0
- osn_selenium/webdrivers/sync/core/base.py +175 -0
- osn_selenium/webdrivers/sync/core/capture.py +37 -0
- osn_selenium/webdrivers/sync/core/comonents.py +57 -0
- osn_selenium/webdrivers/sync/core/devtools.py +47 -0
- osn_selenium/webdrivers/sync/core/element.py +42 -0
- osn_selenium/webdrivers/sync/core/file.py +40 -0
- osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
- osn_selenium/webdrivers/sync/core/navigation.py +36 -0
- osn_selenium/webdrivers/sync/core/script.py +53 -0
- osn_selenium/webdrivers/sync/core/settings.py +35 -0
- osn_selenium/webdrivers/sync/core/storage.py +48 -0
- osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
- osn_selenium/webdrivers/sync/core/window.py +99 -0
- osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
- osn_selenium/webdrivers/sync/edge/base.py +114 -0
- osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/edge/settings.py +58 -0
- osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
- osn_selenium/webdrivers/sync/yandex/base.py +111 -0
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
- osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
- osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
- osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
- osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
- osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
- osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
- osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
- osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
- osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
- osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
- osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
- osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
- osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
- osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
- osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
- osn_selenium/webdrivers/unified/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/base.py +135 -0
- osn_selenium/webdrivers/unified/blink/casting.py +30 -0
- osn_selenium/webdrivers/unified/blink/features.py +22 -0
- osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
- osn_selenium/webdrivers/unified/blink/logging.py +18 -0
- osn_selenium/webdrivers/unified/blink/network.py +22 -0
- osn_selenium/webdrivers/unified/blink/settings.py +86 -0
- osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
- osn_selenium/webdrivers/unified/chrome/base.py +58 -0
- osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
- osn_selenium/webdrivers/unified/core/__init__.py +1 -0
- osn_selenium/webdrivers/unified/core/actions.py +43 -0
- osn_selenium/webdrivers/unified/core/auth.py +70 -0
- osn_selenium/webdrivers/unified/core/base.py +139 -0
- osn_selenium/webdrivers/unified/core/capture.py +32 -0
- osn_selenium/webdrivers/unified/core/components.py +32 -0
- osn_selenium/webdrivers/unified/core/devtools.py +35 -0
- osn_selenium/webdrivers/unified/core/element.py +24 -0
- osn_selenium/webdrivers/unified/core/file.py +35 -0
- osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
- osn_selenium/webdrivers/unified/core/navigation.py +31 -0
- osn_selenium/webdrivers/unified/core/script.py +32 -0
- osn_selenium/webdrivers/unified/core/settings.py +44 -0
- osn_selenium/webdrivers/unified/core/storage.py +37 -0
- osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
- osn_selenium/webdrivers/unified/core/window.py +135 -0
- osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
- osn_selenium/webdrivers/unified/edge/base.py +56 -0
- osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/edge/settings.py +48 -0
- osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
- osn_selenium/webdrivers/unified/yandex/base.py +58 -0
- osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
- osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
- osn_selenium-1.1.0.dist-info/METADATA +252 -0
- osn_selenium-1.1.0.dist-info/RECORD +615 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
- osn_selenium/captcha_workers/__init__.py +0 -26
- osn_selenium/dev_tools/_types.py +0 -22
- osn_selenium/dev_tools/errors.py +0 -89
- osn_selenium/dev_tools/logger.py +0 -558
- osn_selenium/dev_tools/manager.py +0 -1551
- osn_selenium/dev_tools/utils.py +0 -509
- osn_selenium/errors.py +0 -16
- osn_selenium/types.py +0 -118
- osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
- osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
- osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
- osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
- osn_selenium/webdrivers/Blink/protocols.py +0 -330
- osn_selenium/webdrivers/Blink/webdriver.py +0 -637
- osn_selenium/webdrivers/Chrome/protocols.py +0 -228
- osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
- osn_selenium/webdrivers/Edge/protocols.py +0 -228
- osn_selenium/webdrivers/Edge/webdriver.py +0 -394
- osn_selenium/webdrivers/Yandex/protocols.py +0 -211
- osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
- osn_selenium/webdrivers/_functions.py +0 -504
- osn_selenium/webdrivers/types.py +0 -390
- osn_selenium-0.0.0.dist-info/METADATA +0 -710
- osn_selenium-0.0.0.dist-info/RECORD +0 -57
- /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/top_level.txt +0 -0
|
@@ -1,132 +1,44 @@
|
|
|
1
|
+
from copy import deepcopy
|
|
2
|
+
from osn_selenium._base_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:
|
|
@@ -135,27 +47,19 @@ class BrowserFlagsManager:
|
|
|
135
47
|
|
|
136
48
|
This class provides a structured way to define, set, and build browser options
|
|
137
49
|
for various Selenium WebDriver instances.
|
|
138
|
-
|
|
139
|
-
Attributes:
|
|
140
|
-
_flags_types (dict[str, FlagType]): A dictionary mapping flag types to their handler functions.
|
|
141
|
-
_flags_definitions (dict[str, FlagDefinition]): A dictionary of all available flag definitions.
|
|
142
|
-
_flags_definitions_by_types (dict[str, dict[str, FlagDefinition]]): Flags definitions grouped by type.
|
|
143
|
-
_arguments (dict[str, ArgumentValue]): Stores the configured command-line arguments.
|
|
144
|
-
_experimental_options (dict[str, ExperimentalOptionValue]): Stores the configured experimental options.
|
|
145
|
-
_attributes (dict[str, AttributeValue]): Stores the configured WebDriver attributes.
|
|
146
50
|
"""
|
|
147
51
|
|
|
148
52
|
def __init__(
|
|
149
53
|
self,
|
|
150
|
-
flags_types: Optional[
|
|
151
|
-
flags_definitions: Optional[
|
|
54
|
+
flags_types: Optional[Dict[str, FlagType]] = None,
|
|
55
|
+
flags_definitions: Optional[Dict[str, FlagDefinition]] = None
|
|
152
56
|
):
|
|
153
57
|
"""
|
|
154
58
|
Initializes the BrowserFlagsManager.
|
|
155
59
|
|
|
156
60
|
Args:
|
|
157
|
-
flags_types (Optional[
|
|
158
|
-
flags_definitions (Optional[
|
|
61
|
+
flags_types (Optional[Dict[str, FlagType]]): Custom flag types and their corresponding functions.
|
|
62
|
+
flags_definitions (Optional[Dict[str, FlagDefinition]]): Custom flag definitions to add or override.
|
|
159
63
|
"""
|
|
160
64
|
|
|
161
65
|
inner_flags_types = {
|
|
@@ -165,8 +69,8 @@ class BrowserFlagsManager:
|
|
|
165
69
|
set_flags_function=self.set_arguments,
|
|
166
70
|
update_flags_function=self.update_arguments,
|
|
167
71
|
clear_flags_function=self.clear_arguments,
|
|
168
|
-
build_options_function=self.
|
|
169
|
-
build_start_args_function=self.
|
|
72
|
+
build_options_function=self._build_options_arguments,
|
|
73
|
+
build_start_args_function=self._build_start_args_arguments
|
|
170
74
|
),
|
|
171
75
|
"experimental_option": FlagType(
|
|
172
76
|
set_flag_function=self.set_experimental_option,
|
|
@@ -174,8 +78,8 @@ class BrowserFlagsManager:
|
|
|
174
78
|
set_flags_function=self.set_experimental_options,
|
|
175
79
|
update_flags_function=self.update_experimental_options,
|
|
176
80
|
clear_flags_function=self.clear_experimental_options,
|
|
177
|
-
build_options_function=self.
|
|
178
|
-
build_start_args_function=lambda: []
|
|
81
|
+
build_options_function=self._build_options_experimental_options,
|
|
82
|
+
build_start_args_function=lambda: [],
|
|
179
83
|
),
|
|
180
84
|
"attribute": FlagType(
|
|
181
85
|
set_flag_function=self.set_attribute,
|
|
@@ -183,8 +87,8 @@ class BrowserFlagsManager:
|
|
|
183
87
|
set_flags_function=self.set_attributes,
|
|
184
88
|
update_flags_function=self.update_attributes,
|
|
185
89
|
clear_flags_function=self.clear_attributes,
|
|
186
|
-
build_options_function=self.
|
|
187
|
-
build_start_args_function=lambda: []
|
|
90
|
+
build_options_function=self._build_options_attributes,
|
|
91
|
+
build_start_args_function=lambda: [],
|
|
188
92
|
),
|
|
189
93
|
}
|
|
190
94
|
|
|
@@ -214,33 +118,33 @@ class BrowserFlagsManager:
|
|
|
214
118
|
self._flags_types = inner_flags_types
|
|
215
119
|
self._flags_definitions = inner_flags_definitions
|
|
216
120
|
|
|
217
|
-
self._flags_definitions_by_types:
|
|
121
|
+
self._flags_definitions_by_types: Dict[str, Dict[str, FlagDefinition]] = {
|
|
218
122
|
option_type: dict(
|
|
219
|
-
filter(lambda di: di[1]
|
|
123
|
+
filter(lambda di: di[1].type == option_type, self._flags_definitions.items())
|
|
220
124
|
)
|
|
221
125
|
for option_type in self._flags_types.keys()
|
|
222
126
|
}
|
|
223
127
|
|
|
224
|
-
self._arguments:
|
|
225
|
-
self._experimental_options:
|
|
226
|
-
self._attributes:
|
|
128
|
+
self._arguments: Dict[str, ArgumentValue] = {}
|
|
129
|
+
self._experimental_options: Dict[str, ExperimentalOptionValue] = {}
|
|
130
|
+
self._attributes: Dict[str, AttributeValue] = {}
|
|
227
131
|
|
|
228
|
-
def
|
|
132
|
+
def _build_options_attributes(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
229
133
|
"""
|
|
230
134
|
Applies configured attributes to the WebDriver options object.
|
|
231
135
|
|
|
232
136
|
Only attributes with `mode` set to 'webdriver_option' or 'both' are applied.
|
|
233
137
|
|
|
234
138
|
Args:
|
|
235
|
-
options (
|
|
139
|
+
options (any_webdriver_option_type): The WebDriver options object to modify.
|
|
236
140
|
|
|
237
141
|
Returns:
|
|
238
|
-
|
|
142
|
+
any_webdriver_option_type: The modified WebDriver options object.
|
|
239
143
|
"""
|
|
240
144
|
|
|
241
145
|
for name, value in self._attributes.items():
|
|
242
|
-
if self._flags_definitions_by_types["attribute"][name]
|
|
243
|
-
setattr(options, value
|
|
146
|
+
if self._flags_definitions_by_types["attribute"][name].mode in ["webdriver_option", "both"]:
|
|
147
|
+
setattr(options, value.attribute_name, value.value)
|
|
244
148
|
|
|
245
149
|
return options
|
|
246
150
|
|
|
@@ -262,73 +166,70 @@ class BrowserFlagsManager:
|
|
|
262
166
|
|
|
263
167
|
self._attributes.pop(attribute_name, None)
|
|
264
168
|
|
|
265
|
-
def set_attribute(self, attribute: FlagDefinition, value:
|
|
169
|
+
def set_attribute(self, attribute: FlagDefinition, value: DictModel):
|
|
266
170
|
"""
|
|
267
171
|
Sets a browser attribute. If the attribute already exists, it is overwritten.
|
|
268
172
|
|
|
269
173
|
Args:
|
|
270
174
|
attribute (FlagDefinition): The definition of the attribute to set.
|
|
271
|
-
value (
|
|
175
|
+
value (DictModel): The value to assign to the attribute.
|
|
272
176
|
"""
|
|
273
177
|
|
|
274
|
-
attribute_name = attribute
|
|
275
|
-
attribute_command = attribute
|
|
276
|
-
adding_validation_function = attribute
|
|
178
|
+
attribute_name = attribute.name
|
|
179
|
+
attribute_command = attribute.command
|
|
180
|
+
adding_validation_function = attribute.adding_validation_function
|
|
277
181
|
|
|
278
182
|
self.remove_attribute(attribute_name)
|
|
279
183
|
|
|
280
184
|
if adding_validation_function(value):
|
|
281
185
|
self._attributes[attribute_name] = AttributeValue(attribute_name=attribute_command, value=value)
|
|
282
186
|
|
|
283
|
-
def update_attributes(self, attributes:
|
|
187
|
+
def update_attributes(self, attributes: BrowserAttributes):
|
|
284
188
|
"""
|
|
285
189
|
Updates browser attributes from a dictionary without clearing existing ones.
|
|
286
190
|
|
|
287
191
|
Args:
|
|
288
|
-
attributes (
|
|
192
|
+
attributes (BrowserAttributes): A dictionary of attributes to set or update.
|
|
289
193
|
|
|
290
194
|
Raises:
|
|
291
|
-
|
|
195
|
+
FlagNotDefinedError: If an unknown attribute key is provided.
|
|
292
196
|
"""
|
|
293
197
|
|
|
294
|
-
for key, value in attributes.items():
|
|
198
|
+
for key, value in attributes.model_dump(exclude_none=True).items():
|
|
295
199
|
flag_definition = self._flags_definitions_by_types["attribute"].get(key, FlagNotDefined())
|
|
296
200
|
|
|
297
201
|
if isinstance(flag_definition, FlagNotDefined):
|
|
298
|
-
raise
|
|
202
|
+
raise FlagNotDefinedError(flag_name=key, flag_type="attributes")
|
|
299
203
|
|
|
300
|
-
self.set_attribute(flag_definition,
|
|
204
|
+
self.set_attribute(flag_definition, getattr(attributes, key))
|
|
301
205
|
|
|
302
|
-
def set_attributes(self, attributes:
|
|
206
|
+
def set_attributes(self, attributes: BrowserAttributes):
|
|
303
207
|
"""
|
|
304
208
|
Clears existing and sets new browser attributes from a dictionary.
|
|
305
209
|
|
|
306
210
|
Args:
|
|
307
|
-
attributes (
|
|
308
|
-
|
|
309
|
-
Raises:
|
|
310
|
-
ValueError: If an unknown attribute key is provided.
|
|
211
|
+
attributes (BrowserAttributes): A dictionary of attributes to set.
|
|
311
212
|
"""
|
|
312
213
|
|
|
313
214
|
self.clear_attributes()
|
|
314
215
|
self.update_attributes(attributes)
|
|
315
216
|
|
|
316
|
-
def
|
|
217
|
+
def _build_options_experimental_options(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
317
218
|
"""
|
|
318
219
|
Adds configured experimental options to the WebDriver options object.
|
|
319
220
|
|
|
320
221
|
Only options with `mode` set to 'webdriver_option' or 'both' are added.
|
|
321
222
|
|
|
322
223
|
Args:
|
|
323
|
-
options (
|
|
224
|
+
options (any_webdriver_option_type): The WebDriver options object to modify.
|
|
324
225
|
|
|
325
226
|
Returns:
|
|
326
|
-
|
|
227
|
+
any_webdriver_option_type: The modified WebDriver options object.
|
|
327
228
|
"""
|
|
328
229
|
|
|
329
230
|
for name, value in self._experimental_options.items():
|
|
330
|
-
if self._flags_definitions_by_types["experimental_option"][name]
|
|
331
|
-
options.add_experimental_option(value
|
|
231
|
+
if self._flags_definitions_by_types["experimental_option"][name].mode in ["webdriver_option", "both"]:
|
|
232
|
+
options.add_experimental_option(value.option_name, value.value)
|
|
332
233
|
|
|
333
234
|
return options
|
|
334
235
|
|
|
@@ -351,95 +252,86 @@ class BrowserFlagsManager:
|
|
|
351
252
|
|
|
352
253
|
self._experimental_options.pop(experimental_option_name, None)
|
|
353
254
|
|
|
354
|
-
def set_experimental_option(self, experimental_option: FlagDefinition, value:
|
|
255
|
+
def set_experimental_option(self, experimental_option: FlagDefinition, value: DictModel):
|
|
355
256
|
"""
|
|
356
257
|
Sets an experimental browser option. If the option already exists, it is overwritten.
|
|
357
258
|
|
|
358
259
|
Args:
|
|
359
260
|
experimental_option (FlagDefinition): The definition of the experimental option to set.
|
|
360
|
-
value (
|
|
261
|
+
value (DictModel): The value to assign to the option.
|
|
361
262
|
"""
|
|
362
263
|
|
|
363
|
-
experimental_option_name = experimental_option
|
|
364
|
-
experimental_option_command = experimental_option
|
|
365
|
-
adding_validation_function = experimental_option
|
|
264
|
+
experimental_option_name = experimental_option.name
|
|
265
|
+
experimental_option_command = experimental_option.command
|
|
266
|
+
adding_validation_function = experimental_option.adding_validation_function
|
|
366
267
|
|
|
367
268
|
self.remove_experimental_option(experimental_option_name)
|
|
368
269
|
|
|
369
270
|
if adding_validation_function(value):
|
|
370
271
|
self._experimental_options[experimental_option_name] = ExperimentalOptionValue(option_name=experimental_option_command, value=value)
|
|
371
272
|
|
|
372
|
-
def update_experimental_options(
|
|
373
|
-
self,
|
|
374
|
-
experimental_options: Union[BrowserExperimentalOptions, dict[str, Any]]
|
|
375
|
-
):
|
|
273
|
+
def update_experimental_options(self, experimental_options: BrowserExperimentalOptions):
|
|
376
274
|
"""
|
|
377
275
|
Updates experimental options from a dictionary without clearing existing ones.
|
|
378
276
|
|
|
379
277
|
Args:
|
|
380
|
-
experimental_options (
|
|
278
|
+
experimental_options (BrowserExperimentalOptions): A dictionary of experimental options to set or update.
|
|
381
279
|
|
|
382
280
|
Raises:
|
|
383
|
-
|
|
281
|
+
FlagNotDefinedError: If an unknown experimental option key is provided.
|
|
384
282
|
"""
|
|
385
283
|
|
|
386
|
-
for key, value in experimental_options.items():
|
|
284
|
+
for key, value in experimental_options.model_dump(exclude_none=True).items():
|
|
387
285
|
flag_definition = self._flags_definitions_by_types["experimental_option"].get(key, FlagNotDefined())
|
|
388
286
|
|
|
389
287
|
if isinstance(flag_definition, FlagNotDefined):
|
|
390
|
-
raise
|
|
288
|
+
raise FlagNotDefinedError(flag_name=key, flag_type="experimental options")
|
|
391
289
|
|
|
392
|
-
self.set_experimental_option(flag_definition,
|
|
290
|
+
self.set_experimental_option(flag_definition, getattr(experimental_options, key))
|
|
393
291
|
|
|
394
|
-
def set_experimental_options(
|
|
395
|
-
self,
|
|
396
|
-
experimental_options: Union[BrowserExperimentalOptions, dict[str, Any]]
|
|
397
|
-
):
|
|
292
|
+
def set_experimental_options(self, experimental_options: BrowserExperimentalOptions):
|
|
398
293
|
"""
|
|
399
294
|
Clears existing and sets new experimental options from a dictionary.
|
|
400
295
|
|
|
401
296
|
Args:
|
|
402
|
-
experimental_options (
|
|
403
|
-
|
|
404
|
-
Raises:
|
|
405
|
-
ValueError: If an unknown experimental option key is provided.
|
|
297
|
+
experimental_options (BrowserExperimentalOptions): A dictionary of experimental options to set.
|
|
406
298
|
"""
|
|
407
299
|
|
|
408
300
|
self.clear_experimental_options()
|
|
409
301
|
self.update_experimental_options(experimental_options)
|
|
410
302
|
|
|
411
|
-
def
|
|
303
|
+
def _build_start_args_arguments(self) -> List[str]:
|
|
412
304
|
"""
|
|
413
|
-
Builds a
|
|
305
|
+
Builds a List of command-line arguments intended for browser startup.
|
|
414
306
|
|
|
415
307
|
Only arguments with `mode` set to 'startup_argument' or 'both' are included.
|
|
416
308
|
|
|
417
309
|
Returns:
|
|
418
|
-
|
|
310
|
+
List[str]: A List of formatted command-line argument strings.
|
|
419
311
|
"""
|
|
420
312
|
|
|
421
313
|
return [
|
|
422
|
-
|
|
314
|
+
argument_to_flag(value)
|
|
423
315
|
for name, value in self._arguments.items()
|
|
424
|
-
if self._flags_definitions_by_types["argument"][name]
|
|
316
|
+
if self._flags_definitions_by_types["argument"][name].mode in ["startup_argument", "both"]
|
|
425
317
|
]
|
|
426
318
|
|
|
427
|
-
def
|
|
319
|
+
def _build_options_arguments(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
428
320
|
"""
|
|
429
321
|
Adds configured command-line arguments to the WebDriver options object.
|
|
430
322
|
|
|
431
323
|
Only arguments with `mode` set to 'webdriver_option' or 'both' are added.
|
|
432
324
|
|
|
433
325
|
Args:
|
|
434
|
-
options (
|
|
326
|
+
options (any_webdriver_option_type): The WebDriver options object to modify.
|
|
435
327
|
|
|
436
328
|
Returns:
|
|
437
|
-
|
|
329
|
+
any_webdriver_option_type: The modified WebDriver options object.
|
|
438
330
|
"""
|
|
439
331
|
|
|
440
332
|
for name, value in self._arguments.items():
|
|
441
|
-
if self._flags_definitions_by_types["argument"][name]
|
|
442
|
-
options.add_argument(
|
|
333
|
+
if self._flags_definitions_by_types["argument"][name].mode in ["webdriver_option", "both"]:
|
|
334
|
+
options.add_argument(argument_to_flag(value))
|
|
443
335
|
|
|
444
336
|
return options
|
|
445
337
|
|
|
@@ -470,55 +362,76 @@ class BrowserFlagsManager:
|
|
|
470
362
|
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
363
|
"""
|
|
472
364
|
|
|
473
|
-
argument_name = argument
|
|
474
|
-
argument_command = argument
|
|
475
|
-
adding_validation_function = argument
|
|
365
|
+
argument_name = argument.name
|
|
366
|
+
argument_command = argument.command
|
|
367
|
+
adding_validation_function = argument.adding_validation_function
|
|
476
368
|
|
|
477
369
|
self.remove_argument(argument_name)
|
|
478
370
|
|
|
479
371
|
if adding_validation_function(value):
|
|
480
372
|
self._arguments[argument_name] = ArgumentValue(command_line=argument_command, value=value)
|
|
481
373
|
|
|
482
|
-
def update_arguments(self, arguments:
|
|
374
|
+
def update_arguments(self, arguments: BrowserArguments):
|
|
483
375
|
"""
|
|
484
376
|
Updates command-line arguments from a dictionary without clearing existing ones.
|
|
485
377
|
|
|
486
378
|
Args:
|
|
487
|
-
arguments (
|
|
379
|
+
arguments (BrowserArguments): A dictionary of arguments to set or update.
|
|
488
380
|
|
|
489
381
|
Raises:
|
|
490
|
-
|
|
382
|
+
FlagNotDefinedError: If an unknown argument key is provided.
|
|
491
383
|
"""
|
|
492
384
|
|
|
493
|
-
for key, value in arguments.items():
|
|
385
|
+
for key, value in arguments.model_dump(exclude_none=True).items():
|
|
494
386
|
flag_definition = self._flags_definitions_by_types["argument"].get(key, FlagNotDefined())
|
|
495
387
|
|
|
496
388
|
if isinstance(flag_definition, FlagNotDefined):
|
|
497
|
-
raise
|
|
389
|
+
raise FlagNotDefinedError(flag_name=key, flag_type="arguments")
|
|
498
390
|
|
|
499
|
-
self.set_argument(flag_definition,
|
|
391
|
+
self.set_argument(flag_definition, getattr(arguments, key))
|
|
500
392
|
|
|
501
|
-
def set_arguments(self, arguments:
|
|
393
|
+
def set_arguments(self, arguments: BrowserArguments):
|
|
502
394
|
"""
|
|
503
395
|
Clears existing and sets new command-line arguments from a dictionary.
|
|
504
396
|
|
|
505
397
|
Args:
|
|
506
|
-
arguments (
|
|
507
|
-
|
|
508
|
-
Raises:
|
|
509
|
-
ValueError: If an unknown argument key is provided.
|
|
398
|
+
arguments (BrowserArguments): A dictionary of arguments to set.
|
|
510
399
|
"""
|
|
511
400
|
|
|
512
401
|
self.clear_arguments()
|
|
513
402
|
self.update_arguments(arguments)
|
|
514
403
|
|
|
404
|
+
@property
|
|
405
|
+
def arguments(self) -> Dict[str, ArgumentValue]:
|
|
406
|
+
return deepcopy(self._arguments)
|
|
407
|
+
|
|
408
|
+
@property
|
|
409
|
+
def attributes(self) -> Dict[str, AttributeValue]:
|
|
410
|
+
return deepcopy(self._attributes)
|
|
411
|
+
|
|
515
412
|
def clear_flags(self):
|
|
516
413
|
"""Clears all configured flags of all types (arguments, options, attributes)."""
|
|
517
414
|
|
|
518
415
|
for type_name, type_functions in self._flags_types.items():
|
|
519
|
-
type_functions
|
|
416
|
+
type_functions.clear_flags_function()
|
|
520
417
|
|
|
521
|
-
|
|
418
|
+
@property
|
|
419
|
+
def experimental_options(self) -> Dict[str, ExperimentalOptionValue]:
|
|
420
|
+
return deepcopy(self._experimental_options)
|
|
421
|
+
|
|
422
|
+
@property
|
|
423
|
+
def flags_definitions(self) -> Dict[str, FlagDefinition]:
|
|
424
|
+
return deepcopy(self._flags_definitions)
|
|
425
|
+
|
|
426
|
+
@property
|
|
427
|
+
def flags_definitions_by_types(self) -> Dict[str, Dict[str, FlagDefinition]]:
|
|
428
|
+
return deepcopy(self._flags_definitions_by_types)
|
|
429
|
+
|
|
430
|
+
@property
|
|
431
|
+
def flags_types(self) -> Dict[str, FlagType]:
|
|
432
|
+
return deepcopy(self._flags_types)
|
|
433
|
+
|
|
434
|
+
def _renew_webdriver_options(self) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
522
435
|
"""
|
|
523
436
|
Abstract method to renew WebDriver options. Must be implemented in child classes.
|
|
524
437
|
|
|
@@ -526,27 +439,30 @@ class BrowserFlagsManager:
|
|
|
526
439
|
browser-specific WebDriver options instances (e.g., ChromeOptions, FirefoxOptions).
|
|
527
440
|
|
|
528
441
|
Returns:
|
|
529
|
-
|
|
442
|
+
any_webdriver_option_type: A new instance of WebDriver options (e.g., ChromeOptions, FirefoxOptions).
|
|
530
443
|
|
|
531
444
|
Raises:
|
|
532
|
-
|
|
445
|
+
AbstractImplementationError: If the method is not implemented in a subclass.
|
|
533
446
|
"""
|
|
534
447
|
|
|
535
|
-
raise
|
|
448
|
+
raise AbstractImplementationError(
|
|
449
|
+
method_name="_renew_webdriver_options",
|
|
450
|
+
class_name=self.__class__.__name__
|
|
451
|
+
)
|
|
536
452
|
|
|
537
453
|
@property
|
|
538
|
-
def options(self) ->
|
|
454
|
+
def options(self) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
|
|
539
455
|
"""
|
|
540
456
|
Builds and returns a WebDriver options object with all configured flags applied.
|
|
541
457
|
|
|
542
458
|
Returns:
|
|
543
|
-
|
|
459
|
+
any_webdriver_option_type: A configured WebDriver options object.
|
|
544
460
|
"""
|
|
545
461
|
|
|
546
462
|
options = self._renew_webdriver_options()
|
|
547
463
|
|
|
548
464
|
for type_name, type_functions in self._flags_types.items():
|
|
549
|
-
options = type_functions
|
|
465
|
+
options = type_functions.build_options_function(options)
|
|
550
466
|
|
|
551
467
|
return options
|
|
552
468
|
|
|
@@ -562,16 +478,16 @@ class BrowserFlagsManager:
|
|
|
562
478
|
option (WebdriverOption): The configuration object defining the option to be removed.
|
|
563
479
|
|
|
564
480
|
Raises:
|
|
565
|
-
|
|
481
|
+
FlagTypeNotDefinedError: If the option type is not recognized.
|
|
566
482
|
"""
|
|
567
483
|
|
|
568
484
|
for type_name, type_functions in self._flags_types.items():
|
|
569
|
-
if option
|
|
570
|
-
type_functions
|
|
485
|
+
if option.type == type_name:
|
|
486
|
+
type_functions.remove_flag_function(option.name)
|
|
571
487
|
|
|
572
|
-
raise
|
|
488
|
+
raise FlagTypeNotDefinedError(flag_type=option.type)
|
|
573
489
|
|
|
574
|
-
def set_flags(self, flags:
|
|
490
|
+
def set_flags(self, flags: BrowserFlags):
|
|
575
491
|
"""
|
|
576
492
|
Clears all existing flags and sets new ones from a comprehensive dictionary.
|
|
577
493
|
|
|
@@ -580,20 +496,20 @@ class BrowserFlagsManager:
|
|
|
580
496
|
previously configured flags for that type.
|
|
581
497
|
|
|
582
498
|
Args:
|
|
583
|
-
flags (
|
|
499
|
+
flags (BrowserFlags): A dictionary where keys are flag types
|
|
584
500
|
and values are dictionaries of flags to set for that type.
|
|
585
501
|
|
|
586
502
|
Raises:
|
|
587
|
-
|
|
503
|
+
FlagTypeNotDefinedError: If an unknown flag type is provided in the `flags` dictionary.
|
|
588
504
|
"""
|
|
589
505
|
|
|
590
|
-
for type_name, type_flags in flags.items():
|
|
506
|
+
for type_name, type_flags in flags.model_dump(exclude_none=True).items():
|
|
591
507
|
flags_type_definition = self._flags_types.get(type_name, FlagTypeNotDefined())
|
|
592
508
|
|
|
593
509
|
if isinstance(flags_type_definition, FlagTypeNotDefined):
|
|
594
|
-
raise
|
|
510
|
+
raise FlagTypeNotDefinedError(flag_type=type_name)
|
|
595
511
|
|
|
596
|
-
flags_type_definition
|
|
512
|
+
flags_type_definition.set_flags_function(getattr(flags, type_name))
|
|
597
513
|
|
|
598
514
|
def set_option(self, option: FlagDefinition, value: Any):
|
|
599
515
|
"""
|
|
@@ -608,18 +524,16 @@ class BrowserFlagsManager:
|
|
|
608
524
|
value (Any): The value to be set for the option. The type and acceptable values depend on the specific browser option being configured.
|
|
609
525
|
|
|
610
526
|
Raises:
|
|
611
|
-
|
|
527
|
+
FlagTypeNotDefinedError: If the option type is not recognized.
|
|
612
528
|
"""
|
|
613
529
|
|
|
614
530
|
for type_name, type_functions in self._flags_types.items():
|
|
615
|
-
if option
|
|
616
|
-
type_functions
|
|
531
|
+
if option.type == type_name:
|
|
532
|
+
type_functions.set_flag_function(option, value)
|
|
617
533
|
|
|
618
|
-
raise
|
|
619
|
-
f"Unknown option type ({option}). Acceptable types are: {', '.join(self._flags_types.keys())}."
|
|
620
|
-
)
|
|
534
|
+
raise FlagTypeNotDefinedError(flag_type=option.type)
|
|
621
535
|
|
|
622
|
-
def update_flags(self, flags:
|
|
536
|
+
def update_flags(self, flags: BrowserFlags):
|
|
623
537
|
"""
|
|
624
538
|
Updates all flags from a comprehensive dictionary without clearing existing ones.
|
|
625
539
|
|
|
@@ -628,17 +542,17 @@ class BrowserFlagsManager:
|
|
|
628
542
|
flags without affecting other existing flags.
|
|
629
543
|
|
|
630
544
|
Args:
|
|
631
|
-
flags (
|
|
545
|
+
flags (BrowserFlags): A dictionary where keys are flag types
|
|
632
546
|
and values are dictionaries of flags to update for that type.
|
|
633
547
|
|
|
634
548
|
Raises:
|
|
635
|
-
|
|
549
|
+
FlagTypeNotDefinedError: If an unknown flag type is provided in the `flags` dictionary.
|
|
636
550
|
"""
|
|
637
551
|
|
|
638
|
-
for type_name, type_flags in flags.items():
|
|
552
|
+
for type_name, type_flags in flags.model_dump(exclude_none=True).items():
|
|
639
553
|
flags_type_definition = self._flags_types.get(type_name, FlagTypeNotDefined())
|
|
640
554
|
|
|
641
555
|
if isinstance(flags_type_definition, FlagTypeNotDefined):
|
|
642
|
-
raise
|
|
556
|
+
raise FlagTypeNotDefinedError(flag_type=type_name)
|
|
643
557
|
|
|
644
|
-
flags_type_definition
|
|
558
|
+
flags_type_definition.update_flags_function(getattr(flags, type_name))
|