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,79 +1,23 @@
|
|
|
1
|
-
import
|
|
2
|
-
from typing import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Union
|
|
6
|
-
)
|
|
7
|
-
from selenium.webdriver.chrome.options import Options
|
|
8
|
-
from osn_selenium.webdrivers.Blink.flags import BlinkFeatures
|
|
9
|
-
from osn_selenium.webdrivers.types import (
|
|
10
|
-
FlagDefinition,
|
|
11
|
-
FlagType
|
|
12
|
-
)
|
|
13
|
-
from osn_selenium.webdrivers.Chrome.flags import (
|
|
1
|
+
from pydantic import Field
|
|
2
|
+
from typing import Optional
|
|
3
|
+
from osn_selenium.flags.models.blink import BlinkFeatures
|
|
4
|
+
from osn_selenium.flags.models.chrome import (
|
|
14
5
|
ChromeArguments,
|
|
15
6
|
ChromeAttributes,
|
|
16
7
|
ChromeExperimentalOptions,
|
|
17
|
-
|
|
8
|
+
ChromeFlags
|
|
18
9
|
)
|
|
19
10
|
|
|
20
11
|
|
|
21
|
-
|
|
22
|
-
""
|
|
23
|
-
|
|
12
|
+
__all__ = [
|
|
13
|
+
"YandexArguments",
|
|
14
|
+
"YandexAttributes",
|
|
15
|
+
"YandexExperimentalOptions",
|
|
16
|
+
"YandexFlags"
|
|
17
|
+
]
|
|
24
18
|
|
|
25
|
-
This class extends BrowserOptionsManager to provide specific configurations
|
|
26
|
-
for Yandex Browser options, such as experimental options and arguments.
|
|
27
19
|
|
|
28
|
-
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
def __init__(
|
|
32
|
-
self,
|
|
33
|
-
browser_exe: Optional[Union[str, pathlib.Path]] = None,
|
|
34
|
-
start_page_url: Optional[str] = None,
|
|
35
|
-
flags_types: Optional[dict[str, FlagType]] = None,
|
|
36
|
-
flags_definitions: Optional[dict[str, FlagDefinition]] = None
|
|
37
|
-
):
|
|
38
|
-
"""
|
|
39
|
-
Initializes YandexOptionsManager.
|
|
40
|
-
|
|
41
|
-
Sets up the Yandex Browser options manager with specific option configurations for
|
|
42
|
-
debugging port, user agent, proxy, and BiDi protocol.
|
|
43
|
-
"""
|
|
44
|
-
|
|
45
|
-
yandex_flags_types = {}
|
|
46
|
-
|
|
47
|
-
if flags_types is not None:
|
|
48
|
-
yandex_flags_types.update(flags_types)
|
|
49
|
-
|
|
50
|
-
yandex_flags_definitions = {}
|
|
51
|
-
|
|
52
|
-
if flags_definitions is not None:
|
|
53
|
-
yandex_flags_definitions.update(flags_definitions)
|
|
54
|
-
|
|
55
|
-
super().__init__(
|
|
56
|
-
browser_exe=browser_exe,
|
|
57
|
-
start_page_url=start_page_url,
|
|
58
|
-
flags_types=yandex_flags_types,
|
|
59
|
-
flags_definitions=yandex_flags_definitions,
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
def _renew_webdriver_options(self) -> Options:
|
|
63
|
-
"""
|
|
64
|
-
Creates and returns a new Options object.
|
|
65
|
-
|
|
66
|
-
Returns a fresh instance of `webdriver.ChromeOptions`, as Yandex Browser is based on Chromium,
|
|
67
|
-
allowing for a clean state of browser options to be configured.
|
|
68
|
-
|
|
69
|
-
Returns:
|
|
70
|
-
Options: A new Selenium Yandex Browser options object, based on ChromeOptions.
|
|
71
|
-
"""
|
|
72
|
-
|
|
73
|
-
return Options()
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
class YandexAttributes(ChromeAttributes, total=False):
|
|
20
|
+
class YandexAttributes(ChromeAttributes):
|
|
77
21
|
"""
|
|
78
22
|
Typed dictionary for WebDriver attributes specific to Yandex browsers.
|
|
79
23
|
|
|
@@ -84,7 +28,7 @@ class YandexAttributes(ChromeAttributes, total=False):
|
|
|
84
28
|
pass
|
|
85
29
|
|
|
86
30
|
|
|
87
|
-
class YandexExperimentalOptions(ChromeExperimentalOptions
|
|
31
|
+
class YandexExperimentalOptions(ChromeExperimentalOptions):
|
|
88
32
|
"""
|
|
89
33
|
Typed dictionary for experimental options specific to Yandex browsers.
|
|
90
34
|
|
|
@@ -95,7 +39,7 @@ class YandexExperimentalOptions(ChromeExperimentalOptions, total=False):
|
|
|
95
39
|
pass
|
|
96
40
|
|
|
97
41
|
|
|
98
|
-
class YandexArguments(ChromeArguments
|
|
42
|
+
class YandexArguments(ChromeArguments):
|
|
99
43
|
"""
|
|
100
44
|
Typed dictionary for command-line arguments specific to Yandex browsers.
|
|
101
45
|
|
|
@@ -162,7 +106,7 @@ class YandexArguments(ChromeArguments, total=False):
|
|
|
162
106
|
proxy_server (Optional[str]): Specifies a proxy server to use.
|
|
163
107
|
remote_debugging_port (Optional[int]): Specifies the remote debugging port.
|
|
164
108
|
remote_debugging_address (Optional[str]): Specifies the remote debugging address.
|
|
165
|
-
use_file_for_fake_video_capture (Optional[
|
|
109
|
+
use_file_for_fake_video_capture (Optional[PATH_TYPEHINT]): Uses a file for fake video capture.
|
|
166
110
|
autoplay_policy (Optional[AutoplayPolicyType]): Sets the autoplay policy.
|
|
167
111
|
log_level (Optional[LogLevelType]): Sets the browser's log level.
|
|
168
112
|
use_gl (Optional[UseGLType]): Specifies the GL backend to use.
|
|
@@ -172,7 +116,7 @@ class YandexArguments(ChromeArguments, total=False):
|
|
|
172
116
|
pass
|
|
173
117
|
|
|
174
118
|
|
|
175
|
-
class YandexFlags(
|
|
119
|
+
class YandexFlags(ChromeFlags):
|
|
176
120
|
"""
|
|
177
121
|
Typed dictionary representing a collection of all flag types for Yandex browsers.
|
|
178
122
|
|
|
@@ -186,7 +130,13 @@ class YandexFlags(TypedDict, total=False):
|
|
|
186
130
|
blink_feature (BlinkFeatures): Blink-specific feature flags.
|
|
187
131
|
"""
|
|
188
132
|
|
|
189
|
-
argument: YandexArguments
|
|
190
|
-
experimental_option: YandexExperimentalOptions
|
|
191
|
-
attribute: YandexAttributes
|
|
192
|
-
blink_feature: BlinkFeatures
|
|
133
|
+
argument: YandexArguments = Field(default_factory=YandexArguments)
|
|
134
|
+
experimental_option: YandexExperimentalOptions = Field(default_factory=YandexExperimentalOptions)
|
|
135
|
+
attribute: YandexAttributes = Field(default_factory=YandexAttributes)
|
|
136
|
+
blink_feature: BlinkFeatures = Field(default_factory=BlinkFeatures)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
YandexArguments.model_rebuild()
|
|
140
|
+
YandexExperimentalOptions.model_rebuild()
|
|
141
|
+
YandexAttributes.model_rebuild()
|
|
142
|
+
YandexFlags.model_rebuild()
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
from typing import Dict, Optional
|
|
2
|
+
from osn_selenium._typehints import PATH_TYPEHINT
|
|
3
|
+
from selenium.webdriver.chrome.options import Options
|
|
4
|
+
from osn_selenium.flags.chrome import ChromeFlagsManager
|
|
5
|
+
from osn_selenium.flags.models.blink import BlinkFeatures
|
|
6
|
+
from osn_selenium.flags.models.base import (
|
|
7
|
+
FlagDefinition,
|
|
8
|
+
FlagType
|
|
9
|
+
)
|
|
10
|
+
from osn_selenium.flags.models.yandex import (
|
|
11
|
+
YandexArguments,
|
|
12
|
+
YandexAttributes,
|
|
13
|
+
YandexExperimentalOptions,
|
|
14
|
+
YandexFlags
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
__all__ = ["YandexFlagsManager"]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class YandexFlagsManager(ChromeFlagsManager):
|
|
22
|
+
"""
|
|
23
|
+
Manages Yandex Browser-specific options for Selenium WebDriver.
|
|
24
|
+
|
|
25
|
+
This class extends BrowserOptionsManager to provide specific configurations
|
|
26
|
+
for Yandex Browser options, such as experimental options and arguments.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(
|
|
32
|
+
self,
|
|
33
|
+
browser_exe: Optional[PATH_TYPEHINT] = None,
|
|
34
|
+
start_page_url: Optional[str] = None,
|
|
35
|
+
flags_types: Optional[Dict[str, FlagType]] = None,
|
|
36
|
+
flags_definitions: Optional[Dict[str, FlagDefinition]] = None
|
|
37
|
+
):
|
|
38
|
+
"""
|
|
39
|
+
Initializes YandexOptionsManager.
|
|
40
|
+
|
|
41
|
+
Sets up the Yandex Browser options manager with specific option configurations for
|
|
42
|
+
debugging port, user agent, proxy, and BiDi protocol.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
yandex_flags_types = {}
|
|
46
|
+
|
|
47
|
+
if flags_types is not None:
|
|
48
|
+
yandex_flags_types.update(flags_types)
|
|
49
|
+
|
|
50
|
+
yandex_flags_definitions = {}
|
|
51
|
+
|
|
52
|
+
if flags_definitions is not None:
|
|
53
|
+
yandex_flags_definitions.update(flags_definitions)
|
|
54
|
+
|
|
55
|
+
super().__init__(
|
|
56
|
+
browser_exe=browser_exe,
|
|
57
|
+
start_page_url=start_page_url,
|
|
58
|
+
flags_types=yandex_flags_types,
|
|
59
|
+
flags_definitions=yandex_flags_definitions,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
def _build_options_arguments(self, options: Options) -> Options:
|
|
63
|
+
"""
|
|
64
|
+
Adds configured command-line arguments to the WebDriver options.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
options (Options): The WebDriver options object.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Options: The modified WebDriver options object.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
return super()._build_options_arguments(options)
|
|
74
|
+
|
|
75
|
+
def _build_options_attributes(self, options: Options) -> Options:
|
|
76
|
+
"""
|
|
77
|
+
Applies configured attributes to the WebDriver options.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
options (Options): The WebDriver options object.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
Options: The modified WebDriver options object.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
return super()._build_options_attributes(options)
|
|
87
|
+
|
|
88
|
+
def _build_options_blink_features(self, options: Options) -> Options:
|
|
89
|
+
"""
|
|
90
|
+
Adds configured Yandex features (`--enable-blink-features` and `--disable-blink-features`) to the WebDriver options.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
options (Options): The WebDriver options object to modify.
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
Options: The modified WebDriver options object.
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
return super()._build_options_blink_features(options)
|
|
100
|
+
|
|
101
|
+
def _build_options_experimental_options(self, options: Options) -> Options:
|
|
102
|
+
"""
|
|
103
|
+
Adds experimental options to the WebDriver options.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
options (Options): The WebDriver options object.
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
Options: The modified WebDriver options object.
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
return super()._build_options_experimental_options(options)
|
|
113
|
+
|
|
114
|
+
def _renew_webdriver_options(self) -> Options:
|
|
115
|
+
"""
|
|
116
|
+
Creates and returns a new Options object.
|
|
117
|
+
|
|
118
|
+
Returns a fresh instance of `webdriver.ChromeOptions`, as Yandex Browser is based on Chromium,
|
|
119
|
+
allowing for a clean state of browser options to be configured.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
Options: A new Selenium Yandex Browser options object, based on ChromeOptions.
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
return Options()
|
|
126
|
+
|
|
127
|
+
def set_arguments(self, arguments: YandexArguments):
|
|
128
|
+
"""
|
|
129
|
+
Clears existing and sets new command-line arguments from a dictionary.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
arguments (YandexArguments): A dictionary of arguments to set.
|
|
133
|
+
|
|
134
|
+
Raises:
|
|
135
|
+
ValueError: If an unknown argument key is provided.
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
super().set_arguments(arguments)
|
|
139
|
+
|
|
140
|
+
def set_attributes(self, attributes: YandexAttributes):
|
|
141
|
+
"""
|
|
142
|
+
Clears existing and sets new browser attributes from a dictionary.
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
attributes (YandexAttributes): A dictionary of attributes to set.
|
|
146
|
+
|
|
147
|
+
Raises:
|
|
148
|
+
ValueError: If an unknown attribute key is provided.
|
|
149
|
+
"""
|
|
150
|
+
|
|
151
|
+
super().set_attributes(attributes)
|
|
152
|
+
|
|
153
|
+
def set_blink_features(self, blink_features: BlinkFeatures):
|
|
154
|
+
"""
|
|
155
|
+
Clears existing and sets new Yandex features from a dictionary.
|
|
156
|
+
|
|
157
|
+
Args:
|
|
158
|
+
blink_features (BlinkFeatures): A dictionary of Yandex features to set.
|
|
159
|
+
|
|
160
|
+
Raises:
|
|
161
|
+
ValueError: If an unknown Yandex feature key is provided.
|
|
162
|
+
"""
|
|
163
|
+
|
|
164
|
+
super().set_blink_features(blink_features)
|
|
165
|
+
|
|
166
|
+
def set_experimental_options(self, experimental_options: YandexExperimentalOptions):
|
|
167
|
+
"""
|
|
168
|
+
Clears existing and sets new experimental options from a dictionary.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
experimental_options (YandexExperimentalOptions): A dictionary of experimental options to set.
|
|
172
|
+
|
|
173
|
+
Raises:
|
|
174
|
+
ValueError: If an unknown experimental option key is provided.
|
|
175
|
+
"""
|
|
176
|
+
|
|
177
|
+
super().set_experimental_options(experimental_options)
|
|
178
|
+
|
|
179
|
+
def set_flags(self, flags: YandexFlags):
|
|
180
|
+
"""
|
|
181
|
+
Clears all existing flags and sets new ones, including Yandex features.
|
|
182
|
+
|
|
183
|
+
This method delegates to the parent `set_flags` method, allowing it to handle
|
|
184
|
+
all flag types defined in this manager, including 'arguments', 'experimental_options',
|
|
185
|
+
'attributes', and 'blink_features'.
|
|
186
|
+
|
|
187
|
+
Args:
|
|
188
|
+
flags (YandexFlags): A dictionary where keys are flag types
|
|
189
|
+
and values are dictionaries of flags to set for that type.
|
|
190
|
+
"""
|
|
191
|
+
|
|
192
|
+
super().set_flags(flags)
|
|
193
|
+
|
|
194
|
+
def update_arguments(self, arguments: YandexArguments):
|
|
195
|
+
"""
|
|
196
|
+
Updates command-line arguments from a dictionary without clearing existing ones.
|
|
197
|
+
|
|
198
|
+
Args:
|
|
199
|
+
arguments (YandexArguments): A dictionary of arguments to set or update.
|
|
200
|
+
|
|
201
|
+
Raises:
|
|
202
|
+
ValueError: If an unknown argument key is provided.
|
|
203
|
+
"""
|
|
204
|
+
|
|
205
|
+
super().update_arguments(arguments)
|
|
206
|
+
|
|
207
|
+
def update_attributes(self, attributes: YandexAttributes):
|
|
208
|
+
"""
|
|
209
|
+
Updates browser attributes from a dictionary without clearing existing ones.
|
|
210
|
+
|
|
211
|
+
Args:
|
|
212
|
+
attributes (YandexAttributes): A dictionary of attributes to set or update.
|
|
213
|
+
|
|
214
|
+
Raises:
|
|
215
|
+
ValueError: If an unknown attribute key is provided.
|
|
216
|
+
"""
|
|
217
|
+
|
|
218
|
+
super().update_attributes(attributes)
|
|
219
|
+
|
|
220
|
+
def update_blink_features(self, blink_features: BlinkFeatures):
|
|
221
|
+
"""
|
|
222
|
+
Updates Yandex features from a dictionary without clearing existing ones.
|
|
223
|
+
|
|
224
|
+
Args:
|
|
225
|
+
blink_features (BlinkFeatures): A dictionary of Yandex features to set or update.
|
|
226
|
+
|
|
227
|
+
Raises:
|
|
228
|
+
ValueError: If an unknown Yandex feature key is provided.
|
|
229
|
+
"""
|
|
230
|
+
|
|
231
|
+
super().update_blink_features(blink_features)
|
|
232
|
+
|
|
233
|
+
def update_experimental_options(self, experimental_options: YandexExperimentalOptions):
|
|
234
|
+
"""
|
|
235
|
+
Updates experimental options from a dictionary without clearing existing ones.
|
|
236
|
+
|
|
237
|
+
Args:
|
|
238
|
+
experimental_options (YandexExperimentalOptions): A dictionary of experimental options to set or update.
|
|
239
|
+
|
|
240
|
+
Raises:
|
|
241
|
+
ValueError: If an unknown experimental option key is provided.
|
|
242
|
+
"""
|
|
243
|
+
|
|
244
|
+
super().update_experimental_options(experimental_options)
|
|
245
|
+
|
|
246
|
+
def update_flags(self, flags: YandexFlags):
|
|
247
|
+
"""
|
|
248
|
+
Updates all flags, including Yandex features, without clearing existing ones.
|
|
249
|
+
|
|
250
|
+
This method delegates to the parent `update_flags` method, allowing it to handle
|
|
251
|
+
all flag types defined in this manager, including 'arguments', 'experimental_options',
|
|
252
|
+
'attributes', and 'blink_features'.
|
|
253
|
+
|
|
254
|
+
Args:
|
|
255
|
+
flags (YandexFlags): A dictionary where keys are flag types
|
|
256
|
+
and values are dictionaries of flags to update for that type.
|
|
257
|
+
"""
|
|
258
|
+
|
|
259
|
+
super().update_flags(flags)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import math
|
|
2
|
+
from typing import List
|
|
3
|
+
from copy import deepcopy
|
|
4
|
+
from random import randint
|
|
5
|
+
from osn_selenium.models import Point
|
|
6
|
+
from osn_selenium.instances._utils import (
|
|
7
|
+
MoveOffset,
|
|
8
|
+
MovePart,
|
|
9
|
+
MoveStep,
|
|
10
|
+
ScrollDelta,
|
|
11
|
+
ScrollPart,
|
|
12
|
+
TextInputPart
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
__all__ = ["move_to_parts", "scroll_to_parts", "text_input_to_parts"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def text_input_to_parts(text: str) -> List[TextInputPart]:
|
|
20
|
+
"""
|
|
21
|
+
Breaks down a text string into smaller parts for simulating human-like typing.
|
|
22
|
+
|
|
23
|
+
Generates a List of `TextInputPart` objects, where each part contains a character
|
|
24
|
+
or sequence of characters and a calculated duration. The duration simulates pauses
|
|
25
|
+
between key presses, with potentially longer pauses between different consecutive
|
|
26
|
+
characters.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
text (str): The input string to be broken down.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
List[TextInputPart]: A List of `TextInputPart` objects representing the sequence
|
|
33
|
+
of text segments and their associated durations for simulated typing.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
parts = []
|
|
37
|
+
previous_sign = None
|
|
38
|
+
|
|
39
|
+
for sign in text:
|
|
40
|
+
if previous_sign is None or sign == previous_sign:
|
|
41
|
+
parts.append(TextInputPart(text=sign, duration=randint(50, 70)))
|
|
42
|
+
else:
|
|
43
|
+
parts.append(TextInputPart(text=sign, duration=randint(100, 200)))
|
|
44
|
+
|
|
45
|
+
previous_sign = sign
|
|
46
|
+
|
|
47
|
+
return parts
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def scroll_to_parts(start_position: Point, end_position: Point) -> List[ScrollPart]:
|
|
51
|
+
"""
|
|
52
|
+
Calculates a sequence of smaller scroll steps with durations for human-like scrolling.
|
|
53
|
+
|
|
54
|
+
Simulates scrolling by generating a series of vertical steps followed by horizontal steps
|
|
55
|
+
until the target coordinates are reached. Each step is represented by a `ScrollPart`
|
|
56
|
+
containing the scroll delta for that step and a random duration.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
start_position (Point): The starting conceptual scroll position.
|
|
60
|
+
end_position (Point): The target conceptual scroll position.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
List[ScrollPart]: A List of `ScrollPart` objects representing the sequence of scroll
|
|
64
|
+
movements and their associated durations. The `delta` in each part
|
|
65
|
+
represents the scroll amount for that step, and the `point` represents
|
|
66
|
+
the conceptual position *after* applying that delta.
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
parts = []
|
|
70
|
+
|
|
71
|
+
current_position = deepcopy(start_position)
|
|
72
|
+
|
|
73
|
+
if start_position.y != end_position.y:
|
|
74
|
+
while current_position.y != end_position.y:
|
|
75
|
+
offset = randint(5, 20)
|
|
76
|
+
|
|
77
|
+
if start_position.y > end_position.y:
|
|
78
|
+
offset *= -1
|
|
79
|
+
|
|
80
|
+
if start_position.y < end_position.y:
|
|
81
|
+
if current_position.y + offset > end_position.y:
|
|
82
|
+
offset = end_position.y - current_position.y
|
|
83
|
+
elif start_position.y > end_position.y:
|
|
84
|
+
if current_position.y + offset < end_position.y:
|
|
85
|
+
offset = end_position.y - current_position.y
|
|
86
|
+
|
|
87
|
+
current_position.y += offset
|
|
88
|
+
parts.append(
|
|
89
|
+
ScrollPart(
|
|
90
|
+
point=deepcopy(current_position),
|
|
91
|
+
delta=ScrollDelta(x=0, y=offset),
|
|
92
|
+
duration=randint(1, 4)
|
|
93
|
+
)
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
if start_position.x != end_position.x:
|
|
97
|
+
while current_position.x != end_position.x:
|
|
98
|
+
offset = randint(5, 20)
|
|
99
|
+
|
|
100
|
+
if start_position.x > end_position.x:
|
|
101
|
+
offset *= -1
|
|
102
|
+
|
|
103
|
+
if start_position.x <= end_position.x:
|
|
104
|
+
if current_position.x + offset > end_position.x:
|
|
105
|
+
offset = end_position.x - current_position.x
|
|
106
|
+
elif start_position.x > end_position.x:
|
|
107
|
+
if current_position.x + offset < end_position.x:
|
|
108
|
+
offset = current_position.x - end_position.x
|
|
109
|
+
|
|
110
|
+
current_position.x += offset
|
|
111
|
+
parts.append(
|
|
112
|
+
ScrollPart(
|
|
113
|
+
point=deepcopy(current_position),
|
|
114
|
+
delta=ScrollDelta(x=offset, y=0),
|
|
115
|
+
duration=randint(1, 4)
|
|
116
|
+
)
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
return parts
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def move_to_parts(start_position: Point, end_position: Point) -> List[MovePart]:
|
|
123
|
+
"""
|
|
124
|
+
Calculates a sequence of smaller move steps with durations for human-like mouse movement.
|
|
125
|
+
|
|
126
|
+
Generates a path between a start and end point that deviates slightly from a
|
|
127
|
+
straight line using a sinusoidal function, simulating more natural mouse movement.
|
|
128
|
+
The path is broken into segments, each represented by a `MovePart` object specifying
|
|
129
|
+
the target point for that segment, the offset from the previous point, and a random duration.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
start_position (Point): The starting coordinates for the movement.
|
|
133
|
+
end_position (Point): The target coordinates for the movement.
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
List[MovePart]: A List of `MovePart` objects representing the sequence of mouse
|
|
137
|
+
movements and their associated durations. Each `MovePart` indicates
|
|
138
|
+
the `point` to move to, the `offset` from the previous point,
|
|
139
|
+
and the `duration` for that movement segment.
|
|
140
|
+
"""
|
|
141
|
+
|
|
142
|
+
def get_new_position():
|
|
143
|
+
"""Calculates random horizontal and vertical amplitudes for deviation."""
|
|
144
|
+
|
|
145
|
+
linear_progress = step.index / len(steps)
|
|
146
|
+
|
|
147
|
+
deviation_x = step.amplitude_x * math.sin(linear_progress * 2 * math.pi)
|
|
148
|
+
current_x_linear = start_position.x + (end_position.x - start_position.x) * linear_progress
|
|
149
|
+
|
|
150
|
+
deviation_y = step.amplitude_y * math.cos(linear_progress * 2 * math.pi)
|
|
151
|
+
current_y_linear = start_position.y + (end_position.y - start_position.y) * linear_progress
|
|
152
|
+
|
|
153
|
+
return Point(
|
|
154
|
+
x=int(current_x_linear + deviation_x),
|
|
155
|
+
y=int(current_y_linear + deviation_y)
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
def get_amplitude():
|
|
159
|
+
"""Generates a sequence of internal _MoveStep objects."""
|
|
160
|
+
|
|
161
|
+
amplitude_x = randint(10, 20)
|
|
162
|
+
amplitude_y = randint(10, 20)
|
|
163
|
+
|
|
164
|
+
if start_position.x > end_position.x:
|
|
165
|
+
amplitude_x *= -1
|
|
166
|
+
|
|
167
|
+
if start_position.y > end_position.y:
|
|
168
|
+
amplitude_y *= -1
|
|
169
|
+
|
|
170
|
+
return amplitude_x, amplitude_y
|
|
171
|
+
|
|
172
|
+
def calculate_steps():
|
|
173
|
+
"""Calculates the target point for a move step, including sinusoidal deviation."""
|
|
174
|
+
|
|
175
|
+
steps_ = []
|
|
176
|
+
current_point = deepcopy(start_position)
|
|
177
|
+
index = 0
|
|
178
|
+
|
|
179
|
+
while current_point != end_position:
|
|
180
|
+
amplitude_x, amplitude_y = get_amplitude()
|
|
181
|
+
steps_.append(MoveStep(amplitude_x=amplitude_x, amplitude_y=amplitude_y, index=index))
|
|
182
|
+
|
|
183
|
+
index += 1
|
|
184
|
+
|
|
185
|
+
if start_position.x <= end_position.x:
|
|
186
|
+
current_point.x += amplitude_x if current_point.x + amplitude_x <= end_position.x else end_position.x - current_point.x
|
|
187
|
+
else:
|
|
188
|
+
current_point.x += amplitude_x if current_point.x + amplitude_x >= end_position.x else end_position.x - current_point.x
|
|
189
|
+
|
|
190
|
+
if start_position.y <= end_position.y:
|
|
191
|
+
current_point.y += amplitude_y if current_point.y + amplitude_y <= end_position.y else end_position.y - current_point.y
|
|
192
|
+
else:
|
|
193
|
+
current_point.y += amplitude_y if current_point.y + amplitude_y >= end_position.y else end_position.y - current_point.y
|
|
194
|
+
|
|
195
|
+
return steps_
|
|
196
|
+
|
|
197
|
+
parts = []
|
|
198
|
+
steps = calculate_steps()
|
|
199
|
+
previous_position = deepcopy(start_position)
|
|
200
|
+
|
|
201
|
+
for step in steps:
|
|
202
|
+
new_position = get_new_position()
|
|
203
|
+
|
|
204
|
+
if start_position.x <= end_position.x:
|
|
205
|
+
new_position.x = int(new_position.x if new_position.x < end_position.x else end_position.x)
|
|
206
|
+
else:
|
|
207
|
+
new_position.x = int(new_position.x if new_position.x > end_position.x else end_position.x)
|
|
208
|
+
|
|
209
|
+
if start_position.y <= end_position.y:
|
|
210
|
+
new_position.y = int(new_position.y if new_position.y < end_position.y else end_position.y)
|
|
211
|
+
else:
|
|
212
|
+
new_position.y = int(new_position.y if new_position.y > end_position.y else end_position.y)
|
|
213
|
+
|
|
214
|
+
parts.append(
|
|
215
|
+
MovePart(
|
|
216
|
+
point=new_position,
|
|
217
|
+
offset=MoveOffset(
|
|
218
|
+
x=new_position.x - previous_position.x,
|
|
219
|
+
y=new_position.y - previous_position.y
|
|
220
|
+
),
|
|
221
|
+
duration=randint(1, 4)
|
|
222
|
+
)
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
previous_position = deepcopy(new_position)
|
|
226
|
+
|
|
227
|
+
if parts[-1].point == end_position:
|
|
228
|
+
break
|
|
229
|
+
|
|
230
|
+
if parts[-1].point != end_position:
|
|
231
|
+
parts.append(
|
|
232
|
+
MovePart(
|
|
233
|
+
point=end_position,
|
|
234
|
+
offset=MoveOffset(
|
|
235
|
+
x=end_position.x - previous_position.x,
|
|
236
|
+
y=end_position.y - previous_position.y
|
|
237
|
+
),
|
|
238
|
+
duration=randint(1, 4)
|
|
239
|
+
)
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
return parts
|