osn-selenium 1.0.0__py3-none-any.whl → 1.2.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/_decorators.py +57 -0
- osn_selenium/_trio_threads_helpers.py +157 -0
- osn_selenium/_typehints.py +1 -1
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/webdriver/blink/base.py +14 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/base.py +0 -14
- osn_selenium/abstract/webdriver/core/capture.py +4 -3
- osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/script.py +5 -4
- osn_selenium/abstract/webdriver/core/window.py +11 -11
- osn_selenium/browsers_handler/models.py +1 -1
- osn_selenium/dev_tools/_decorators.py +19 -51
- osn_selenium/dev_tools/_functions.py +2 -4
- osn_selenium/dev_tools/_typehints.py +5 -2
- osn_selenium/dev_tools/_wrappers.py +0 -3
- osn_selenium/dev_tools/domains/__init__.py +2 -2
- osn_selenium/dev_tools/domains/abstract.py +1 -1
- osn_selenium/dev_tools/domains/fetch.py +6 -8
- osn_selenium/dev_tools/domains_default/fetch.py +2 -2
- osn_selenium/dev_tools/filters.py +1 -1
- osn_selenium/dev_tools/logger/main.py +9 -21
- osn_selenium/dev_tools/logger/models.py +1 -1
- osn_selenium/dev_tools/logger/target.py +49 -29
- osn_selenium/dev_tools/manager/base.py +10 -42
- osn_selenium/dev_tools/manager/lifecycle.py +84 -75
- osn_selenium/dev_tools/manager/logging.py +1 -1
- osn_selenium/dev_tools/manager/targets.py +13 -5
- osn_selenium/dev_tools/models.py +1 -1
- osn_selenium/dev_tools/settings.py +9 -5
- osn_selenium/dev_tools/target/base.py +30 -34
- osn_selenium/dev_tools/target/discovery.py +1 -1
- osn_selenium/dev_tools/target/events.py +2 -2
- osn_selenium/dev_tools/target/fingerprint.py +1 -1
- osn_selenium/dev_tools/target/lifecycle.py +103 -38
- osn_selenium/dev_tools/target/logging.py +11 -3
- osn_selenium/exceptions/__init__.py +0 -1
- osn_selenium/exceptions/base.py +28 -1
- osn_selenium/exceptions/bidi_bridge.py +59 -0
- osn_selenium/exceptions/configuration.py +1 -8
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +9 -39
- osn_selenium/exceptions/experimental.py +26 -0
- osn_selenium/exceptions/flags.py +0 -2
- osn_selenium/exceptions/instance.py +1 -9
- osn_selenium/exceptions/javascript.py +0 -2
- osn_selenium/exceptions/logic.py +0 -2
- osn_selenium/exceptions/path.py +1 -9
- osn_selenium/exceptions/platform.py +0 -2
- osn_selenium/exceptions/protocol.py +0 -3
- osn_selenium/exceptions/webdriver.py +1 -7
- osn_selenium/exceptions/window.py +1 -8
- osn_selenium/executors/sync/cdp.py +95 -0
- osn_selenium/executors/trio_bidi/cdp.py +101 -0
- osn_selenium/executors/trio_bidi/javascript.py +101 -0
- osn_selenium/executors/trio_threads/cdp.py +99 -0
- osn_selenium/executors/trio_threads/javascript.py +1 -1
- osn_selenium/executors/unified/javascript.py +0 -4
- osn_selenium/flags/base.py +7 -13
- osn_selenium/flags/blink.py +2 -8
- osn_selenium/flags/chrome.py +6 -6
- osn_selenium/flags/edge.py +6 -6
- osn_selenium/flags/models/base.py +4 -4
- osn_selenium/flags/models/blink.py +1 -1
- osn_selenium/flags/models/values.py +1 -1
- osn_selenium/instances/convert.py +44 -3
- osn_selenium/instances/protocols.py +47 -1
- osn_selenium/instances/sync/action_chains/__init__.py +6 -0
- osn_selenium/instances/sync/browsing_context.py +2 -2
- osn_selenium/instances/sync/script.py +7 -2
- osn_selenium/instances/sync/shadow_root.py +30 -8
- osn_selenium/instances/sync/web_element.py +1 -1
- osn_selenium/instances/trio_bidi/__init__.py +1 -0
- osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
- osn_selenium/instances/trio_bidi/switch_to.py +143 -0
- osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
- osn_selenium/instances/trio_bidi/web_element.py +239 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
- osn_selenium/instances/trio_threads/alert.py +1 -1
- osn_selenium/instances/trio_threads/browser.py +1 -1
- osn_selenium/instances/trio_threads/browsing_context.py +3 -3
- osn_selenium/instances/trio_threads/dialog.py +1 -1
- osn_selenium/instances/trio_threads/fedcm.py +1 -1
- osn_selenium/instances/trio_threads/mobile.py +1 -1
- osn_selenium/instances/trio_threads/network.py +1 -1
- osn_selenium/instances/trio_threads/permissions.py +1 -1
- osn_selenium/instances/trio_threads/script.py +8 -3
- osn_selenium/instances/trio_threads/shadow_root.py +46 -15
- osn_selenium/instances/trio_threads/storage.py +1 -1
- osn_selenium/instances/trio_threads/switch_to.py +1 -1
- osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
- osn_selenium/instances/trio_threads/web_element.py +1 -1
- osn_selenium/instances/trio_threads/web_extension.py +1 -1
- osn_selenium/instances/unified/browsing_context.py +2 -2
- osn_selenium/instances/unified/script.py +2 -2
- osn_selenium/instances/unified/web_element.py +3 -5
- osn_selenium/javascript/fingerprint/__init__.py +3 -2
- osn_selenium/javascript/fingerprint/registry/models.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
- osn_selenium/javascript/models.py +1 -1
- osn_selenium/models.py +2 -47
- osn_selenium/trio_bidi/__init__.py +1 -0
- osn_selenium/trio_bidi/_context_vars.py +12 -0
- osn_selenium/trio_bidi/_error_mappings.py +123 -0
- osn_selenium/trio_bidi/_error_redirects.py +194 -0
- osn_selenium/trio_bidi/_file_functions.py +28 -0
- osn_selenium/trio_bidi/_internal_mappings.py +10 -0
- osn_selenium/trio_bidi/_models.py +199 -0
- osn_selenium/trio_bidi/_typehints.py +20 -0
- osn_selenium/trio_bidi/connection_pool.py +587 -0
- osn_selenium/trio_bidi/mapping/__init__.py +1 -0
- osn_selenium/trio_bidi/mapping/_constants.py +14 -0
- osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
- osn_selenium/trio_bidi/mapping/_utils.py +4 -0
- osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
- osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
- osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
- osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
- osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
- osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
- osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
- osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
- osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
- osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
- osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
- osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
- osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
- osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
- osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
- osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
- osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
- osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
- osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
- osn_selenium/trio_bidi/mixin.py +186 -0
- osn_selenium/trio_bidi/remote_connection.py +164 -0
- osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
- osn_selenium/webdrivers/_args_helpers.py +120 -7
- osn_selenium/webdrivers/_bridges.py +2 -2
- osn_selenium/webdrivers/_executable_tables/models.py +1 -1
- osn_selenium/webdrivers/_typehints.py +9 -3
- osn_selenium/webdrivers/protocols.py +81 -1
- osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
- osn_selenium/webdrivers/sync/blink/base.py +23 -1
- osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
- osn_selenium/webdrivers/sync/chrome/base.py +13 -1
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
- osn_selenium/webdrivers/sync/core/__init__.py +10 -1
- osn_selenium/webdrivers/sync/core/base.py +18 -18
- osn_selenium/webdrivers/sync/core/capture.py +3 -2
- osn_selenium/webdrivers/sync/core/file.py +3 -2
- osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
- osn_selenium/webdrivers/sync/core/script.py +3 -2
- osn_selenium/webdrivers/sync/core/window.py +3 -3
- osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
- osn_selenium/webdrivers/sync/edge/base.py +13 -1
- osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/edge/settings.py +6 -1
- osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
- osn_selenium/webdrivers/sync/yandex/base.py +13 -1
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
- osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
- osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
- osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
- osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
- osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
- osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
- osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
- osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
- osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
- osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
- osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
- osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
- osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
- osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
- osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
- osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
- osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
- osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
- osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
- osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
- osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
- osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
- osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
- osn_selenium/webdrivers/unified/blink/base.py +9 -1
- osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
- osn_selenium/webdrivers/unified/chrome/base.py +9 -1
- osn_selenium/webdrivers/unified/core/auth.py +4 -2
- osn_selenium/webdrivers/unified/core/base.py +19 -6
- osn_selenium/webdrivers/unified/core/capture.py +3 -2
- osn_selenium/webdrivers/unified/core/components.py +12 -7
- osn_selenium/webdrivers/unified/core/devtools.py +2 -1
- osn_selenium/webdrivers/unified/core/file.py +3 -2
- osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
- osn_selenium/webdrivers/unified/core/script.py +5 -3
- osn_selenium/webdrivers/unified/core/storage.py +2 -1
- osn_selenium/webdrivers/unified/core/window.py +9 -8
- osn_selenium/webdrivers/unified/edge/base.py +9 -1
- osn_selenium/webdrivers/unified/yandex/base.py +9 -1
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
- osn_selenium-1.2.0.dist-info/RECORD +480 -0
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
- osn_selenium/abstract/executors/cdp/__init__.py +0 -435
- osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
- osn_selenium/abstract/executors/cdp/animation.py +0 -47
- osn_selenium/abstract/executors/cdp/audits.py +0 -39
- osn_selenium/abstract/executors/cdp/autofill.py +0 -34
- osn_selenium/abstract/executors/cdp/background_service.py +0 -22
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
- osn_selenium/abstract/executors/cdp/browser.py +0 -122
- osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
- osn_selenium/abstract/executors/cdp/cast.py +0 -31
- osn_selenium/abstract/executors/cdp/console.py +0 -18
- osn_selenium/abstract/executors/cdp/css.py +0 -197
- osn_selenium/abstract/executors/cdp/debugger.py +0 -198
- osn_selenium/abstract/executors/cdp/device_access.py +0 -22
- osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
- osn_selenium/abstract/executors/cdp/dom.py +0 -305
- osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
- osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
- osn_selenium/abstract/executors/cdp/emulation.py +0 -259
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
- osn_selenium/abstract/executors/cdp/extensions.py +0 -31
- osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
- osn_selenium/abstract/executors/cdp/fetch.py +0 -76
- osn_selenium/abstract/executors/cdp/file_system.py +0 -11
- osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
- osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
- osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
- osn_selenium/abstract/executors/cdp/input.py +0 -158
- osn_selenium/abstract/executors/cdp/inspector.py +0 -14
- osn_selenium/abstract/executors/cdp/io.py +0 -24
- osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
- osn_selenium/abstract/executors/cdp/log.py +0 -27
- osn_selenium/abstract/executors/cdp/media.py +0 -14
- osn_selenium/abstract/executors/cdp/memory.py +0 -61
- osn_selenium/abstract/executors/cdp/network.py +0 -252
- osn_selenium/abstract/executors/cdp/overlay.py +0 -166
- osn_selenium/abstract/executors/cdp/page.py +0 -347
- osn_selenium/abstract/executors/cdp/performance.py +0 -28
- osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
- osn_selenium/abstract/executors/cdp/preload.py +0 -14
- osn_selenium/abstract/executors/cdp/profiler.py +0 -54
- osn_selenium/abstract/executors/cdp/pwa.py +0 -46
- osn_selenium/abstract/executors/cdp/runtime.py +0 -176
- osn_selenium/abstract/executors/cdp/schema.py +0 -11
- osn_selenium/abstract/executors/cdp/security.py +0 -26
- osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
- osn_selenium/abstract/executors/cdp/storage.py +0 -175
- osn_selenium/abstract/executors/cdp/system_info.py +0 -24
- osn_selenium/abstract/executors/cdp/target.py +0 -125
- osn_selenium/abstract/executors/cdp/tethering.py +0 -14
- osn_selenium/abstract/executors/cdp/tracing.py +0 -48
- osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
- osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
- osn_selenium/executors/sync/cdp/__init__.py +0 -550
- osn_selenium/executors/sync/cdp/accessibility.py +0 -74
- osn_selenium/executors/sync/cdp/animation.py +0 -50
- osn_selenium/executors/sync/cdp/audits.py +0 -48
- osn_selenium/executors/sync/cdp/autofill.py +0 -39
- osn_selenium/executors/sync/cdp/background_service.py +0 -30
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
- osn_selenium/executors/sync/cdp/browser.py +0 -131
- osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
- osn_selenium/executors/sync/cdp/cast.py +0 -38
- osn_selenium/executors/sync/cdp/console.py +0 -24
- osn_selenium/executors/sync/cdp/css.py +0 -187
- osn_selenium/executors/sync/cdp/debugger.py +0 -206
- osn_selenium/executors/sync/cdp/device_access.py +0 -27
- osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
- osn_selenium/executors/sync/cdp/dom.py +0 -310
- osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
- osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
- osn_selenium/executors/sync/cdp/emulation.py +0 -270
- osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
- osn_selenium/executors/sync/cdp/extensions.py +0 -39
- osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
- osn_selenium/executors/sync/cdp/fetch.py +0 -96
- osn_selenium/executors/sync/cdp/file_system.py +0 -18
- osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
- osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
- osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
- osn_selenium/executors/sync/cdp/input.py +0 -233
- osn_selenium/executors/sync/cdp/inspector.py +0 -21
- osn_selenium/executors/sync/cdp/io.py +0 -33
- osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
- osn_selenium/executors/sync/cdp/log.py +0 -35
- osn_selenium/executors/sync/cdp/media.py +0 -21
- osn_selenium/executors/sync/cdp/memory.py +0 -62
- osn_selenium/executors/sync/cdp/network.py +0 -287
- osn_selenium/executors/sync/cdp/overlay.py +0 -174
- osn_selenium/executors/sync/cdp/page.py +0 -365
- osn_selenium/executors/sync/cdp/performance.py +0 -33
- osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
- osn_selenium/executors/sync/cdp/preload.py +0 -21
- osn_selenium/executors/sync/cdp/profiler.py +0 -58
- osn_selenium/executors/sync/cdp/pwa.py +0 -55
- osn_selenium/executors/sync/cdp/runtime.py +0 -221
- osn_selenium/executors/sync/cdp/schema.py +0 -23
- osn_selenium/executors/sync/cdp/security.py +0 -30
- osn_selenium/executors/sync/cdp/service_worker.py +0 -56
- osn_selenium/executors/sync/cdp/storage.py +0 -151
- osn_selenium/executors/sync/cdp/system_info.py +0 -30
- osn_selenium/executors/sync/cdp/target.py +0 -147
- osn_selenium/executors/sync/cdp/tethering.py +0 -21
- osn_selenium/executors/sync/cdp/tracing.py +0 -62
- osn_selenium/executors/sync/cdp/web_audio.py +0 -24
- osn_selenium/executors/sync/cdp/web_authn.py +0 -82
- osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
- osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
- osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
- osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
- osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
- osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
- osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
- osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
- osn_selenium/executors/trio_threads/cdp/console.py +0 -33
- osn_selenium/executors/trio_threads/cdp/css.py +0 -196
- osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
- osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
- osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
- osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
- osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
- osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
- osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
- osn_selenium/executors/trio_threads/cdp/input.py +0 -242
- osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
- osn_selenium/executors/trio_threads/cdp/io.py +0 -42
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
- osn_selenium/executors/trio_threads/cdp/log.py +0 -44
- osn_selenium/executors/trio_threads/cdp/media.py +0 -30
- osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
- osn_selenium/executors/trio_threads/cdp/network.py +0 -296
- osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
- osn_selenium/executors/trio_threads/cdp/page.py +0 -374
- osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
- osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
- osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
- osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
- osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
- osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
- osn_selenium/executors/trio_threads/cdp/security.py +0 -43
- osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
- osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
- osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
- osn_selenium/executors/trio_threads/cdp/target.py +0 -156
- osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
- osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
- osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
- osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
- osn_selenium/executors/unified/cdp/accessibility.py +0 -81
- osn_selenium/executors/unified/cdp/animation.py +0 -50
- osn_selenium/executors/unified/cdp/audits.py +0 -45
- osn_selenium/executors/unified/cdp/autofill.py +0 -41
- osn_selenium/executors/unified/cdp/background_service.py +0 -24
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
- osn_selenium/executors/unified/cdp/browser.py +0 -143
- osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
- osn_selenium/executors/unified/cdp/cast.py +0 -32
- osn_selenium/executors/unified/cdp/console.py +0 -18
- osn_selenium/executors/unified/cdp/css.py +0 -237
- osn_selenium/executors/unified/cdp/debugger.py +0 -243
- osn_selenium/executors/unified/cdp/device_access.py +0 -21
- osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
- osn_selenium/executors/unified/cdp/dom.py +0 -380
- osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
- osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
- osn_selenium/executors/unified/cdp/emulation.py +0 -312
- osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
- osn_selenium/executors/unified/cdp/extensions.py +0 -45
- osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
- osn_selenium/executors/unified/cdp/fetch.py +0 -111
- osn_selenium/executors/unified/cdp/file_system.py +0 -15
- osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
- osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
- osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
- osn_selenium/executors/unified/cdp/input.py +0 -254
- osn_selenium/executors/unified/cdp/inspector.py +0 -15
- osn_selenium/executors/unified/cdp/io.py +0 -29
- osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
- osn_selenium/executors/unified/cdp/log.py +0 -29
- osn_selenium/executors/unified/cdp/media.py +0 -15
- osn_selenium/executors/unified/cdp/memory.py +0 -59
- osn_selenium/executors/unified/cdp/network.py +0 -323
- osn_selenium/executors/unified/cdp/overlay.py +0 -209
- osn_selenium/executors/unified/cdp/page.py +0 -410
- osn_selenium/executors/unified/cdp/performance.py +0 -27
- osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
- osn_selenium/executors/unified/cdp/preload.py +0 -15
- osn_selenium/executors/unified/cdp/profiler.py +0 -55
- osn_selenium/executors/unified/cdp/pwa.py +0 -55
- osn_selenium/executors/unified/cdp/runtime.py +0 -245
- osn_selenium/executors/unified/cdp/schema.py +0 -17
- osn_selenium/executors/unified/cdp/security.py +0 -27
- osn_selenium/executors/unified/cdp/service_worker.py +0 -62
- osn_selenium/executors/unified/cdp/storage.py +0 -178
- osn_selenium/executors/unified/cdp/system_info.py +0 -24
- osn_selenium/executors/unified/cdp/target.py +0 -165
- osn_selenium/executors/unified/cdp/tethering.py +0 -15
- osn_selenium/executors/unified/cdp/tracing.py +0 -62
- osn_selenium/executors/unified/cdp/web_audio.py +0 -18
- osn_selenium/executors/unified/cdp/web_authn.py +0 -103
- osn_selenium-1.0.0.dist-info/RECORD +0 -608
- /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
- /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import importlib
|
|
2
|
+
from typing import TYPE_CHECKING, Any, Dict, Callable
|
|
3
|
+
|
|
4
|
+
from osn_selenium.abstract.executors.cdp import AbstractCDPExecutor
|
|
5
|
+
from osn_selenium.exceptions.dependencies import CDPPackageError
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
__all__ = ["CDPExecutor"]
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from osn_selenium_cdp_v140.executors.sync import CDP140Executor
|
|
12
|
+
from osn_selenium_cdp_v141.executors.sync import CDP141Executor
|
|
13
|
+
from osn_selenium_cdp_v142.executors.sync import CDP142Executor
|
|
14
|
+
from osn_selenium_cdp_v143.executors.sync import CDP143Executor
|
|
15
|
+
from osn_selenium_cdp_v144.executors.sync import CDP144Executor
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class CDPExecutor(AbstractCDPExecutor):
|
|
19
|
+
"""
|
|
20
|
+
Global CDP executor router.
|
|
21
|
+
Handles lazy loading and version-specific package validation.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(self, execute_function: Callable[[str, Dict[str, Any]], Any]):
|
|
25
|
+
self._execute_function = execute_function
|
|
26
|
+
|
|
27
|
+
def get(self, version: int) -> Any:
|
|
28
|
+
"""
|
|
29
|
+
Dynamically loads and returns the CDP executor for a specific version.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
version (int): The CDP version number.
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
Any: The version-specific executor instance.
|
|
36
|
+
|
|
37
|
+
Raises:
|
|
38
|
+
CDPPackageError: If the version-specific package is not installed.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
if getattr(self, f"_v{version}", None) is None:
|
|
43
|
+
module = importlib.import_module(f"osn_selenium_cdp_v{version}.executors.sync")
|
|
44
|
+
executor_type = getattr(module, f"CDP{version}Executor")
|
|
45
|
+
|
|
46
|
+
setattr(self, f"_v{version}", executor_type(execute_function=self._execute_function))
|
|
47
|
+
|
|
48
|
+
return getattr(self, f"_v{version}", None)
|
|
49
|
+
except ImportError:
|
|
50
|
+
raise CDPPackageError(version=version)
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def v140(self) -> "CDP140Executor":
|
|
54
|
+
"""
|
|
55
|
+
Get or initialize the executor for CDP version 140.
|
|
56
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
return self.get(version=140)
|
|
60
|
+
|
|
61
|
+
@property
|
|
62
|
+
def v141(self) -> "CDP141Executor":
|
|
63
|
+
"""
|
|
64
|
+
Get or initialize the executor for CDP version 141.
|
|
65
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
return self.get(version=141)
|
|
69
|
+
|
|
70
|
+
@property
|
|
71
|
+
def v142(self) -> "CDP142Executor":
|
|
72
|
+
"""
|
|
73
|
+
Get or initialize the executor for CDP version 142.
|
|
74
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
return self.get(version=142)
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def v143(self) -> "CDP143Executor":
|
|
81
|
+
"""
|
|
82
|
+
Get or initialize the executor for CDP version 143.
|
|
83
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
return self.get(version=143)
|
|
87
|
+
|
|
88
|
+
@property
|
|
89
|
+
def v144(self) -> "CDP144Executor":
|
|
90
|
+
"""
|
|
91
|
+
Get or initialize the executor for CDP version 144.
|
|
92
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
return self.get(version=144)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import importlib
|
|
2
|
+
from typing import TYPE_CHECKING, Any, Dict, Callable, Union
|
|
3
|
+
|
|
4
|
+
import trio
|
|
5
|
+
|
|
6
|
+
from osn_selenium.abstract.executors.cdp import AbstractCDPExecutor
|
|
7
|
+
from osn_selenium.exceptions.dependencies import CDPPackageError
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
__all__ = ["CDPExecutor"]
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from osn_selenium_cdp_v140.executors.trio_bidi import CDP140Executor
|
|
14
|
+
from osn_selenium_cdp_v141.executors.trio_bidi import CDP141Executor
|
|
15
|
+
from osn_selenium_cdp_v142.executors.trio_bidi import CDP142Executor
|
|
16
|
+
from osn_selenium_cdp_v143.executors.trio_bidi import CDP143Executor
|
|
17
|
+
from osn_selenium_cdp_v144.executors.trio_bidi import CDP144Executor
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class CDPExecutor(AbstractCDPExecutor):
|
|
21
|
+
"""
|
|
22
|
+
Global CDP executor router.
|
|
23
|
+
Handles lazy loading and version-specific package validation.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, execute_function: Callable[[str, Dict[str, Any]], Any], lock: trio.Lock, limiter: trio.CapacityLimiter, token: trio.lowlevel.TrioToken, buffer_size: Union[int, float]):
|
|
27
|
+
self._execute_function = execute_function
|
|
28
|
+
self._lock = lock
|
|
29
|
+
self._limiter = limiter
|
|
30
|
+
self._trio_token = token
|
|
31
|
+
self._bidi_buffer_size = buffer_size
|
|
32
|
+
|
|
33
|
+
def get(self, version: int) -> Any:
|
|
34
|
+
"""
|
|
35
|
+
Dynamically loads and returns the CDP executor for a specific version.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
version (int): The CDP version number.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
Any: The version-specific executor instance.
|
|
42
|
+
|
|
43
|
+
Raises:
|
|
44
|
+
CDPPackageError: If the version-specific package is not installed.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
if getattr(self, f"_v{version}", None) is None:
|
|
49
|
+
module = importlib.import_module(f"osn_selenium_cdp_v{version}.executors.trio_bidi")
|
|
50
|
+
executor_type = getattr(module, f"CDP{version}Executor")
|
|
51
|
+
|
|
52
|
+
setattr(self, f"_v{version}", executor_type(execute_function=self._execute_function, lock=self._lock, limiter=self._limiter, token=self._trio_token, buffer_size=self._bidi_buffer_size))
|
|
53
|
+
|
|
54
|
+
return getattr(self, f"_v{version}", None)
|
|
55
|
+
except ImportError:
|
|
56
|
+
raise CDPPackageError(version=version)
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def v140(self) -> "CDP140Executor":
|
|
60
|
+
"""
|
|
61
|
+
Get or initialize the executor for CDP version 140.
|
|
62
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
return self.get(version=140)
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def v141(self) -> "CDP141Executor":
|
|
69
|
+
"""
|
|
70
|
+
Get or initialize the executor for CDP version 141.
|
|
71
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
return self.get(version=141)
|
|
75
|
+
|
|
76
|
+
@property
|
|
77
|
+
def v142(self) -> "CDP142Executor":
|
|
78
|
+
"""
|
|
79
|
+
Get or initialize the executor for CDP version 142.
|
|
80
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
return self.get(version=142)
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def v143(self) -> "CDP143Executor":
|
|
87
|
+
"""
|
|
88
|
+
Get or initialize the executor for CDP version 143.
|
|
89
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
return self.get(version=143)
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def v144(self) -> "CDP144Executor":
|
|
96
|
+
"""
|
|
97
|
+
Get or initialize the executor for CDP version 144.
|
|
98
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
return self.get(version=144)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from osn_selenium.javascript.models import JS_Scripts
|
|
3
|
+
from osn_selenium.trio_bidi.mixin import TrioBiDiMixin
|
|
4
|
+
from typing import (
|
|
5
|
+
Any,
|
|
6
|
+
Callable,
|
|
7
|
+
Dict,
|
|
8
|
+
Optional,
|
|
9
|
+
Union
|
|
10
|
+
)
|
|
11
|
+
from osn_selenium.javascript.fingerprint import FingerprintSettings
|
|
12
|
+
from osn_selenium.instances.trio_threads.web_element import WebElement
|
|
13
|
+
from osn_selenium.executors.unified.javascript import UnifiedJSExecutor
|
|
14
|
+
from osn_selenium.models import (
|
|
15
|
+
Point,
|
|
16
|
+
Position,
|
|
17
|
+
Rectangle,
|
|
18
|
+
Size
|
|
19
|
+
)
|
|
20
|
+
from osn_selenium.abstract.executors.javascript import AbstractJSExecutor
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
__all__ = ["JSExecutor"]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class JSExecutor(UnifiedJSExecutor, TrioBiDiMixin, AbstractJSExecutor):
|
|
27
|
+
"""
|
|
28
|
+
An asynchronous JavaScript executor that integrates Trio's BiDi mixin.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(
|
|
32
|
+
self,
|
|
33
|
+
execute_function: Callable[[str, Any], Any],
|
|
34
|
+
lock: trio.Lock,
|
|
35
|
+
limiter: trio.CapacityLimiter,
|
|
36
|
+
trio_token: Optional[trio.lowlevel.TrioToken],
|
|
37
|
+
bidi_buffer_size: Union[int, float],
|
|
38
|
+
):
|
|
39
|
+
"""
|
|
40
|
+
Initialize the JSExecutor with Trio synchronization primitives and execution logic.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
execute_function (Callable[[str, Any], Any]): The function used to run JavaScript code.
|
|
44
|
+
lock (trio.Lock): Trio lock for synchronizing access.
|
|
45
|
+
limiter (trio.CapacityLimiter): Trio limiter for controlling concurrency.
|
|
46
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
47
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
UnifiedJSExecutor.__init__(self, execute_function=execute_function)
|
|
51
|
+
|
|
52
|
+
TrioBiDiMixin.__init__(
|
|
53
|
+
self,
|
|
54
|
+
lock=lock,
|
|
55
|
+
limiter=limiter,
|
|
56
|
+
token=trio_token,
|
|
57
|
+
buffer_size=bidi_buffer_size
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
async def check_element_in_viewport(self, element: WebElement) -> bool:
|
|
61
|
+
return await self.sync_to_trio(sync_function=self._check_element_in_viewport_impl)(element=element)
|
|
62
|
+
|
|
63
|
+
async def execute(self, script: str, *args: Any) -> Any:
|
|
64
|
+
return await self.sync_to_trio(sync_function=self._execute_impl)(script, *args)
|
|
65
|
+
|
|
66
|
+
async def get_document_scroll_size(self) -> Size:
|
|
67
|
+
return await self.sync_to_trio(sync_function=self._get_document_scroll_size_impl)()
|
|
68
|
+
|
|
69
|
+
async def get_element_css_style(self, element: WebElement) -> Dict[str, str]:
|
|
70
|
+
return await self.sync_to_trio(sync_function=self._get_element_css_style_impl)(element=element)
|
|
71
|
+
|
|
72
|
+
async def get_element_rect_in_viewport(self, element: WebElement) -> Optional[Rectangle]:
|
|
73
|
+
return await self.sync_to_trio(sync_function=self._get_element_rect_in_viewport_impl)(element=element)
|
|
74
|
+
|
|
75
|
+
async def get_random_element_point(self, element: WebElement) -> Optional[Point]:
|
|
76
|
+
return await self.sync_to_trio(sync_function=self._get_random_element_point_impl)(element=element)
|
|
77
|
+
|
|
78
|
+
async def get_random_element_point_in_viewport(self, element: WebElement, step: int = 1) -> Optional[Position]:
|
|
79
|
+
return await self.sync_to_trio(sync_function=self._get_random_element_point_in_viewport_impl)(element=element, step=step)
|
|
80
|
+
|
|
81
|
+
async def get_viewport_position(self) -> Position:
|
|
82
|
+
return await self.sync_to_trio(sync_function=self._get_viewport_position_impl)()
|
|
83
|
+
|
|
84
|
+
async def get_viewport_rect(self) -> Rectangle:
|
|
85
|
+
return await self.sync_to_trio(sync_function=self._get_viewport_rect_impl)()
|
|
86
|
+
|
|
87
|
+
async def get_viewport_size(self) -> Size:
|
|
88
|
+
return await self.sync_to_trio(sync_function=self._get_viewport_size_impl)()
|
|
89
|
+
|
|
90
|
+
async def open_new_tab(self, link: str = "") -> None:
|
|
91
|
+
await self.sync_to_trio(sync_function=self._open_new_tab_impl)(link=link)
|
|
92
|
+
|
|
93
|
+
@property
|
|
94
|
+
def scripts(self) -> JS_Scripts:
|
|
95
|
+
return self._scripts_impl
|
|
96
|
+
|
|
97
|
+
async def start_fingerprint_detection(self, fingerprint_settings: FingerprintSettings) -> None:
|
|
98
|
+
await self.sync_to_trio(sync_function=self._start_fingerprint_detection_impl)(fingerprint_settings=fingerprint_settings)
|
|
99
|
+
|
|
100
|
+
async def stop_window_loading(self) -> None:
|
|
101
|
+
await self.sync_to_trio(sync_function=self._stop_window_loading_impl)()
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import importlib
|
|
2
|
+
from typing import TYPE_CHECKING, Any, Dict, Callable
|
|
3
|
+
|
|
4
|
+
import trio
|
|
5
|
+
|
|
6
|
+
from osn_selenium.abstract.executors.cdp import AbstractCDPExecutor
|
|
7
|
+
from osn_selenium.exceptions.dependencies import CDPPackageError
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
__all__ = ["CDPExecutor"]
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from osn_selenium_cdp_v140.executors.trio_threads import CDP140Executor
|
|
14
|
+
from osn_selenium_cdp_v141.executors.trio_threads import CDP141Executor
|
|
15
|
+
from osn_selenium_cdp_v142.executors.trio_threads import CDP142Executor
|
|
16
|
+
from osn_selenium_cdp_v143.executors.trio_threads import CDP143Executor
|
|
17
|
+
from osn_selenium_cdp_v144.executors.trio_threads import CDP144Executor
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class CDPExecutor(AbstractCDPExecutor):
|
|
21
|
+
"""
|
|
22
|
+
Global CDP executor router.
|
|
23
|
+
Handles lazy loading and version-specific package validation.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, execute_function: Callable[[str, Dict[str, Any]], Any], lock: trio.Lock, limiter: trio.CapacityLimiter):
|
|
27
|
+
self._execute_function = execute_function
|
|
28
|
+
self._lock = lock
|
|
29
|
+
self._limiter = limiter
|
|
30
|
+
|
|
31
|
+
def get(self, version: int) -> Any:
|
|
32
|
+
"""
|
|
33
|
+
Dynamically loads and returns the CDP executor for a specific version.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
version (int): The CDP version number.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
Any: The version-specific executor instance.
|
|
40
|
+
|
|
41
|
+
Raises:
|
|
42
|
+
CDPPackageError: If the version-specific package is not installed.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
if getattr(self, f"_v{version}", None) is None:
|
|
47
|
+
module = importlib.import_module(f"osn_selenium_cdp_v{version}.executors.trio_threads")
|
|
48
|
+
executor_type = getattr(module, f"CDP{version}Executor")
|
|
49
|
+
|
|
50
|
+
setattr(self, f"_v{version}", executor_type(execute_function=self._execute_function, lock=self._lock, limiter=self._limiter))
|
|
51
|
+
|
|
52
|
+
return getattr(self, f"_v{version}", None)
|
|
53
|
+
except ImportError:
|
|
54
|
+
raise CDPPackageError(version=version)
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def v140(self) -> "CDP140Executor":
|
|
58
|
+
"""
|
|
59
|
+
Get or initialize the executor for CDP version 140.
|
|
60
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
return self.get(version=140)
|
|
64
|
+
|
|
65
|
+
@property
|
|
66
|
+
def v141(self) -> "CDP141Executor":
|
|
67
|
+
"""
|
|
68
|
+
Get or initialize the executor for CDP version 141.
|
|
69
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
return self.get(version=141)
|
|
73
|
+
|
|
74
|
+
@property
|
|
75
|
+
def v142(self) -> "CDP142Executor":
|
|
76
|
+
"""
|
|
77
|
+
Get or initialize the executor for CDP version 142.
|
|
78
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
return self.get(version=142)
|
|
82
|
+
|
|
83
|
+
@property
|
|
84
|
+
def v143(self) -> "CDP143Executor":
|
|
85
|
+
"""
|
|
86
|
+
Get or initialize the executor for CDP version 143.
|
|
87
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
return self.get(version=143)
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def v144(self) -> "CDP144Executor":
|
|
94
|
+
"""
|
|
95
|
+
Get or initialize the executor for CDP version 144.
|
|
96
|
+
Raises CDPPackageError if the version-specific package is not installed.
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
return self.get(version=144)
|
|
@@ -21,10 +21,6 @@ __all__ = ["UnifiedJSExecutor"]
|
|
|
21
21
|
class UnifiedJSExecutor:
|
|
22
22
|
"""
|
|
23
23
|
A unified executor for JavaScript scripts within the Selenium environment.
|
|
24
|
-
|
|
25
|
-
Attributes:
|
|
26
|
-
_execute_function (Callable[[str, Any], Any]): The internal function used to execute JS code.
|
|
27
|
-
_scripts (JS_Scripts): A collection of pre-defined JavaScript scripts.
|
|
28
24
|
"""
|
|
29
25
|
|
|
30
26
|
def __init__(self, execute_function: Callable[[str, Any], Any]):
|
osn_selenium/flags/base.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from copy import deepcopy
|
|
2
|
-
from osn_selenium.
|
|
2
|
+
from osn_selenium._base_models import DictModel
|
|
3
3
|
from typing import (
|
|
4
4
|
Any,
|
|
5
5
|
Dict,
|
|
@@ -47,14 +47,6 @@ class BrowserFlagsManager:
|
|
|
47
47
|
|
|
48
48
|
This class provides a structured way to define, set, and build browser options
|
|
49
49
|
for various Selenium WebDriver instances.
|
|
50
|
-
|
|
51
|
-
Attributes:
|
|
52
|
-
_flags_types (Dict[str, FlagType]): A dictionary mapping flag types to their handler functions.
|
|
53
|
-
_flags_definitions (Dict[str, FlagDefinition]): A dictionary of all available flag definitions.
|
|
54
|
-
_flags_definitions_by_types (Dict[str, Dict[str, FlagDefinition]]): Flags definitions grouped by type.
|
|
55
|
-
_arguments (Dict[str, ArgumentValue]): Stores the configured command-line arguments.
|
|
56
|
-
_experimental_options (Dict[str, ExperimentalOptionValue]): Stores the configured experimental options.
|
|
57
|
-
_attributes (Dict[str, AttributeValue]): Stores the configured WebDriver attributes.
|
|
58
50
|
"""
|
|
59
51
|
|
|
60
52
|
def __init__(
|
|
@@ -159,7 +151,7 @@ class BrowserFlagsManager:
|
|
|
159
151
|
def clear_attributes(self):
|
|
160
152
|
"""Clears all configured browser attributes."""
|
|
161
153
|
|
|
162
|
-
self._attributes
|
|
154
|
+
self._attributes.clear()
|
|
163
155
|
|
|
164
156
|
def remove_attribute(self, attribute_name: str):
|
|
165
157
|
"""
|
|
@@ -244,7 +236,7 @@ class BrowserFlagsManager:
|
|
|
244
236
|
def clear_experimental_options(self):
|
|
245
237
|
"""Clears all configured experimental options."""
|
|
246
238
|
|
|
247
|
-
self._experimental_options
|
|
239
|
+
self._experimental_options.clear()
|
|
248
240
|
|
|
249
241
|
def remove_experimental_option(self, experimental_option_name: str):
|
|
250
242
|
"""
|
|
@@ -346,7 +338,7 @@ class BrowserFlagsManager:
|
|
|
346
338
|
def clear_arguments(self):
|
|
347
339
|
"""Clears all configured browser arguments."""
|
|
348
340
|
|
|
349
|
-
self._arguments
|
|
341
|
+
self._arguments.clear()
|
|
350
342
|
|
|
351
343
|
def remove_argument(self, argument_name: str):
|
|
352
344
|
"""
|
|
@@ -471,7 +463,9 @@ class BrowserFlagsManager:
|
|
|
471
463
|
|
|
472
464
|
for type_name, type_functions in self._flags_types.items():
|
|
473
465
|
options = type_functions.build_options_function(options)
|
|
474
|
-
|
|
466
|
+
|
|
467
|
+
options.set_capability("webSocketUrl", True)
|
|
468
|
+
|
|
475
469
|
return options
|
|
476
470
|
|
|
477
471
|
def remove_option(self, option: FlagDefinition):
|
osn_selenium/flags/blink.py
CHANGED
|
@@ -44,12 +44,6 @@ class BlinkFlagsManager(BrowserFlagsManager):
|
|
|
44
44
|
This class extends `BrowserFlagsManager` to handle Blink-specific features,
|
|
45
45
|
such as `--enable-blink-features` and `--disable-blink-features`, and provides
|
|
46
46
|
a comprehensive set of predefined flags for these browsers.
|
|
47
|
-
|
|
48
|
-
Attributes:
|
|
49
|
-
_browser_exe (Optional[PATH_TYPEHINT]): Path to the browser executable.
|
|
50
|
-
_start_page_url (Optional[str]): The URL to open when the browser starts.
|
|
51
|
-
_enable_blink_features (Dict[str, str]): Stores enabled Blink feature commands.
|
|
52
|
-
_disable_blink_features (Dict[str, str]): Stores disabled Blink feature commands.
|
|
53
47
|
"""
|
|
54
48
|
|
|
55
49
|
def __init__(
|
|
@@ -776,8 +770,8 @@ class BlinkFlagsManager(BrowserFlagsManager):
|
|
|
776
770
|
def clear_blink_features(self):
|
|
777
771
|
"""Clears all configured Blink features."""
|
|
778
772
|
|
|
779
|
-
self._enable_blink_features
|
|
780
|
-
self._disable_blink_features
|
|
773
|
+
self._enable_blink_features.clear()
|
|
774
|
+
self._disable_blink_features.clear()
|
|
781
775
|
|
|
782
776
|
def remove_blink_feature(self, blink_feature_name: str):
|
|
783
777
|
"""
|
osn_selenium/flags/chrome.py
CHANGED
|
@@ -42,21 +42,21 @@ class ChromeFlagsManager(BlinkFlagsManager):
|
|
|
42
42
|
debugging port, user agent, proxy, and BiDi protocol.
|
|
43
43
|
"""
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
chrome_flags_types = {}
|
|
46
46
|
|
|
47
47
|
if flags_types is not None:
|
|
48
|
-
|
|
48
|
+
chrome_flags_types.update(flags_types)
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
chrome_flags_definitions = {}
|
|
51
51
|
|
|
52
52
|
if flags_definitions is not None:
|
|
53
|
-
|
|
53
|
+
chrome_flags_definitions.update(flags_definitions)
|
|
54
54
|
|
|
55
55
|
super().__init__(
|
|
56
56
|
browser_exe=browser_exe,
|
|
57
57
|
start_page_url=start_page_url,
|
|
58
|
-
flags_types=
|
|
59
|
-
flags_definitions=
|
|
58
|
+
flags_types=chrome_flags_types,
|
|
59
|
+
flags_definitions=chrome_flags_definitions,
|
|
60
60
|
)
|
|
61
61
|
|
|
62
62
|
def _build_options_arguments(self, options: Options) -> Options:
|
osn_selenium/flags/edge.py
CHANGED
|
@@ -42,21 +42,21 @@ class EdgeFlagsManager(BlinkFlagsManager):
|
|
|
42
42
|
debugging port, user agent, proxy, and BiDi protocol.
|
|
43
43
|
"""
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
edge_flags_types = {}
|
|
46
46
|
|
|
47
47
|
if flags_types is not None:
|
|
48
|
-
|
|
48
|
+
edge_flags_types.update(flags_types)
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
edge_flags_definitions = {}
|
|
51
51
|
|
|
52
52
|
if flags_definitions is not None:
|
|
53
|
-
|
|
53
|
+
edge_flags_definitions.update(flags_definitions)
|
|
54
54
|
|
|
55
55
|
super().__init__(
|
|
56
56
|
browser_exe=browser_exe,
|
|
57
57
|
start_page_url=start_page_url,
|
|
58
|
-
flags_types=
|
|
59
|
-
flags_definitions=
|
|
58
|
+
flags_types=edge_flags_types,
|
|
59
|
+
flags_definitions=edge_flags_definitions,
|
|
60
60
|
)
|
|
61
61
|
|
|
62
62
|
def _build_options_arguments(self, options: Options) -> Options:
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
from pydantic import Field
|
|
2
|
-
from osn_selenium.models import (
|
|
3
|
-
DictModel,
|
|
4
|
-
ExtraDictModel
|
|
5
|
-
)
|
|
6
2
|
from typing import (
|
|
7
3
|
Any,
|
|
8
4
|
Callable,
|
|
@@ -10,6 +6,10 @@ from typing import (
|
|
|
10
6
|
Literal,
|
|
11
7
|
Optional
|
|
12
8
|
)
|
|
9
|
+
from osn_selenium._base_models import (
|
|
10
|
+
DictModel,
|
|
11
|
+
ExtraDictModel
|
|
12
|
+
)
|
|
13
13
|
from osn_selenium.flags._typehints import (
|
|
14
14
|
ANY_WEBDRIVER_OPTION_TYPEHINT
|
|
15
15
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from pydantic import Field
|
|
2
2
|
from typing import Optional
|
|
3
|
-
from osn_selenium.models import ExtraDictModel
|
|
4
3
|
from osn_selenium._typehints import PATH_TYPEHINT
|
|
4
|
+
from osn_selenium._base_models import ExtraDictModel
|
|
5
5
|
from osn_selenium.flags._typehints import (
|
|
6
6
|
AUTOPLAY_POLICY_TYPEHINT,
|
|
7
7
|
LOG_LEVEL_TYPEHINT,
|
|
@@ -52,13 +52,14 @@ from selenium.webdriver.common.bidi.permissions import (
|
|
|
52
52
|
from selenium.webdriver.common.bidi.webextension import (
|
|
53
53
|
WebExtension as legacyWebExtension
|
|
54
54
|
)
|
|
55
|
+
from selenium.webdriver.common.bidi.browsing_context import (
|
|
56
|
+
BrowsingContext as legacyBrowsingContext
|
|
57
|
+
)
|
|
55
58
|
from osn_selenium.instances.protocols import (
|
|
56
59
|
SyncInstanceWrapper,
|
|
60
|
+
TrioBiDiInstanceWrapper,
|
|
57
61
|
TrioThreadInstanceWrapper
|
|
58
62
|
)
|
|
59
|
-
from selenium.webdriver.common.bidi.browsing_context import (
|
|
60
|
-
BrowsingContext as legacyBrowsingContext
|
|
61
|
-
)
|
|
62
63
|
from osn_selenium.instances._typehints import (
|
|
63
64
|
ACTION_CHAINS_TYPEHINT,
|
|
64
65
|
ALERT_TYPEHINT,
|
|
@@ -85,11 +86,13 @@ __all__ = [
|
|
|
85
86
|
"get_legacy_frame_reference",
|
|
86
87
|
"get_legacy_instance",
|
|
87
88
|
"get_sync_instance_wrapper",
|
|
89
|
+
"get_trio_bidi_instance_wrapper",
|
|
88
90
|
"get_trio_thread_instance_wrapper"
|
|
89
91
|
]
|
|
90
92
|
|
|
91
93
|
_SYNC_WRAPPER_TYPE = TypeVar("_SYNC_WRAPPER_TYPE", bound=SyncInstanceWrapper)
|
|
92
94
|
_TRIO_THREAD_WRAPPER_TYPE = TypeVar("_TRIO_THREAD_WRAPPER_TYPE", bound=TrioThreadInstanceWrapper)
|
|
95
|
+
_TRIO_BIDI_WRAPPER_TYPE = TypeVar("_TRIO_BIDI_WRAPPER_TYPE", bound=TrioBiDiInstanceWrapper)
|
|
93
96
|
|
|
94
97
|
|
|
95
98
|
@overload
|
|
@@ -243,6 +246,44 @@ def get_trio_thread_instance_wrapper(
|
|
|
243
246
|
return wrapper_class.from_legacy(legacy_object=legacy_object, lock=lock, limiter=limiter)
|
|
244
247
|
|
|
245
248
|
|
|
249
|
+
def get_trio_bidi_instance_wrapper(
|
|
250
|
+
wrapper_class: Type[_TRIO_BIDI_WRAPPER_TYPE],
|
|
251
|
+
legacy_object: Any,
|
|
252
|
+
lock: trio.Lock,
|
|
253
|
+
limiter: trio.CapacityLimiter,
|
|
254
|
+
trio_token: Optional[trio.lowlevel.TrioToken],
|
|
255
|
+
bidi_buffer_size: Union[int, float],
|
|
256
|
+
) -> _TRIO_BIDI_WRAPPER_TYPE:
|
|
257
|
+
"""
|
|
258
|
+
Creates a Trio-compatible BiDi instance wrapper for a legacy Selenium object.
|
|
259
|
+
|
|
260
|
+
Args:
|
|
261
|
+
wrapper_class (Type[_TRIO_BIDI_WRAPPER_TYPE]): The class used to wrap the legacy object.
|
|
262
|
+
legacy_object (Any): The legacy Selenium object to be wrapped.
|
|
263
|
+
lock (trio.Lock): The lock for Trio synchronization.
|
|
264
|
+
limiter (trio.CapacityLimiter): The capacity limiter for Trio.
|
|
265
|
+
trio_token (Optional[trio.lowlevel.TrioToken]): The Trio token for the current event loop.
|
|
266
|
+
bidi_buffer_size (Union[int, float]): Buffer size for the BiDi task channel.
|
|
267
|
+
|
|
268
|
+
Returns:
|
|
269
|
+
_TRIO_BIDI_WRAPPER_TYPE: An instance of the wrapper class.
|
|
270
|
+
|
|
271
|
+
Raises:
|
|
272
|
+
TypeIsNotWrapper: If the provided wrapper_class does not implement TrioBiDiInstanceWrapper.
|
|
273
|
+
"""
|
|
274
|
+
|
|
275
|
+
if not isinstance(wrapper_class, TrioBiDiInstanceWrapper):
|
|
276
|
+
raise ProtocolComplianceError(instance=wrapper_class, expected_protocols=TrioBiDiInstanceWrapper)
|
|
277
|
+
|
|
278
|
+
return wrapper_class.from_legacy(
|
|
279
|
+
legacy_object=legacy_object,
|
|
280
|
+
lock=lock,
|
|
281
|
+
limiter=limiter,
|
|
282
|
+
trio_token=trio_token,
|
|
283
|
+
bidi_buffer_size=bidi_buffer_size
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
|
|
246
287
|
def get_sync_instance_wrapper(wrapper_class: Type[_SYNC_WRAPPER_TYPE], legacy_object: Any) -> _SYNC_WRAPPER_TYPE:
|
|
247
288
|
"""
|
|
248
289
|
Creates a synchronous instance wrapper for a legacy Selenium object.
|