osn-selenium 0.0.0__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- osn_selenium/_base_models.py +41 -0
- osn_selenium/_cdp_import.py +253 -0
- osn_selenium/_functions.py +84 -0
- osn_selenium/_typehints.py +19 -0
- osn_selenium/abstract/executors/cdp/__init__.py +435 -0
- osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
- osn_selenium/abstract/executors/cdp/animation.py +47 -0
- osn_selenium/abstract/executors/cdp/audits.py +39 -0
- osn_selenium/abstract/executors/cdp/autofill.py +34 -0
- osn_selenium/abstract/executors/cdp/background_service.py +22 -0
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
- osn_selenium/abstract/executors/cdp/browser.py +122 -0
- osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
- osn_selenium/abstract/executors/cdp/cast.py +31 -0
- osn_selenium/abstract/executors/cdp/console.py +18 -0
- osn_selenium/abstract/executors/cdp/css.py +197 -0
- osn_selenium/abstract/executors/cdp/debugger.py +198 -0
- osn_selenium/abstract/executors/cdp/device_access.py +22 -0
- osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
- osn_selenium/abstract/executors/cdp/dom.py +305 -0
- osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
- osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
- osn_selenium/abstract/executors/cdp/emulation.py +259 -0
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
- osn_selenium/abstract/executors/cdp/extensions.py +31 -0
- osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
- osn_selenium/abstract/executors/cdp/fetch.py +76 -0
- osn_selenium/abstract/executors/cdp/file_system.py +11 -0
- osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
- osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
- osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
- osn_selenium/abstract/executors/cdp/input.py +158 -0
- osn_selenium/abstract/executors/cdp/inspector.py +14 -0
- osn_selenium/abstract/executors/cdp/io.py +24 -0
- osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
- osn_selenium/abstract/executors/cdp/log.py +27 -0
- osn_selenium/abstract/executors/cdp/media.py +14 -0
- osn_selenium/abstract/executors/cdp/memory.py +61 -0
- osn_selenium/abstract/executors/cdp/network.py +252 -0
- osn_selenium/abstract/executors/cdp/overlay.py +166 -0
- osn_selenium/abstract/executors/cdp/page.py +347 -0
- osn_selenium/abstract/executors/cdp/performance.py +28 -0
- osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
- osn_selenium/abstract/executors/cdp/preload.py +14 -0
- osn_selenium/abstract/executors/cdp/profiler.py +54 -0
- osn_selenium/abstract/executors/cdp/pwa.py +46 -0
- osn_selenium/abstract/executors/cdp/runtime.py +176 -0
- osn_selenium/abstract/executors/cdp/schema.py +11 -0
- osn_selenium/abstract/executors/cdp/security.py +26 -0
- osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
- osn_selenium/abstract/executors/cdp/storage.py +175 -0
- osn_selenium/abstract/executors/cdp/system_info.py +24 -0
- osn_selenium/abstract/executors/cdp/target.py +125 -0
- osn_selenium/abstract/executors/cdp/tethering.py +14 -0
- osn_selenium/abstract/executors/cdp/tracing.py +48 -0
- osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
- osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/executors/javascript.py +203 -0
- osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
- osn_selenium/abstract/instances/action_chains/base.py +25 -0
- osn_selenium/abstract/instances/action_chains/click.py +93 -0
- osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
- osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
- osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
- osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
- osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
- osn_selenium/abstract/instances/action_chains/move.py +60 -0
- osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
- osn_selenium/abstract/instances/action_chains/utils.py +44 -0
- osn_selenium/abstract/instances/alert.py +67 -0
- osn_selenium/abstract/instances/browser.py +76 -0
- osn_selenium/abstract/instances/browsing_context.py +310 -0
- osn_selenium/abstract/instances/dialog.py +107 -0
- osn_selenium/abstract/instances/fedcm.py +133 -0
- osn_selenium/abstract/instances/mobile.py +79 -0
- osn_selenium/abstract/instances/network.py +100 -0
- osn_selenium/abstract/instances/permissions.py +52 -0
- osn_selenium/abstract/instances/script.py +109 -0
- osn_selenium/abstract/instances/shadow_root.py +81 -0
- osn_selenium/abstract/instances/storage.py +98 -0
- osn_selenium/abstract/instances/switch_to.py +104 -0
- osn_selenium/abstract/instances/web_driver_wait.py +57 -0
- osn_selenium/abstract/instances/web_element.py +395 -0
- osn_selenium/abstract/instances/web_extension.py +70 -0
- osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
- osn_selenium/abstract/webdriver/blink/base.py +80 -0
- osn_selenium/abstract/webdriver/blink/casting.py +82 -0
- osn_selenium/abstract/webdriver/blink/features.py +51 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
- osn_selenium/abstract/webdriver/blink/logging.py +40 -0
- osn_selenium/abstract/webdriver/blink/network.py +45 -0
- osn_selenium/abstract/webdriver/blink/settings.py +68 -0
- osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
- osn_selenium/abstract/webdriver/chrome/base.py +36 -0
- osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
- osn_selenium/abstract/webdriver/core/__init__.py +16 -0
- osn_selenium/abstract/webdriver/core/actions.py +58 -0
- osn_selenium/abstract/webdriver/core/auth.py +145 -0
- osn_selenium/abstract/webdriver/core/base.py +298 -0
- osn_selenium/abstract/webdriver/core/capture.py +84 -0
- osn_selenium/abstract/webdriver/core/components.py +82 -0
- osn_selenium/abstract/webdriver/core/devtools.py +69 -0
- osn_selenium/abstract/webdriver/core/element.py +55 -0
- osn_selenium/abstract/webdriver/core/file.py +82 -0
- osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
- osn_selenium/abstract/webdriver/core/navigation.py +65 -0
- osn_selenium/abstract/webdriver/core/script.py +88 -0
- osn_selenium/abstract/webdriver/core/settings.py +43 -0
- osn_selenium/abstract/webdriver/core/storage.py +81 -0
- osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
- osn_selenium/abstract/webdriver/core/window.py +237 -0
- osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
- osn_selenium/abstract/webdriver/edge/base.py +36 -0
- osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/edge/settings.py +110 -0
- osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
- osn_selenium/abstract/webdriver/yandex/base.py +18 -0
- osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
- osn_selenium/base_mixin.py +122 -0
- osn_selenium/browsers_handler/__init__.py +47 -17
- osn_selenium/browsers_handler/_linux.py +226 -0
- osn_selenium/browsers_handler/_windows.py +21 -14
- osn_selenium/browsers_handler/{types.py → models.py} +5 -2
- osn_selenium/dev_tools/_decorators.py +149 -0
- osn_selenium/dev_tools/_exception_helpers.py +116 -0
- osn_selenium/dev_tools/_functions.py +174 -0
- osn_selenium/dev_tools/_system_utils.py +35 -0
- osn_selenium/dev_tools/_typehints.py +35 -0
- osn_selenium/dev_tools/_validators.py +227 -0
- osn_selenium/dev_tools/_wrappers.py +92 -0
- osn_selenium/dev_tools/domains/__init__.py +7 -40
- osn_selenium/dev_tools/domains/abstract.py +98 -254
- osn_selenium/dev_tools/domains/fetch.py +229 -906
- osn_selenium/dev_tools/domains_default/fetch.py +40 -28
- osn_selenium/dev_tools/filters.py +40 -0
- osn_selenium/dev_tools/logger/main.py +214 -0
- osn_selenium/dev_tools/logger/models.py +232 -0
- osn_selenium/dev_tools/logger/target.py +278 -0
- osn_selenium/dev_tools/manager/__init__.py +16 -0
- osn_selenium/dev_tools/manager/base.py +124 -0
- osn_selenium/dev_tools/manager/lifecycle.py +236 -0
- osn_selenium/dev_tools/manager/logging.py +153 -0
- osn_selenium/dev_tools/manager/settings.py +89 -0
- osn_selenium/dev_tools/manager/targets.py +175 -0
- osn_selenium/dev_tools/models.py +49 -0
- osn_selenium/dev_tools/settings.py +139 -0
- osn_selenium/dev_tools/target/__init__.py +16 -0
- osn_selenium/dev_tools/target/base.py +427 -0
- osn_selenium/dev_tools/target/detach.py +54 -0
- osn_selenium/dev_tools/target/discovery.py +112 -0
- osn_selenium/dev_tools/target/events.py +120 -0
- osn_selenium/dev_tools/target/fingerprint.py +126 -0
- osn_selenium/dev_tools/target/lifecycle.py +184 -0
- osn_selenium/dev_tools/target/logging.py +163 -0
- osn_selenium/exceptions/__init__.py +1 -0
- osn_selenium/exceptions/base.py +9 -0
- osn_selenium/exceptions/configuration.py +84 -0
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +114 -0
- osn_selenium/exceptions/flags.py +45 -0
- osn_selenium/exceptions/instance.py +92 -0
- osn_selenium/exceptions/javascript.py +31 -0
- osn_selenium/exceptions/logic.py +31 -0
- osn_selenium/exceptions/path.py +77 -0
- osn_selenium/exceptions/platform.py +33 -0
- osn_selenium/exceptions/protocol.py +86 -0
- osn_selenium/exceptions/webdriver.py +44 -0
- osn_selenium/exceptions/window.py +63 -0
- osn_selenium/executors/__init__.py +1 -0
- osn_selenium/executors/sync/__init__.py +1 -0
- osn_selenium/executors/sync/cdp/__init__.py +550 -0
- osn_selenium/executors/sync/cdp/accessibility.py +74 -0
- osn_selenium/executors/sync/cdp/animation.py +50 -0
- osn_selenium/executors/sync/cdp/audits.py +48 -0
- osn_selenium/executors/sync/cdp/autofill.py +39 -0
- osn_selenium/executors/sync/cdp/background_service.py +30 -0
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
- osn_selenium/executors/sync/cdp/browser.py +131 -0
- osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
- osn_selenium/executors/sync/cdp/cast.py +38 -0
- osn_selenium/executors/sync/cdp/console.py +24 -0
- osn_selenium/executors/sync/cdp/css.py +187 -0
- osn_selenium/executors/sync/cdp/debugger.py +206 -0
- osn_selenium/executors/sync/cdp/device_access.py +27 -0
- osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
- osn_selenium/executors/sync/cdp/dom.py +310 -0
- osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
- osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
- osn_selenium/executors/sync/cdp/emulation.py +270 -0
- osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
- osn_selenium/executors/sync/cdp/extensions.py +39 -0
- osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
- osn_selenium/executors/sync/cdp/fetch.py +96 -0
- osn_selenium/executors/sync/cdp/file_system.py +18 -0
- osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
- osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
- osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
- osn_selenium/executors/sync/cdp/input.py +233 -0
- osn_selenium/executors/sync/cdp/inspector.py +21 -0
- osn_selenium/executors/sync/cdp/io.py +33 -0
- osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
- osn_selenium/executors/sync/cdp/log.py +35 -0
- osn_selenium/executors/sync/cdp/media.py +21 -0
- osn_selenium/executors/sync/cdp/memory.py +62 -0
- osn_selenium/executors/sync/cdp/network.py +287 -0
- osn_selenium/executors/sync/cdp/overlay.py +174 -0
- osn_selenium/executors/sync/cdp/page.py +365 -0
- osn_selenium/executors/sync/cdp/performance.py +33 -0
- osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
- osn_selenium/executors/sync/cdp/preload.py +21 -0
- osn_selenium/executors/sync/cdp/profiler.py +58 -0
- osn_selenium/executors/sync/cdp/pwa.py +55 -0
- osn_selenium/executors/sync/cdp/runtime.py +221 -0
- osn_selenium/executors/sync/cdp/schema.py +23 -0
- osn_selenium/executors/sync/cdp/security.py +30 -0
- osn_selenium/executors/sync/cdp/service_worker.py +56 -0
- osn_selenium/executors/sync/cdp/storage.py +151 -0
- osn_selenium/executors/sync/cdp/system_info.py +30 -0
- osn_selenium/executors/sync/cdp/target.py +147 -0
- osn_selenium/executors/sync/cdp/tethering.py +21 -0
- osn_selenium/executors/sync/cdp/tracing.py +62 -0
- osn_selenium/executors/sync/cdp/web_audio.py +24 -0
- osn_selenium/executors/sync/cdp/web_authn.py +82 -0
- osn_selenium/executors/sync/cdp.py +100 -0
- osn_selenium/executors/sync/javascript.py +79 -0
- osn_selenium/executors/trio_threads/__init__.py +1 -0
- osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
- osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
- osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
- osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
- osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
- osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
- osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
- osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
- osn_selenium/executors/trio_threads/cdp/console.py +33 -0
- osn_selenium/executors/trio_threads/cdp/css.py +196 -0
- osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
- osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
- osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
- osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
- osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
- osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
- osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
- osn_selenium/executors/trio_threads/cdp/input.py +242 -0
- osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
- osn_selenium/executors/trio_threads/cdp/io.py +42 -0
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
- osn_selenium/executors/trio_threads/cdp/log.py +44 -0
- osn_selenium/executors/trio_threads/cdp/media.py +30 -0
- osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
- osn_selenium/executors/trio_threads/cdp/network.py +296 -0
- osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
- osn_selenium/executors/trio_threads/cdp/page.py +374 -0
- osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
- osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
- osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
- osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
- osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
- osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
- osn_selenium/executors/trio_threads/cdp/security.py +43 -0
- osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
- osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
- osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
- osn_selenium/executors/trio_threads/cdp/target.py +156 -0
- osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
- osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
- osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
- osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
- osn_selenium/executors/trio_threads/cdp.py +104 -0
- osn_selenium/executors/trio_threads/javascript.py +90 -0
- osn_selenium/executors/unified/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/accessibility.py +81 -0
- osn_selenium/executors/unified/cdp/animation.py +50 -0
- osn_selenium/executors/unified/cdp/audits.py +45 -0
- osn_selenium/executors/unified/cdp/autofill.py +41 -0
- osn_selenium/executors/unified/cdp/background_service.py +24 -0
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
- osn_selenium/executors/unified/cdp/browser.py +143 -0
- osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
- osn_selenium/executors/unified/cdp/cast.py +32 -0
- osn_selenium/executors/unified/cdp/console.py +18 -0
- osn_selenium/executors/unified/cdp/css.py +237 -0
- osn_selenium/executors/unified/cdp/debugger.py +243 -0
- osn_selenium/executors/unified/cdp/device_access.py +21 -0
- osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
- osn_selenium/executors/unified/cdp/dom.py +380 -0
- osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
- osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
- osn_selenium/executors/unified/cdp/emulation.py +312 -0
- osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
- osn_selenium/executors/unified/cdp/extensions.py +45 -0
- osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
- osn_selenium/executors/unified/cdp/fetch.py +111 -0
- osn_selenium/executors/unified/cdp/file_system.py +15 -0
- osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
- osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
- osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
- osn_selenium/executors/unified/cdp/input.py +254 -0
- osn_selenium/executors/unified/cdp/inspector.py +15 -0
- osn_selenium/executors/unified/cdp/io.py +29 -0
- osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
- osn_selenium/executors/unified/cdp/log.py +29 -0
- osn_selenium/executors/unified/cdp/media.py +15 -0
- osn_selenium/executors/unified/cdp/memory.py +59 -0
- osn_selenium/executors/unified/cdp/network.py +323 -0
- osn_selenium/executors/unified/cdp/overlay.py +209 -0
- osn_selenium/executors/unified/cdp/page.py +410 -0
- osn_selenium/executors/unified/cdp/performance.py +27 -0
- osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
- osn_selenium/executors/unified/cdp/preload.py +15 -0
- osn_selenium/executors/unified/cdp/profiler.py +55 -0
- osn_selenium/executors/unified/cdp/pwa.py +55 -0
- osn_selenium/executors/unified/cdp/runtime.py +245 -0
- osn_selenium/executors/unified/cdp/schema.py +17 -0
- osn_selenium/executors/unified/cdp/security.py +27 -0
- osn_selenium/executors/unified/cdp/service_worker.py +62 -0
- osn_selenium/executors/unified/cdp/storage.py +178 -0
- osn_selenium/executors/unified/cdp/system_info.py +24 -0
- osn_selenium/executors/unified/cdp/target.py +165 -0
- osn_selenium/executors/unified/cdp/tethering.py +15 -0
- osn_selenium/executors/unified/cdp/tracing.py +62 -0
- osn_selenium/executors/unified/cdp/web_audio.py +18 -0
- osn_selenium/executors/unified/cdp/web_authn.py +103 -0
- osn_selenium/executors/unified/javascript.py +104 -0
- osn_selenium/flags/__init__.py +1 -0
- osn_selenium/flags/_functions.py +45 -0
- osn_selenium/flags/_typehints.py +34 -0
- osn_selenium/flags/_validators.py +101 -0
- osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
- osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
- osn_selenium/flags/chrome.py +259 -0
- osn_selenium/flags/edge.py +259 -0
- osn_selenium/flags/models/__init__.py +1 -0
- osn_selenium/flags/models/base.py +130 -0
- osn_selenium/flags/models/blink.py +263 -0
- osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
- osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
- osn_selenium/flags/models/values.py +44 -0
- osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
- osn_selenium/flags/yandex.py +259 -0
- osn_selenium/instances/__init__.py +1 -0
- osn_selenium/instances/_functions.py +242 -0
- osn_selenium/instances/_typehints.py +148 -0
- osn_selenium/instances/_utils.py +143 -0
- osn_selenium/instances/convert.py +287 -0
- osn_selenium/instances/protocols.py +105 -0
- osn_selenium/instances/sync/__init__.py +1 -0
- osn_selenium/instances/sync/action_chains/__init__.py +32 -0
- osn_selenium/instances/sync/action_chains/base.py +74 -0
- osn_selenium/instances/sync/action_chains/click.py +61 -0
- osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
- osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
- osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
- osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
- osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
- osn_selenium/instances/sync/action_chains/move.py +46 -0
- osn_selenium/instances/sync/action_chains/scroll.py +43 -0
- osn_selenium/instances/sync/action_chains/utils.py +30 -0
- osn_selenium/instances/sync/alert.py +69 -0
- osn_selenium/instances/sync/browser.py +72 -0
- osn_selenium/instances/sync/browsing_context.py +193 -0
- osn_selenium/instances/sync/dialog.py +81 -0
- osn_selenium/instances/sync/fedcm.py +92 -0
- osn_selenium/instances/sync/mobile.py +75 -0
- osn_selenium/instances/sync/network.py +90 -0
- osn_selenium/instances/sync/permissions.py +80 -0
- osn_selenium/instances/sync/script.py +77 -0
- osn_selenium/instances/sync/shadow_root.py +113 -0
- osn_selenium/instances/sync/storage.py +91 -0
- osn_selenium/instances/sync/switch_to.py +92 -0
- osn_selenium/instances/sync/web_driver_wait.py +83 -0
- osn_selenium/instances/sync/web_element.py +179 -0
- osn_selenium/instances/sync/web_extension.py +77 -0
- osn_selenium/instances/trio_threads/__init__.py +1 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
- osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
- osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
- osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
- osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
- osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
- osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
- osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
- osn_selenium/instances/trio_threads/alert.py +87 -0
- osn_selenium/instances/trio_threads/browser.py +90 -0
- osn_selenium/instances/trio_threads/browsing_context.py +216 -0
- osn_selenium/instances/trio_threads/dialog.py +99 -0
- osn_selenium/instances/trio_threads/fedcm.py +110 -0
- osn_selenium/instances/trio_threads/mobile.py +93 -0
- osn_selenium/instances/trio_threads/network.py +108 -0
- osn_selenium/instances/trio_threads/permissions.py +102 -0
- osn_selenium/instances/trio_threads/script.py +95 -0
- osn_selenium/instances/trio_threads/shadow_root.py +154 -0
- osn_selenium/instances/trio_threads/storage.py +109 -0
- osn_selenium/instances/trio_threads/switch_to.py +124 -0
- osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
- osn_selenium/instances/trio_threads/web_element.py +217 -0
- osn_selenium/instances/trio_threads/web_extension.py +99 -0
- osn_selenium/instances/unified/__init__.py +1 -0
- osn_selenium/instances/unified/action_chains/__init__.py +22 -0
- osn_selenium/instances/unified/action_chains/base.py +31 -0
- osn_selenium/instances/unified/action_chains/click.py +27 -0
- osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
- osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
- osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
- osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
- osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
- osn_selenium/instances/unified/action_chains/move.py +24 -0
- osn_selenium/instances/unified/action_chains/scroll.py +21 -0
- osn_selenium/instances/unified/action_chains/utils.py +19 -0
- osn_selenium/instances/unified/alert.py +29 -0
- osn_selenium/instances/unified/browser.py +33 -0
- osn_selenium/instances/unified/browsing_context.py +151 -0
- osn_selenium/instances/unified/dialog.py +42 -0
- osn_selenium/instances/unified/fedcm.py +48 -0
- osn_selenium/instances/unified/mobile.py +36 -0
- osn_selenium/instances/unified/network.py +50 -0
- osn_selenium/instances/unified/permissions.py +43 -0
- osn_selenium/instances/unified/script.py +38 -0
- osn_selenium/instances/unified/shadow_root.py +46 -0
- osn_selenium/instances/unified/storage.py +48 -0
- osn_selenium/instances/unified/switch_to.py +49 -0
- osn_selenium/instances/unified/web_driver_wait.py +45 -0
- osn_selenium/instances/unified/web_element.py +145 -0
- osn_selenium/instances/unified/web_extension.py +38 -0
- osn_selenium/javascript/__init__.py +1 -0
- osn_selenium/javascript/_functions.py +63 -0
- osn_selenium/javascript/fingerprint/__init__.py +120 -0
- osn_selenium/javascript/fingerprint/_decorators.py +41 -0
- osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
- osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
- osn_selenium/javascript/fingerprint/_functions.py +35 -0
- osn_selenium/javascript/fingerprint/_typehints.py +27 -0
- osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
- osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
- osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
- osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
- osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
- osn_selenium/javascript/fingerprint/registry/models.py +41 -0
- osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
- osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
- osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
- osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
- osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
- osn_selenium/javascript/functions.py +44 -0
- osn_selenium/javascript/models.py +35 -0
- osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
- osn_selenium/models.py +94 -0
- osn_selenium/trio_threads_mixin.py +159 -0
- osn_selenium/webdrivers/_args_helpers.py +181 -0
- osn_selenium/webdrivers/_bridges.py +57 -0
- osn_selenium/webdrivers/_decorators.py +83 -0
- osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
- osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
- osn_selenium/webdrivers/_executable_tables/models.py +19 -0
- osn_selenium/webdrivers/_typehints.py +10 -0
- osn_selenium/webdrivers/protocols.py +50 -0
- osn_selenium/webdrivers/sync/__init__.py +1 -0
- osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
- osn_selenium/webdrivers/sync/blink/base.py +140 -0
- osn_selenium/webdrivers/sync/blink/casting.py +34 -0
- osn_selenium/webdrivers/sync/blink/features.py +28 -0
- osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/sync/blink/logging.py +25 -0
- osn_selenium/webdrivers/sync/blink/network.py +28 -0
- osn_selenium/webdrivers/sync/blink/settings.py +63 -0
- osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
- osn_selenium/webdrivers/sync/chrome/base.py +118 -0
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
- osn_selenium/webdrivers/sync/core/__init__.py +100 -0
- osn_selenium/webdrivers/sync/core/actions.py +59 -0
- osn_selenium/webdrivers/sync/core/auth.py +77 -0
- osn_selenium/webdrivers/sync/core/base.py +175 -0
- osn_selenium/webdrivers/sync/core/capture.py +37 -0
- osn_selenium/webdrivers/sync/core/comonents.py +57 -0
- osn_selenium/webdrivers/sync/core/devtools.py +47 -0
- osn_selenium/webdrivers/sync/core/element.py +42 -0
- osn_selenium/webdrivers/sync/core/file.py +40 -0
- osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
- osn_selenium/webdrivers/sync/core/navigation.py +36 -0
- osn_selenium/webdrivers/sync/core/script.py +53 -0
- osn_selenium/webdrivers/sync/core/settings.py +35 -0
- osn_selenium/webdrivers/sync/core/storage.py +48 -0
- osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
- osn_selenium/webdrivers/sync/core/window.py +99 -0
- osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
- osn_selenium/webdrivers/sync/edge/base.py +114 -0
- osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/edge/settings.py +58 -0
- osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
- osn_selenium/webdrivers/sync/yandex/base.py +111 -0
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
- osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
- osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
- osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
- osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
- osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
- osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
- osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
- osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
- osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
- osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
- osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
- osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
- osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
- osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
- osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
- osn_selenium/webdrivers/unified/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/base.py +135 -0
- osn_selenium/webdrivers/unified/blink/casting.py +30 -0
- osn_selenium/webdrivers/unified/blink/features.py +22 -0
- osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
- osn_selenium/webdrivers/unified/blink/logging.py +18 -0
- osn_selenium/webdrivers/unified/blink/network.py +22 -0
- osn_selenium/webdrivers/unified/blink/settings.py +86 -0
- osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
- osn_selenium/webdrivers/unified/chrome/base.py +58 -0
- osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
- osn_selenium/webdrivers/unified/core/__init__.py +1 -0
- osn_selenium/webdrivers/unified/core/actions.py +43 -0
- osn_selenium/webdrivers/unified/core/auth.py +70 -0
- osn_selenium/webdrivers/unified/core/base.py +139 -0
- osn_selenium/webdrivers/unified/core/capture.py +32 -0
- osn_selenium/webdrivers/unified/core/components.py +32 -0
- osn_selenium/webdrivers/unified/core/devtools.py +35 -0
- osn_selenium/webdrivers/unified/core/element.py +24 -0
- osn_selenium/webdrivers/unified/core/file.py +35 -0
- osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
- osn_selenium/webdrivers/unified/core/navigation.py +31 -0
- osn_selenium/webdrivers/unified/core/script.py +32 -0
- osn_selenium/webdrivers/unified/core/settings.py +44 -0
- osn_selenium/webdrivers/unified/core/storage.py +37 -0
- osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
- osn_selenium/webdrivers/unified/core/window.py +135 -0
- osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
- osn_selenium/webdrivers/unified/edge/base.py +56 -0
- osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/edge/settings.py +48 -0
- osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
- osn_selenium/webdrivers/unified/yandex/base.py +58 -0
- osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
- osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
- osn_selenium-1.1.0.dist-info/METADATA +252 -0
- osn_selenium-1.1.0.dist-info/RECORD +615 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
- osn_selenium/captcha_workers/__init__.py +0 -26
- osn_selenium/dev_tools/_types.py +0 -22
- osn_selenium/dev_tools/errors.py +0 -89
- osn_selenium/dev_tools/logger.py +0 -558
- osn_selenium/dev_tools/manager.py +0 -1551
- osn_selenium/dev_tools/utils.py +0 -509
- osn_selenium/errors.py +0 -16
- osn_selenium/types.py +0 -118
- osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
- osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
- osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
- osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
- osn_selenium/webdrivers/Blink/protocols.py +0 -330
- osn_selenium/webdrivers/Blink/webdriver.py +0 -637
- osn_selenium/webdrivers/Chrome/protocols.py +0 -228
- osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
- osn_selenium/webdrivers/Edge/protocols.py +0 -228
- osn_selenium/webdrivers/Edge/webdriver.py +0 -394
- osn_selenium/webdrivers/Yandex/protocols.py +0 -211
- osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
- osn_selenium/webdrivers/_functions.py +0 -504
- osn_selenium/webdrivers/types.py +0 -390
- osn_selenium-0.0.0.dist-info/METADATA +0 -710
- osn_selenium-0.0.0.dist-info/RECORD +0 -57
- /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from typing import Any, List, Optional
|
|
2
|
+
from selenium.webdriver.common.by import By
|
|
3
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
4
|
+
from osn_selenium.exceptions.instance import NotExpectedTypeError
|
|
5
|
+
from selenium.webdriver.remote.shadowroot import (
|
|
6
|
+
ShadowRoot as legacyShadowRoot
|
|
7
|
+
)
|
|
8
|
+
from selenium.webdriver.remote.webelement import (
|
|
9
|
+
WebElement as legacyWebElement
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
__all__ = ["UnifiedShadowRoot"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class UnifiedShadowRoot:
|
|
17
|
+
def __init__(self, selenium_shadow_root: legacyShadowRoot):
|
|
18
|
+
if not isinstance(selenium_shadow_root, legacyShadowRoot):
|
|
19
|
+
raise NotExpectedTypeError(expected_type=legacyShadowRoot, received_instance=selenium_shadow_root)
|
|
20
|
+
|
|
21
|
+
self._selenium_shadow_root = selenium_shadow_root
|
|
22
|
+
|
|
23
|
+
def __repr__(self) -> str:
|
|
24
|
+
return self._legacy_impl.__repr__()
|
|
25
|
+
|
|
26
|
+
@property
|
|
27
|
+
def _legacy_impl(self) -> legacyShadowRoot:
|
|
28
|
+
return self._selenium_shadow_root
|
|
29
|
+
|
|
30
|
+
def __eq__(self, other: Any) -> bool:
|
|
31
|
+
return self._legacy_impl == get_legacy_instance(instance=other)
|
|
32
|
+
|
|
33
|
+
def __hash__(self) -> int:
|
|
34
|
+
return self._legacy_impl.__hash__()
|
|
35
|
+
|
|
36
|
+
def __ne__(self, other: Any) -> bool:
|
|
37
|
+
return self._legacy_impl != get_legacy_instance(instance=other)
|
|
38
|
+
|
|
39
|
+
def _find_element_impl(self, by: str = By.ID, value: Optional[str] = None) -> legacyWebElement:
|
|
40
|
+
return self._legacy_impl.find_element(by=by, value=value)
|
|
41
|
+
|
|
42
|
+
def _find_elements_impl(self, by: str = By.ID, value: Optional[str] = None) -> List[legacyWebElement]:
|
|
43
|
+
return self._legacy_impl.find_elements(by=by, value=value)
|
|
44
|
+
|
|
45
|
+
def _id_impl(self) -> str:
|
|
46
|
+
return self._legacy_impl.id
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
from osn_selenium.exceptions.instance import NotExpectedTypeError
|
|
3
|
+
from selenium.webdriver.common.bidi.storage import (
|
|
4
|
+
BrowsingContextPartitionDescriptor,
|
|
5
|
+
CookieFilter,
|
|
6
|
+
DeleteCookiesResult,
|
|
7
|
+
GetCookiesResult,
|
|
8
|
+
PartialCookie,
|
|
9
|
+
SetCookieResult,
|
|
10
|
+
Storage as legacyStorage,
|
|
11
|
+
StorageKeyPartitionDescriptor
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
__all__ = ["UnifiedStorage"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class UnifiedStorage:
|
|
19
|
+
def __init__(self, selenium_storage: legacyStorage):
|
|
20
|
+
if not isinstance(selenium_storage, legacyStorage):
|
|
21
|
+
raise NotExpectedTypeError(expected_type=legacyStorage, received_instance=selenium_storage)
|
|
22
|
+
|
|
23
|
+
self._selenium_storage = selenium_storage
|
|
24
|
+
|
|
25
|
+
def _delete_cookies_impl(
|
|
26
|
+
self,
|
|
27
|
+
filter: Optional[CookieFilter] = None,
|
|
28
|
+
partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
|
|
29
|
+
) -> DeleteCookiesResult:
|
|
30
|
+
return self._legacy_impl.delete_cookies(filter=filter, partition=partition)
|
|
31
|
+
|
|
32
|
+
def _get_cookies_impl(
|
|
33
|
+
self,
|
|
34
|
+
filter: Optional[CookieFilter],
|
|
35
|
+
partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
|
|
36
|
+
) -> GetCookiesResult:
|
|
37
|
+
return self._legacy_impl.get_cookies(filter=filter, partition=partition)
|
|
38
|
+
|
|
39
|
+
@property
|
|
40
|
+
def _legacy_impl(self) -> legacyStorage:
|
|
41
|
+
return self._selenium_storage
|
|
42
|
+
|
|
43
|
+
def _set_cookie_impl(
|
|
44
|
+
self,
|
|
45
|
+
cookie: PartialCookie,
|
|
46
|
+
partition: Optional[Union[BrowsingContextPartitionDescriptor, StorageKeyPartitionDescriptor]] = None,
|
|
47
|
+
) -> SetCookieResult:
|
|
48
|
+
return self._legacy_impl.set_cookie(cookie=cookie, partition=partition)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from typing import Optional, Union
|
|
2
|
+
from selenium.webdriver.common.alert import Alert as legacyAlert
|
|
3
|
+
from osn_selenium.exceptions.instance import NotExpectedTypeError
|
|
4
|
+
from osn_selenium.instances._typehints import WEB_ELEMENT_TYPEHINT
|
|
5
|
+
from osn_selenium.instances.convert import (
|
|
6
|
+
get_legacy_frame_reference
|
|
7
|
+
)
|
|
8
|
+
from selenium.webdriver.remote.switch_to import (
|
|
9
|
+
SwitchTo as legacySwitchTo
|
|
10
|
+
)
|
|
11
|
+
from selenium.webdriver.remote.webelement import (
|
|
12
|
+
WebElement as legacyWebElement
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
__all__ = ["UnifiedSwitchTo"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class UnifiedSwitchTo:
|
|
20
|
+
def __init__(self, selenium_switch_to: legacySwitchTo):
|
|
21
|
+
if not isinstance(selenium_switch_to, legacySwitchTo):
|
|
22
|
+
raise NotExpectedTypeError(expected_type=legacySwitchTo, received_instance=selenium_switch_to)
|
|
23
|
+
|
|
24
|
+
self._selenium_switch_to = selenium_switch_to
|
|
25
|
+
|
|
26
|
+
def _active_element_impl(self) -> legacyWebElement:
|
|
27
|
+
return self._legacy_impl.active_element
|
|
28
|
+
|
|
29
|
+
def _alert_impl(self) -> legacyAlert:
|
|
30
|
+
return self._legacy_impl.alert
|
|
31
|
+
|
|
32
|
+
def _default_content_impl(self) -> None:
|
|
33
|
+
self._legacy_impl.default_content()
|
|
34
|
+
|
|
35
|
+
def _frame_impl(self, frame_reference: Union[str, int, WEB_ELEMENT_TYPEHINT]) -> None:
|
|
36
|
+
self._legacy_impl.frame(frame_reference=get_legacy_frame_reference(frame_reference))
|
|
37
|
+
|
|
38
|
+
@property
|
|
39
|
+
def _legacy_impl(self) -> legacySwitchTo:
|
|
40
|
+
return self._selenium_switch_to
|
|
41
|
+
|
|
42
|
+
def _new_window_impl(self, type_hint: Optional[str] = None) -> None:
|
|
43
|
+
self._legacy_impl.new_window(type_hint=type_hint)
|
|
44
|
+
|
|
45
|
+
def _parent_frame_impl(self) -> None:
|
|
46
|
+
self._legacy_impl.parent_frame()
|
|
47
|
+
|
|
48
|
+
def _window_impl(self, window_name: str) -> None:
|
|
49
|
+
self._legacy_impl.window(window_name=window_name)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from typing import Callable, TypeVar
|
|
2
|
+
from osn_selenium.exceptions.instance import NotExpectedTypeError
|
|
3
|
+
from osn_selenium.instances._typehints import (
|
|
4
|
+
WebDriverWaitInputType
|
|
5
|
+
)
|
|
6
|
+
from selenium.webdriver.support.wait import (
|
|
7
|
+
WebDriverWait as legacyWebDriverWait
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
__all__ = ["OUTPUT", "UnifiedWebDriverWait"]
|
|
12
|
+
|
|
13
|
+
OUTPUT = TypeVar("OUTPUT")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class UnifiedWebDriverWait:
|
|
17
|
+
def __init__(self, selenium_webdriver_wait: legacyWebDriverWait):
|
|
18
|
+
if not isinstance(selenium_webdriver_wait, legacyWebDriverWait):
|
|
19
|
+
raise NotExpectedTypeError(
|
|
20
|
+
expected_type=legacyWebDriverWait,
|
|
21
|
+
received_instance=selenium_webdriver_wait
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
self._selenium_webdriver_wait = selenium_webdriver_wait
|
|
25
|
+
|
|
26
|
+
def __repr__(self) -> str:
|
|
27
|
+
return self._legacy_impl.__repr__()
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def _legacy_impl(self) -> legacyWebDriverWait:
|
|
31
|
+
return self._selenium_webdriver_wait
|
|
32
|
+
|
|
33
|
+
def _until_impl(
|
|
34
|
+
self,
|
|
35
|
+
method: Callable[[WebDriverWaitInputType], OUTPUT],
|
|
36
|
+
message: str = ""
|
|
37
|
+
) -> OUTPUT:
|
|
38
|
+
return self._legacy_impl.until(method=method, message=message)
|
|
39
|
+
|
|
40
|
+
def _until_not_impl(
|
|
41
|
+
self,
|
|
42
|
+
method: Callable[[WebDriverWaitInputType], OUTPUT],
|
|
43
|
+
message: str = ""
|
|
44
|
+
) -> OUTPUT:
|
|
45
|
+
return self._legacy_impl.until_not(method=method, message=message)
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
from selenium.webdriver.common.by import By
|
|
2
|
+
from osn_selenium.instances.convert import get_legacy_instance
|
|
3
|
+
from typing import (
|
|
4
|
+
Any,
|
|
5
|
+
Dict,
|
|
6
|
+
Iterable,
|
|
7
|
+
List,
|
|
8
|
+
Optional
|
|
9
|
+
)
|
|
10
|
+
from selenium.webdriver.remote.shadowroot import (
|
|
11
|
+
ShadowRoot as legacyShadowRoot
|
|
12
|
+
)
|
|
13
|
+
from selenium.webdriver.remote.webelement import (
|
|
14
|
+
WebElement as legacyWebElement
|
|
15
|
+
)
|
|
16
|
+
from selenium.webdriver.support.wait import (
|
|
17
|
+
WebDriverWait as legacyWebDriverWait
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
__all__ = ["UnifiedWebElement"]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class UnifiedWebElement:
|
|
25
|
+
def __init__(self, selenium_web_element: legacyWebElement):
|
|
26
|
+
if not isinstance(selenium_web_element, legacyWebElement):
|
|
27
|
+
raise ExpectedTypeError(
|
|
28
|
+
expected_class=legacyWebElement,
|
|
29
|
+
received_instance=selenium_web_element
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
self._selenium_web_element = selenium_web_element
|
|
33
|
+
|
|
34
|
+
def __repr__(self) -> str:
|
|
35
|
+
return self._legacy_impl.__repr__()
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def _legacy_impl(self) -> legacyWebElement:
|
|
39
|
+
return self._selenium_web_element
|
|
40
|
+
|
|
41
|
+
def __eq__(self, other: Any) -> bool:
|
|
42
|
+
return self._legacy_impl == get_legacy_instance(instance=other)
|
|
43
|
+
|
|
44
|
+
def __hash__(self) -> int:
|
|
45
|
+
return self._legacy_impl.__hash__()
|
|
46
|
+
|
|
47
|
+
def __ne__(self, other: Any) -> bool:
|
|
48
|
+
return self._legacy_impl != get_legacy_instance(instance=other)
|
|
49
|
+
|
|
50
|
+
def _accessible_name_impl(self) -> str:
|
|
51
|
+
return self._legacy_impl.accessible_name
|
|
52
|
+
|
|
53
|
+
def _aria_role_impl(self) -> str:
|
|
54
|
+
return self._legacy_impl.aria_role
|
|
55
|
+
|
|
56
|
+
def _clear_impl(self) -> None:
|
|
57
|
+
self._legacy_impl.clear()
|
|
58
|
+
|
|
59
|
+
def _click_impl(self) -> None:
|
|
60
|
+
self._legacy_impl.click()
|
|
61
|
+
|
|
62
|
+
def _find_element_impl(self, by: str = By.ID, value: Any = None) -> legacyWebElement:
|
|
63
|
+
return self._legacy_impl.find_element(by=by, value=value)
|
|
64
|
+
|
|
65
|
+
def _find_elements_impl(self, by: str = By.ID, value: Any = None) -> List[legacyWebElement]:
|
|
66
|
+
return self._legacy_impl.find_elements(by=by, value=value)
|
|
67
|
+
|
|
68
|
+
def _get_attribute_impl(self, name: str) -> Optional[str]:
|
|
69
|
+
return self._legacy_impl.get_attribute(name=name)
|
|
70
|
+
|
|
71
|
+
def _get_dom_attribute_impl(self, name: str) -> Optional[str]:
|
|
72
|
+
return self._legacy_impl.get_dom_attribute(name=name)
|
|
73
|
+
|
|
74
|
+
def _get_property_impl(self, name: str) -> Any:
|
|
75
|
+
return self._legacy_impl.get_property(name=name)
|
|
76
|
+
|
|
77
|
+
def _id_impl(self) -> str:
|
|
78
|
+
return self._legacy_impl.id
|
|
79
|
+
|
|
80
|
+
def _is_displayed_impl(self) -> bool:
|
|
81
|
+
return self._legacy_impl.is_displayed()
|
|
82
|
+
|
|
83
|
+
def _is_enabled_impl(self) -> bool:
|
|
84
|
+
return self._legacy_impl.is_enabled()
|
|
85
|
+
|
|
86
|
+
def _is_selected_impl(self) -> bool:
|
|
87
|
+
return self._legacy_impl.is_selected()
|
|
88
|
+
|
|
89
|
+
def _location_impl(self) -> Dict:
|
|
90
|
+
return self._legacy_impl.location
|
|
91
|
+
|
|
92
|
+
def _location_once_scrolled_into_view_impl(self) -> Dict:
|
|
93
|
+
return self._legacy_impl.location_once_scrolled_into_view
|
|
94
|
+
|
|
95
|
+
def _parent_impl(self) -> Any:
|
|
96
|
+
return self._legacy_impl.parent
|
|
97
|
+
|
|
98
|
+
def _rect_impl(self) -> Dict:
|
|
99
|
+
return self._legacy_impl.rect
|
|
100
|
+
|
|
101
|
+
def _screenshot_as_base64_impl(self) -> str:
|
|
102
|
+
return self._legacy_impl.screenshot_as_base64
|
|
103
|
+
|
|
104
|
+
def _screenshot_as_png_impl(self) -> bytes:
|
|
105
|
+
return self._legacy_impl.screenshot_as_png
|
|
106
|
+
|
|
107
|
+
def _screenshot_impl(self, filename: str) -> bool:
|
|
108
|
+
return self._legacy_impl.screenshot(filename=filename)
|
|
109
|
+
|
|
110
|
+
def _send_keys_impl(self, *value: str) -> None:
|
|
111
|
+
self._legacy_impl.send_keys(*value)
|
|
112
|
+
|
|
113
|
+
def _session_id_impl(self) -> str:
|
|
114
|
+
return self._legacy_impl.session_id
|
|
115
|
+
|
|
116
|
+
def _shadow_root_impl(self) -> legacyShadowRoot:
|
|
117
|
+
return self._legacy_impl.shadow_root
|
|
118
|
+
|
|
119
|
+
def _size_impl(self) -> Dict:
|
|
120
|
+
return self._legacy_impl.size
|
|
121
|
+
|
|
122
|
+
def _submit_impl(self) -> None:
|
|
123
|
+
self._legacy_impl.submit()
|
|
124
|
+
|
|
125
|
+
def _tag_name_impl(self) -> str:
|
|
126
|
+
return self._legacy_impl.tag_name
|
|
127
|
+
|
|
128
|
+
def _text_impl(self) -> str:
|
|
129
|
+
return self._legacy_impl.text
|
|
130
|
+
|
|
131
|
+
def _value_of_css_property_impl(self, property_name: str) -> str:
|
|
132
|
+
return self._legacy_impl.value_of_css_property(property_name=property_name)
|
|
133
|
+
|
|
134
|
+
def _web_driver_wait_impl(
|
|
135
|
+
self,
|
|
136
|
+
timeout: float,
|
|
137
|
+
poll_frequency: float = 0.5,
|
|
138
|
+
ignored_exceptions: Optional[Iterable[BaseException]] = None,
|
|
139
|
+
) -> legacyWebDriverWait:
|
|
140
|
+
return legacyWebDriverWait(
|
|
141
|
+
driver=self._legacy_impl,
|
|
142
|
+
timeout=timeout,
|
|
143
|
+
poll_frequency=poll_frequency,
|
|
144
|
+
ignored_exceptions=ignored_exceptions
|
|
145
|
+
)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
Dict,
|
|
3
|
+
Optional,
|
|
4
|
+
Union
|
|
5
|
+
)
|
|
6
|
+
from osn_selenium.exceptions.instance import NotExpectedTypeError
|
|
7
|
+
from selenium.webdriver.common.bidi.webextension import (
|
|
8
|
+
WebExtension as legacyWebExtension
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
__all__ = ["UnifiedWebExtension"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class UnifiedWebExtension:
|
|
16
|
+
def __init__(self, selenium_web_extension: legacyWebExtension):
|
|
17
|
+
if not isinstance(selenium_web_extension, legacyWebExtension):
|
|
18
|
+
raise NotExpectedTypeError(
|
|
19
|
+
expected_type=legacyWebExtension,
|
|
20
|
+
received_instance=selenium_web_extension
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
self._selenium_web_extension = selenium_web_extension
|
|
24
|
+
|
|
25
|
+
def _install_impl(
|
|
26
|
+
self,
|
|
27
|
+
path: Optional[str] = None,
|
|
28
|
+
archive_path: Optional[str] = None,
|
|
29
|
+
base64_value: Optional[str] = None,
|
|
30
|
+
) -> Dict:
|
|
31
|
+
return self._legacy_impl.install(path=path, archive_path=archive_path, base64_value=base64_value)
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def _legacy_impl(self) -> legacyWebExtension:
|
|
35
|
+
return self._selenium_web_extension
|
|
36
|
+
|
|
37
|
+
def _uninstall_impl(self, extension_id_or_result: Union[str, Dict]) -> None:
|
|
38
|
+
self._legacy_impl.uninstall(extension_id_or_result=extension_id_or_result)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
Any,
|
|
3
|
+
Iterable,
|
|
4
|
+
Mapping
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
__all__ = ["convert_to_js_value", "inject_data_in_js_script"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def convert_to_js_value(value: Any) -> str:
|
|
12
|
+
"""
|
|
13
|
+
Converts a Python value to its JavaScript string representation.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
value (Any): The value to convert. Can be a boolean, string, mapping, iterable, or None.
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
str: The JavaScript string representation of the value.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
if isinstance(value, (str, bytes)):
|
|
23
|
+
return f'"{value}"'
|
|
24
|
+
|
|
25
|
+
if isinstance(value, bool):
|
|
26
|
+
return "true" if value else "false"
|
|
27
|
+
|
|
28
|
+
if value is None:
|
|
29
|
+
return "null"
|
|
30
|
+
|
|
31
|
+
if isinstance(value, Mapping):
|
|
32
|
+
return f"{{{', '.join(f'{k}: {convert_to_js_value(value=v)}' for k, v in value.items())}}}"
|
|
33
|
+
|
|
34
|
+
if isinstance(value, Iterable):
|
|
35
|
+
return f"[{', '.join(convert_to_js_value(value=v) for v in value)}]"
|
|
36
|
+
|
|
37
|
+
return str(value)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def inject_data_in_js_script(script: str, data: Mapping[str, Any], convert_to_js: bool = True) -> str:
|
|
41
|
+
"""
|
|
42
|
+
Injects data into a JavaScript template string by replacing placeholders.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
script (str): The JavaScript template string.
|
|
46
|
+
data (Mapping[str, Any]): A dictionary mapping placeholders to values.
|
|
47
|
+
convert_to_js (bool): If True, converts values to JS syntax before replacement.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
str: The modified JavaScript string with data injected.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
injected_script = script
|
|
54
|
+
|
|
55
|
+
for placeholder, value in data.items():
|
|
56
|
+
if convert_to_js:
|
|
57
|
+
replacement = convert_to_js_value(value)
|
|
58
|
+
else:
|
|
59
|
+
replacement = str(value)
|
|
60
|
+
|
|
61
|
+
injected_script = injected_script.replace(placeholder, replacement)
|
|
62
|
+
|
|
63
|
+
return injected_script
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
from pydantic import Field
|
|
2
|
+
from typing import Dict, List, Literal
|
|
3
|
+
from osn_selenium._base_models import DictModel
|
|
4
|
+
from osn_selenium.javascript.functions import get_js_scripts
|
|
5
|
+
from osn_selenium.javascript.fingerprint._functions import add_code_level
|
|
6
|
+
from osn_selenium.javascript.fingerprint.registry.models import RegistryItem
|
|
7
|
+
from osn_selenium.javascript.fingerprint._detect.functions import get_hook_js
|
|
8
|
+
from osn_selenium.javascript.fingerprint.registry import FINGERPRINT_REGISTRY
|
|
9
|
+
from osn_selenium.javascript.fingerprint._typehints import SPOOF_RULE_TYPEHINT
|
|
10
|
+
from osn_selenium.javascript._functions import (
|
|
11
|
+
convert_to_js_value,
|
|
12
|
+
inject_data_in_js_script
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
__all__ = ["FingerprintSettings"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class FingerprintSettings(DictModel):
|
|
20
|
+
"""
|
|
21
|
+
Configuration settings for browser fingerprinting detection and spoofing.
|
|
22
|
+
|
|
23
|
+
Attributes:
|
|
24
|
+
optimize_events (bool): Whether to optimize event reporting to avoid duplicates.
|
|
25
|
+
detect_events_mode (Literal["disable", "always", "not_spoofed"]): Logic for reporting detected events.
|
|
26
|
+
registry (Dict[str, RegistryItem]): Custom registry items to override or extend defaults.
|
|
27
|
+
use_preset_registry (bool): Whether to include the default built-in registry.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
optimize_events: bool = True
|
|
31
|
+
detect_events_mode: Literal["disable", "always", "not_spoofed"] = "not_spoofed"
|
|
32
|
+
|
|
33
|
+
registry: Dict[str, RegistryItem] = Field(default_factory=dict)
|
|
34
|
+
use_preset_registry: bool = True
|
|
35
|
+
|
|
36
|
+
def _get_registry(self) -> Dict[str, RegistryItem]:
|
|
37
|
+
"""
|
|
38
|
+
Compiles the final registry by merging presets with custom user overrides.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
Dict[str, RegistryItem]: The active registry map.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
if self.use_preset_registry:
|
|
45
|
+
registry_ = FINGERPRINT_REGISTRY.copy()
|
|
46
|
+
else:
|
|
47
|
+
registry_ = {}
|
|
48
|
+
|
|
49
|
+
if self.registry:
|
|
50
|
+
registry_.update(**self.registry)
|
|
51
|
+
|
|
52
|
+
return registry_
|
|
53
|
+
|
|
54
|
+
def _generate_hooks_js(self) -> str:
|
|
55
|
+
"""
|
|
56
|
+
Generates the JavaScript code that hooks into browser APIs for detection and spoofing.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
str: The generated hooks block.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
registry_ = self._get_registry()
|
|
63
|
+
|
|
64
|
+
hooks: List[str] = []
|
|
65
|
+
register_items = {item.path: item for item in registry_.values()}
|
|
66
|
+
|
|
67
|
+
for path, entry in register_items.items():
|
|
68
|
+
is_spoofed: bool = entry is not None and entry.spoofing_rule is not None
|
|
69
|
+
is_detected: bool = (
|
|
70
|
+
self.detect_events_mode == "always"
|
|
71
|
+
or self.detect_events_mode == "not_spoofed"
|
|
72
|
+
and not is_spoofed
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
hooks.append(
|
|
76
|
+
get_hook_js(path=path, entry=entry, is_detected=is_detected, is_spoofed=is_spoofed)
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
return "\n".join(hooks)
|
|
80
|
+
|
|
81
|
+
def _generate_modifiers_js(self) -> str:
|
|
82
|
+
"""
|
|
83
|
+
Generates the JavaScript code that defines spoofing modifiers.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
str: The generated modifiers block.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
registry_ = self._get_registry()
|
|
90
|
+
lines = []
|
|
91
|
+
|
|
92
|
+
for key, parameter in registry_.items():
|
|
93
|
+
if parameter.spoofing_rule is not None:
|
|
94
|
+
js_func = parameter.spoofing_rule.generate_js(path=parameter.path)
|
|
95
|
+
lines.append(f"MODIFIERS['{parameter.path}'] = {js_func};")
|
|
96
|
+
|
|
97
|
+
return "\n".join(lines)
|
|
98
|
+
|
|
99
|
+
def generate_js(self) -> str:
|
|
100
|
+
"""
|
|
101
|
+
Generates the complete JavaScript code to inject into the browser.
|
|
102
|
+
|
|
103
|
+
This methods combines the fingerprint injection script with the dynamic
|
|
104
|
+
modifiers and detection hooks based on the current configuration.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
str: The executable JavaScript code.
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
scripts = get_js_scripts()
|
|
111
|
+
|
|
112
|
+
return inject_data_in_js_script(
|
|
113
|
+
script=scripts.start_fingerprint_detection,
|
|
114
|
+
data={
|
|
115
|
+
"__MODIFIERS_PLACEHOLDER__": add_code_level(code=self._generate_modifiers_js(), num=1),
|
|
116
|
+
"__DETECTION_PLACEHOLDER__": add_code_level(code=self._generate_hooks_js(), num=1),
|
|
117
|
+
"__SETTINGS__PLACEHOLDER__": convert_to_js_value(value={"optimize_events": self.optimize_events})
|
|
118
|
+
},
|
|
119
|
+
convert_to_js=False,
|
|
120
|
+
)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
from typing import (
|
|
3
|
+
Any,
|
|
4
|
+
Callable,
|
|
5
|
+
ParamSpec,
|
|
6
|
+
TypeVar
|
|
7
|
+
)
|
|
8
|
+
from osn_selenium.javascript.fingerprint._functions import add_code_level
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
__all__ = ["indent_code"]
|
|
12
|
+
|
|
13
|
+
_METHOD_INPUT = ParamSpec("_METHOD_INPUT")
|
|
14
|
+
_METHOD_OUTPUT = TypeVar("_METHOD_OUTPUT")
|
|
15
|
+
_METHOD = TypeVar("_METHOD", bound=Callable[..., Any])
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def indent_code(func: _METHOD) -> _METHOD:
|
|
19
|
+
"""
|
|
20
|
+
Decorator that indents the result of a function which returns a string code block.
|
|
21
|
+
|
|
22
|
+
If the result is empty, it returns an empty string. Otherwise, it adds one level
|
|
23
|
+
of indentation (tab) to the result.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
func (_METHOD): The function to wrap.
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
_METHOD: The wrapped function.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
@functools.wraps(func)
|
|
33
|
+
def wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
|
|
34
|
+
result = func(*args, **kwargs)
|
|
35
|
+
|
|
36
|
+
if not result:
|
|
37
|
+
return ""
|
|
38
|
+
|
|
39
|
+
return add_code_level(code=result, num=1)
|
|
40
|
+
|
|
41
|
+
return wrapper
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|