osn-selenium 1.1.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/_decorators.py +57 -0
- osn_selenium/_trio_threads_helpers.py +157 -0
- osn_selenium/_typehints.py +1 -1
- 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/dev_tools/_decorators.py +1 -42
- osn_selenium/dev_tools/_functions.py +2 -4
- osn_selenium/dev_tools/domains/__init__.py +1 -1
- osn_selenium/dev_tools/domains/fetch.py +5 -7
- osn_selenium/dev_tools/domains_default/fetch.py +1 -1
- osn_selenium/dev_tools/logger/main.py +9 -9
- osn_selenium/dev_tools/logger/target.py +7 -7
- osn_selenium/dev_tools/manager/base.py +10 -19
- osn_selenium/dev_tools/manager/lifecycle.py +83 -74
- osn_selenium/dev_tools/manager/logging.py +1 -1
- osn_selenium/dev_tools/manager/targets.py +13 -5
- osn_selenium/dev_tools/settings.py +4 -4
- osn_selenium/dev_tools/target/base.py +18 -11
- 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 -43
- osn_selenium/dev_tools/target/logging.py +1 -1
- 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 +2 -2
- 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 +0 -5
- 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 +0 -5
- osn_selenium/flags/base.py +6 -4
- osn_selenium/flags/blink.py +2 -2
- osn_selenium/flags/chrome.py +6 -6
- osn_selenium/flags/edge.py +6 -6
- osn_selenium/instances/convert.py +44 -3
- osn_selenium/instances/protocols.py +47 -1
- osn_selenium/instances/sync/browsing_context.py +2 -2
- osn_selenium/instances/sync/script.py +7 -2
- 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/browsing_context.py +2 -2
- osn_selenium/instances/trio_threads/fedcm.py +1 -1
- osn_selenium/instances/trio_threads/network.py +1 -1
- osn_selenium/instances/trio_threads/script.py +7 -2
- 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 +2 -1
- 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/trio_threads_mixin.py +22 -68
- osn_selenium/webdrivers/_args_helpers.py +118 -5
- osn_selenium/webdrivers/_typehints.py +9 -3
- osn_selenium/webdrivers/protocols.py +81 -1
- osn_selenium/webdrivers/sync/blink/base.py +10 -0
- osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
- osn_selenium/webdrivers/sync/core/base.py +3 -11
- 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/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/edge/settings.py +6 -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 +7 -1
- osn_selenium/webdrivers/trio_threads/blink/base.py +14 -0
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
- 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 +0 -10
- 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 +4 -16
- osn_selenium/webdrivers/trio_threads/core/capture.py +3 -2
- osn_selenium/webdrivers/trio_threads/core/file.py +3 -2
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +44 -10
- osn_selenium/webdrivers/trio_threads/core/script.py +3 -2
- 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 +4 -4
- 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/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
- osn_selenium/webdrivers/unified/blink/base.py +5 -1
- osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
- osn_selenium/webdrivers/unified/chrome/base.py +5 -1
- osn_selenium/webdrivers/unified/core/auth.py +4 -2
- osn_selenium/webdrivers/unified/core/base.py +16 -10
- 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 +5 -1
- osn_selenium/webdrivers/unified/yandex/base.py +5 -1
- {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +3 -2
- osn_selenium-1.2.0.dist-info/RECORD +480 -0
- 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/base_mixin.py +0 -122
- 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.1.0.dist-info/RECORD +0 -615
- /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.1.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +0 -0
- {osn_selenium-1.1.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,41 +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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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()
|
|
70
129
|
|
|
71
130
|
async def _setup_target(self):
|
|
72
131
|
"""
|
|
@@ -93,9 +152,9 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
|
|
|
93
152
|
fingerprint_detecting_ready_event = trio.Event()
|
|
94
153
|
target_ready_events.append(fingerprint_detecting_ready_event)
|
|
95
154
|
|
|
96
|
-
self.
|
|
97
|
-
self.
|
|
98
|
-
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)
|
|
99
158
|
|
|
100
159
|
if self._domains_settings:
|
|
101
160
|
for domain_name, domain_config in self._domains_settings.model_dump(exclude_none=True).items():
|
|
@@ -117,7 +176,7 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
|
|
|
117
176
|
|
|
118
177
|
domain_handlers_ready_event = trio.Event()
|
|
119
178
|
target_ready_events.append(domain_handlers_ready_event)
|
|
120
|
-
self.
|
|
179
|
+
self._nursery.start_soon(
|
|
121
180
|
self._run_events_handlers,
|
|
122
181
|
domain_handlers_ready_event,
|
|
123
182
|
getattr(self._domains_settings, domain_name)
|
|
@@ -151,7 +210,7 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
|
|
|
151
210
|
"""
|
|
152
211
|
|
|
153
212
|
try:
|
|
154
|
-
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)
|
|
155
214
|
|
|
156
215
|
if self._cdp_target_type_log_accepted:
|
|
157
216
|
await self._logger.run()
|
|
@@ -167,8 +226,9 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
|
|
|
167
226
|
await self._setup_target()
|
|
168
227
|
|
|
169
228
|
if self._target_background_task is not None:
|
|
170
|
-
self.
|
|
171
|
-
|
|
229
|
+
self._nursery.start_soon(background_task_decorator(self._target_background_task), self)
|
|
230
|
+
|
|
231
|
+
self.started_event.set()
|
|
172
232
|
await wait_one(self.exit_event, self.about_to_stop_event)
|
|
173
233
|
except* (BrowserError, RuntimeError):
|
|
174
234
|
self.about_to_stop_event.set()
|
|
@@ -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
|
"""
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from typing import Union
|
|
2
|
+
from osn_selenium.exceptions.base import OSNSeleniumError
|
|
2
3
|
from osn_selenium._cdp_import import (
|
|
3
4
|
check_cdp_version_exists_on_github
|
|
4
5
|
)
|
|
5
6
|
|
|
6
|
-
|
|
7
7
|
__all__ = ["CDPPackageError", "DependencyError"]
|
|
8
8
|
|
|
9
9
|
_CDP_PACKAGE_EXISTS = """
|
|
@@ -19,7 +19,7 @@ If you need this specific version, you can generate it using the https://github.
|
|
|
19
19
|
""".strip("\n")
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class DependencyError(
|
|
22
|
+
class DependencyError(OSNSeleniumError):
|
|
23
23
|
"""
|
|
24
24
|
Base exception for dependency-related issues.
|
|
25
25
|
"""
|
|
@@ -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
|
"""
|
|
@@ -23,11 +23,6 @@ class CDPExecutor(AbstractCDPExecutor):
|
|
|
23
23
|
|
|
24
24
|
def __init__(self, execute_function: Callable[[str, Dict[str, Any]], Any]):
|
|
25
25
|
self._execute_function = execute_function
|
|
26
|
-
self._v140 = None
|
|
27
|
-
self._v141 = None
|
|
28
|
-
self._v142 = None
|
|
29
|
-
self._v143 = None
|
|
30
|
-
self._v144 = None
|
|
31
26
|
|
|
32
27
|
def get(self, version: int) -> Any:
|
|
33
28
|
"""
|
|
@@ -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)
|