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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import trio
|
|
2
2
|
from typing import List
|
|
3
|
+
from osn_selenium._decorators import log_on_error
|
|
3
4
|
from osn_selenium.dev_tools.target.detach import DetachMixin
|
|
4
|
-
from osn_selenium.exceptions.devtools import CDPEndExceptions
|
|
5
5
|
from osn_selenium.dev_tools.target.discovery import DiscoveryMixin
|
|
6
6
|
from osn_selenium.dev_tools.target.events import EventHandlersMixin
|
|
7
7
|
from osn_selenium.dev_tools.logger.target import build_target_logger
|
|
@@ -17,6 +17,10 @@ from osn_selenium.dev_tools._functions import (
|
|
|
17
17
|
execute_cdp_command,
|
|
18
18
|
wait_one
|
|
19
19
|
)
|
|
20
|
+
from osn_selenium.exceptions.devtools import (
|
|
21
|
+
CDPEndExceptions,
|
|
22
|
+
TrioEndExceptions
|
|
23
|
+
)
|
|
20
24
|
|
|
21
25
|
|
|
22
26
|
__all__ = ["LifecycleMixin"]
|
|
@@ -32,36 +36,96 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
|
|
|
32
36
|
Closes all active resources, channels, and loggers associated with the target.
|
|
33
37
|
"""
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
39
|
+
@log_on_error
|
|
40
|
+
async def _close_new_target_receive_channel() -> None:
|
|
41
|
+
if self._new_target_receive_channel is not None:
|
|
42
|
+
try:
|
|
43
|
+
await self._new_target_receive_channel[0].aclose()
|
|
44
|
+
await self._new_target_receive_channel[1].wait()
|
|
45
|
+
except TrioEndExceptions:
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
self._new_target_receive_channel = None
|
|
49
|
+
|
|
50
|
+
@log_on_error
|
|
51
|
+
async def _close_logger_fingerprint_send_channel() -> None:
|
|
52
|
+
if self._logger_fingerprint_send_channel is not None:
|
|
53
|
+
try:
|
|
54
|
+
await self._logger_fingerprint_send_channel.aclose()
|
|
55
|
+
except TrioEndExceptions:
|
|
56
|
+
pass
|
|
57
|
+
|
|
58
|
+
self._logger_fingerprint_send_channel = None
|
|
59
|
+
|
|
60
|
+
@log_on_error
|
|
61
|
+
async def _close_logger_cdp_send_channel() -> None:
|
|
62
|
+
if self._logger_cdp_send_channel is not None:
|
|
63
|
+
try:
|
|
64
|
+
await self._logger_cdp_send_channel.aclose()
|
|
65
|
+
except TrioEndExceptions:
|
|
66
|
+
pass
|
|
67
|
+
|
|
68
|
+
self._logger_cdp_send_channel = None
|
|
69
|
+
|
|
70
|
+
@log_on_error
|
|
71
|
+
async def _close_logger() -> None:
|
|
72
|
+
if self._logger is not None:
|
|
73
|
+
try:
|
|
74
|
+
await self._logger.close()
|
|
75
|
+
except TrioEndExceptions:
|
|
76
|
+
pass
|
|
77
|
+
|
|
78
|
+
self._logger = None
|
|
79
|
+
|
|
80
|
+
@log_on_error
|
|
81
|
+
async def _close_events_receive_channels() -> None:
|
|
82
|
+
for event_name, channel in self._events_receive_channels.items():
|
|
83
|
+
try:
|
|
84
|
+
await channel[0].aclose()
|
|
85
|
+
await channel[1].wait()
|
|
86
|
+
except TrioEndExceptions:
|
|
87
|
+
pass
|
|
88
|
+
|
|
89
|
+
self._events_receive_channels.clear()
|
|
90
|
+
|
|
91
|
+
@log_on_error
|
|
92
|
+
async def _close_detached_receive_channel() -> None:
|
|
93
|
+
if self._detached_receive_channel is not None:
|
|
94
|
+
try:
|
|
95
|
+
await self._detached_receive_channel.aclose()
|
|
96
|
+
except TrioEndExceptions:
|
|
97
|
+
pass
|
|
98
|
+
|
|
99
|
+
self._detached_receive_channel = None
|
|
100
|
+
|
|
101
|
+
@log_on_error
|
|
102
|
+
def _close_cancel_scopes() -> None:
|
|
103
|
+
for scope_name, scope in self._cancel_scopes.items():
|
|
104
|
+
try:
|
|
105
|
+
scope.cancel()
|
|
106
|
+
except TrioEndExceptions:
|
|
107
|
+
pass
|
|
108
|
+
|
|
109
|
+
self._cancel_scopes.clear()
|
|
110
|
+
|
|
111
|
+
@log_on_error
|
|
112
|
+
async def _close_background_task() -> None:
|
|
113
|
+
if self.background_task_ended is not None:
|
|
114
|
+
try:
|
|
115
|
+
await self.background_task_ended.wait()
|
|
116
|
+
except TrioEndExceptions:
|
|
117
|
+
pass
|
|
118
|
+
|
|
119
|
+
self.background_task_ended = None
|
|
120
|
+
|
|
121
|
+
await _close_new_target_receive_channel()
|
|
122
|
+
await _close_detached_receive_channel()
|
|
123
|
+
await _close_logger_cdp_send_channel()
|
|
124
|
+
await _close_logger_fingerprint_send_channel()
|
|
125
|
+
await _close_logger()
|
|
126
|
+
await _close_events_receive_channels()
|
|
127
|
+
_close_cancel_scopes()
|
|
128
|
+
await _close_background_task()
|
|
65
129
|
|
|
66
130
|
async def _setup_target(self):
|
|
67
131
|
"""
|
|
@@ -88,9 +152,9 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
|
|
|
88
152
|
fingerprint_detecting_ready_event = trio.Event()
|
|
89
153
|
target_ready_events.append(fingerprint_detecting_ready_event)
|
|
90
154
|
|
|
91
|
-
self.
|
|
92
|
-
self.
|
|
93
|
-
self.
|
|
155
|
+
self._nursery.start_soon(self._run_new_targets_listener, new_targets_listener_ready_event)
|
|
156
|
+
self._nursery.start_soon(self._setup_fingerprint_injection, fingerprint_detecting_ready_event)
|
|
157
|
+
self._nursery.start_soon(self._run_detach_checking)
|
|
94
158
|
|
|
95
159
|
if self._domains_settings:
|
|
96
160
|
for domain_name, domain_config in self._domains_settings.model_dump(exclude_none=True).items():
|
|
@@ -112,7 +176,7 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
|
|
|
112
176
|
|
|
113
177
|
domain_handlers_ready_event = trio.Event()
|
|
114
178
|
target_ready_events.append(domain_handlers_ready_event)
|
|
115
|
-
self.
|
|
179
|
+
self._nursery.start_soon(
|
|
116
180
|
self._run_events_handlers,
|
|
117
181
|
domain_handlers_ready_event,
|
|
118
182
|
getattr(self._domains_settings, domain_name)
|
|
@@ -146,7 +210,7 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
|
|
|
146
210
|
"""
|
|
147
211
|
|
|
148
212
|
try:
|
|
149
|
-
self._logger_cdp_send_channel, self._logger_fingerprint_send_channel, self._logger = build_target_logger(self.target_data, self.
|
|
213
|
+
self._logger_cdp_send_channel, self._logger_fingerprint_send_channel, self._logger = build_target_logger(self.target_data, self._nursery, self._logger_settings)
|
|
150
214
|
|
|
151
215
|
if self._cdp_target_type_log_accepted:
|
|
152
216
|
await self._logger.run()
|
|
@@ -162,8 +226,9 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
|
|
|
162
226
|
await self._setup_target()
|
|
163
227
|
|
|
164
228
|
if self._target_background_task is not None:
|
|
165
|
-
self.
|
|
166
|
-
|
|
229
|
+
self._nursery.start_soon(background_task_decorator(self._target_background_task), self)
|
|
230
|
+
|
|
231
|
+
self.started_event.set()
|
|
167
232
|
await wait_one(self.exit_event, self.about_to_stop_event)
|
|
168
233
|
except* (BrowserError, RuntimeError):
|
|
169
234
|
self.about_to_stop_event.set()
|
|
@@ -10,7 +10,7 @@ from typing import (
|
|
|
10
10
|
Optional,
|
|
11
11
|
TYPE_CHECKING
|
|
12
12
|
)
|
|
13
|
-
from osn_selenium.
|
|
13
|
+
from osn_selenium._exception_helpers import (
|
|
14
14
|
extract_exception_trace,
|
|
15
15
|
log_exception
|
|
16
16
|
)
|
|
@@ -64,7 +64,11 @@ class LoggingMixin(BaseMixin):
|
|
|
64
64
|
await self._logger.run()
|
|
65
65
|
|
|
66
66
|
try:
|
|
67
|
-
self.
|
|
67
|
+
if self._logger.filter_cdp_log(log_entry=log_entry):
|
|
68
|
+
if self._logger_settings.cdp_settings.send_wait:
|
|
69
|
+
await self._logger_cdp_send_channel.send(log_entry)
|
|
70
|
+
else:
|
|
71
|
+
self._logger_cdp_send_channel.send_nowait(log_entry)
|
|
68
72
|
except trio.WouldBlock:
|
|
69
73
|
warnings.warn(
|
|
70
74
|
f"WARNING: Log channel for session {self.target_id} is full. Log dropped:\n{log_entry.model_dump_json(indent=4)}"
|
|
@@ -144,7 +148,11 @@ class LoggingMixin(BaseMixin):
|
|
|
144
148
|
await self._logger.run()
|
|
145
149
|
|
|
146
150
|
try:
|
|
147
|
-
self.
|
|
151
|
+
if self._logger.filter_fingerprint_log(log_entry=log_entry):
|
|
152
|
+
if self._logger_settings.fingerprint_settings.send_wait:
|
|
153
|
+
await self._logger_fingerprint_send_channel.send(log_entry)
|
|
154
|
+
else:
|
|
155
|
+
self._logger_fingerprint_send_channel.send_nowait(log_entry)
|
|
148
156
|
except trio.WouldBlock:
|
|
149
157
|
warnings.warn(
|
|
150
158
|
f"WARNING: Log channel for session {self.target_id} is full. Log dropped:\n{log_entry.model_dump_json(indent=4)}"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
osn_selenium/exceptions/base.py
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
from osn_selenium._exception_helpers import (
|
|
2
|
+
extract_exception_trace
|
|
3
|
+
)
|
|
2
4
|
|
|
5
|
+
__all__ = ["ExceptionThrown", "OSNSeleniumError"]
|
|
3
6
|
|
|
4
7
|
class OSNSeleniumError(Exception):
|
|
5
8
|
"""
|
|
@@ -7,3 +10,27 @@ class OSNSeleniumError(Exception):
|
|
|
7
10
|
"""
|
|
8
11
|
|
|
9
12
|
pass
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ExceptionThrown:
|
|
16
|
+
"""
|
|
17
|
+
A wrapper class to indicate that an exception was thrown during an operation.
|
|
18
|
+
|
|
19
|
+
This is used in `execute_cdp_command` when `error_mode` is "log" or "pass"
|
|
20
|
+
to return an object indicating an error occurred without re-raising it immediately.
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
exception (BaseException): The exception that was caught.
|
|
24
|
+
traceback (str): The formatted traceback string of the exception.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(self, exception: BaseException) -> None:
|
|
28
|
+
"""
|
|
29
|
+
Initializes the ExceptionThrown wrapper.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
exception (BaseException): The exception to wrap.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
self.exception = exception
|
|
36
|
+
self.traceback = extract_exception_trace(exception)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from osn_selenium.exceptions.base import OSNSeleniumError
|
|
2
|
+
|
|
3
|
+
__all__ = ["BiDiBridgeError", "BiDiBridgeStoppedError", "BiDiExecutionError", "CommandNotMappedToBiDiError"]
|
|
4
|
+
|
|
5
|
+
class BiDiBridgeError(OSNSeleniumError):
|
|
6
|
+
"""
|
|
7
|
+
Base class for exceptions related to the BiDi Bridge.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
pass
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CommandNotMappedToBiDiError(BiDiBridgeError):
|
|
14
|
+
"""
|
|
15
|
+
Exception raised when a requested W3C command has no corresponding BiDi mapping.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, command: str) -> None:
|
|
19
|
+
"""
|
|
20
|
+
Initialize the exception.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
command (str): The name of the unmapped command.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
super().__init__(f"{command} is not mapped to BiDi.")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class BiDiExecutionError(OSNSeleniumError):
|
|
30
|
+
"""
|
|
31
|
+
Exception raised when a BiDi command execution fails on the browser side.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(self, error: str, message: str) -> None:
|
|
35
|
+
"""
|
|
36
|
+
Initialize the exception with the error type and message.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
error (str): The error category or code returned by the BiDi protocol.
|
|
40
|
+
message (str): The detailed error message provided by the browser.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
super().__init__(f"BiDi: {error} - {message}")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class BiDiBridgeStoppedError(BiDiBridgeError):
|
|
47
|
+
"""
|
|
48
|
+
Raised when the BiDi bridge has been stopped while tasks were still pending.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
def __init__(self, reason: str) -> None:
|
|
52
|
+
"""
|
|
53
|
+
Initializes the error with the stop reason.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
reason (str): The reason why the bridge stopped.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
super().__init__(f"BiDi bridge was stopped. Reason: {reason}")
|
|
@@ -5,14 +5,7 @@ from osn_selenium._typehints import (
|
|
|
5
5
|
TYPES_FOR_FLATTENING_TYPEHINT
|
|
6
6
|
)
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
__all__ = [
|
|
10
|
-
"ConfigurationError",
|
|
11
|
-
"DuplicationError",
|
|
12
|
-
"NotExpectedTypeError",
|
|
13
|
-
"NotExpectedValueError"
|
|
14
|
-
]
|
|
15
|
-
|
|
8
|
+
__all__ = ["ConfigurationError", "DuplicationError", "NotExpectedTypeError", "NotExpectedValueError"]
|
|
16
9
|
|
|
17
10
|
class ConfigurationError(OSNSeleniumError):
|
|
18
11
|
"""
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from typing import Union
|
|
2
|
+
from osn_selenium.exceptions.base import OSNSeleniumError
|
|
3
|
+
from osn_selenium._cdp_import import (
|
|
4
|
+
check_cdp_version_exists_on_github
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
__all__ = ["CDPPackageError", "DependencyError"]
|
|
8
|
+
|
|
9
|
+
_CDP_PACKAGE_EXISTS = """
|
|
10
|
+
CDP package for {version} is not installed.
|
|
11
|
+
Fix: Run the following command:
|
|
12
|
+
\t`pip install git+https://github.com/oddshellnick/osn-selenium-cdp.git@{version}`
|
|
13
|
+
""".strip("\n")
|
|
14
|
+
|
|
15
|
+
_CDP_PACKAGE_NOT_EXISTS = """
|
|
16
|
+
CDP package for version {version} was not found on GitHub or locally.
|
|
17
|
+
Please check available versions at: https://github.com/oddshellnick/osn-selenium-cdp
|
|
18
|
+
If you need this specific version, you can generate it using the https://github.com/oddshellnick/selenium-package-parser tool.
|
|
19
|
+
""".strip("\n")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class DependencyError(OSNSeleniumError):
|
|
23
|
+
"""
|
|
24
|
+
Base exception for dependency-related issues.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class CDPPackageError(DependencyError):
|
|
31
|
+
"""
|
|
32
|
+
Exception raised when a required CDP package is missing.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def __init__(self, version: Union[int, str]):
|
|
36
|
+
"""
|
|
37
|
+
Initializes the error with version details.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
version (Union[int, str]): The missing CDP version.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
self.version = version if isinstance(version, str) else f"v{version}"
|
|
44
|
+
|
|
45
|
+
super().__init__(self._generate_report())
|
|
46
|
+
|
|
47
|
+
def _generate_report(self) -> str:
|
|
48
|
+
"""
|
|
49
|
+
Generates a detailed error message checking remote availability.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
str: Formatted error message with instructions.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
version_exists_on_github = check_cdp_version_exists_on_github(version=self.version)
|
|
56
|
+
|
|
57
|
+
if version_exists_on_github:
|
|
58
|
+
return _CDP_PACKAGE_EXISTS.format(version=self.version)
|
|
59
|
+
|
|
60
|
+
return _CDP_PACKAGE_NOT_EXISTS.format(version=self.version)
|
|
@@ -1,48 +1,12 @@
|
|
|
1
1
|
import trio
|
|
2
|
+
import trio_websocket
|
|
2
3
|
from osn_selenium.exceptions.base import OSNSeleniumError
|
|
3
|
-
from osn_selenium.dev_tools._exception_helpers import (
|
|
4
|
-
extract_exception_trace
|
|
5
|
-
)
|
|
6
4
|
from selenium.webdriver.common.bidi.cdp import (
|
|
7
5
|
BrowserError,
|
|
8
6
|
CdpConnectionClosed
|
|
9
7
|
)
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
__all__ = [
|
|
13
|
-
"BidiConnectionNotEstablishedError",
|
|
14
|
-
"CDPCommandNotFoundError",
|
|
15
|
-
"CDPEndExceptions",
|
|
16
|
-
"CantEnterDevToolsContextError",
|
|
17
|
-
"DevToolsError",
|
|
18
|
-
"ExceptionThrown",
|
|
19
|
-
"TrioEndExceptions"
|
|
20
|
-
]
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class ExceptionThrown:
|
|
24
|
-
"""
|
|
25
|
-
A wrapper class to indicate that an exception was thrown during an operation.
|
|
26
|
-
|
|
27
|
-
This is used in `execute_cdp_command` when `error_mode` is "log" or "pass"
|
|
28
|
-
to return an object indicating an error occurred without re-raising it immediately.
|
|
29
|
-
|
|
30
|
-
Attributes:
|
|
31
|
-
exception (BaseException): The exception that was caught.
|
|
32
|
-
traceback (str): The formatted traceback string of the exception.
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
def __init__(self, exception: BaseException) -> None:
|
|
36
|
-
"""
|
|
37
|
-
Initializes the ExceptionThrown wrapper.
|
|
38
|
-
|
|
39
|
-
Args:
|
|
40
|
-
exception (BaseException): The exception to wrap.
|
|
41
|
-
"""
|
|
42
|
-
|
|
43
|
-
self.exception = exception
|
|
44
|
-
self.traceback = extract_exception_trace(exception)
|
|
45
|
-
|
|
9
|
+
__all__ = ["BidiConnectionNotEstablishedError", "CDPCommandNotFoundError", "CDPEndExceptions", "CantEnterDevToolsContextError", "DevToolsError", "TrioEndExceptions", "WebSocketEndExceptions"]
|
|
46
10
|
|
|
47
11
|
class DevToolsError(OSNSeleniumError):
|
|
48
12
|
"""
|
|
@@ -76,7 +40,7 @@ class CDPCommandNotFoundError(DevToolsError):
|
|
|
76
40
|
Error raised when a requested CDP command attribute is not found in the specified module.
|
|
77
41
|
"""
|
|
78
42
|
|
|
79
|
-
def __init__(self, object_: str, module_: str):
|
|
43
|
+
def __init__(self, object_: str, module_: str) -> None:
|
|
80
44
|
"""
|
|
81
45
|
Initializes CDPCommandNotFoundError.
|
|
82
46
|
|
|
@@ -105,6 +69,12 @@ class BidiConnectionNotEstablishedError(DevToolsError):
|
|
|
105
69
|
|
|
106
70
|
|
|
107
71
|
TrioEndExceptions = (trio.Cancelled, trio.EndOfChannel, trio.ClosedResourceError)
|
|
72
|
+
WebSocketEndExceptions = (
|
|
73
|
+
trio.Cancelled,
|
|
74
|
+
trio.EndOfChannel,
|
|
75
|
+
trio.ClosedResourceError,
|
|
76
|
+
trio_websocket.ConnectionClosed
|
|
77
|
+
)
|
|
108
78
|
CDPEndExceptions = (
|
|
109
79
|
trio.Cancelled,
|
|
110
80
|
trio.EndOfChannel,
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from osn_selenium.exceptions.base import OSNSeleniumError
|
|
2
|
+
|
|
3
|
+
__all__ = ["ExperimentalFeatureError", "NotImplementedExperimentalFeatureError"]
|
|
4
|
+
|
|
5
|
+
class ExperimentalFeatureError(OSNSeleniumError):
|
|
6
|
+
"""
|
|
7
|
+
Base exception for experimental feature errors.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
pass
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class NotImplementedExperimentalFeatureError(ExperimentalFeatureError):
|
|
14
|
+
"""
|
|
15
|
+
Raised when an experimental feature is not yet implemented.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, name: str):
|
|
19
|
+
"""
|
|
20
|
+
Initializes the error with the name of the missing feature.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
name (str): The name of the feature.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
super().__init__(f"{name} is not implemented in current version.")
|
osn_selenium/exceptions/flags.py
CHANGED
|
@@ -10,15 +10,7 @@ from osn_selenium._typehints import (
|
|
|
10
10
|
TYPES_FOR_FLATTENING_TYPEHINT
|
|
11
11
|
)
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
__all__ = [
|
|
15
|
-
"CannotConvertTypeError",
|
|
16
|
-
"ElementInteractionError",
|
|
17
|
-
"ElementNotVisibleError",
|
|
18
|
-
"InstanceError",
|
|
19
|
-
"NotExpectedTypeError"
|
|
20
|
-
]
|
|
21
|
-
|
|
13
|
+
__all__ = ["CannotConvertTypeError", "ElementInteractionError", "ElementNotVisibleError", "InstanceError", "NotExpectedTypeError"]
|
|
22
14
|
|
|
23
15
|
class InstanceError(OSNSeleniumError):
|
|
24
16
|
"""
|
osn_selenium/exceptions/logic.py
CHANGED
osn_selenium/exceptions/path.py
CHANGED
|
@@ -2,15 +2,7 @@ from typing import Any
|
|
|
2
2
|
from osn_selenium._typehints import PATH_TYPEHINT
|
|
3
3
|
from osn_selenium.exceptions.base import OSNSeleniumError
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
__all__ = [
|
|
7
|
-
"BrowserExecutableNotFoundError",
|
|
8
|
-
"ExecutableError",
|
|
9
|
-
"PathError",
|
|
10
|
-
"PathValidationError",
|
|
11
|
-
"WebDriverExecutableNotFoundError"
|
|
12
|
-
]
|
|
13
|
-
|
|
5
|
+
__all__ = ["BrowserExecutableNotFoundError", "ExecutableError", "PathError", "PathValidationError", "WebDriverExecutableNotFoundError"]
|
|
14
6
|
|
|
15
7
|
class PathError(OSNSeleniumError):
|
|
16
8
|
"""
|
|
@@ -2,16 +2,13 @@ from osn_selenium.exceptions.base import OSNSeleniumError
|
|
|
2
2
|
from typing import (
|
|
3
3
|
Any,
|
|
4
4
|
Iterable,
|
|
5
|
-
Protocol,
|
|
6
5
|
Type,
|
|
7
6
|
Union,
|
|
8
7
|
get_origin
|
|
9
8
|
)
|
|
10
9
|
|
|
11
|
-
|
|
12
10
|
__all__ = ["ProtocolComplianceError", "ProtocolError"]
|
|
13
11
|
|
|
14
|
-
|
|
15
12
|
class ProtocolError(OSNSeleniumError):
|
|
16
13
|
"""
|
|
17
14
|
Base class for errors related to Protocol contract violations.
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
from osn_selenium.exceptions.base import OSNSeleniumError
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
__all__ = [
|
|
5
|
-
"WebDriverAlreadyRunningError",
|
|
6
|
-
"WebDriverError",
|
|
7
|
-
"WebDriverNotStartedError"
|
|
8
|
-
]
|
|
9
|
-
|
|
3
|
+
__all__ = ["WebDriverAlreadyRunningError", "WebDriverError", "WebDriverNotStartedError"]
|
|
10
4
|
|
|
11
5
|
class WebDriverError(OSNSeleniumError):
|
|
12
6
|
"""
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
from osn_selenium.exceptions.base import OSNSeleniumError
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
__all__ = [
|
|
5
|
-
"InvalidWindowHandleError",
|
|
6
|
-
"InvalidWindowIndexError",
|
|
7
|
-
"NoWindowHandlesFoundError",
|
|
8
|
-
"WindowManagementError"
|
|
9
|
-
]
|
|
10
|
-
|
|
3
|
+
__all__ = ["InvalidWindowHandleError", "InvalidWindowIndexError", "NoWindowHandlesFoundError", "WindowManagementError"]
|
|
11
4
|
|
|
12
5
|
class WindowManagementError(OSNSeleniumError):
|
|
13
6
|
"""
|