osn-selenium 0.0.0__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- osn_selenium/_base_models.py +41 -0
- osn_selenium/_cdp_import.py +253 -0
- osn_selenium/_functions.py +84 -0
- osn_selenium/_typehints.py +19 -0
- osn_selenium/abstract/executors/cdp/__init__.py +435 -0
- osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
- osn_selenium/abstract/executors/cdp/animation.py +47 -0
- osn_selenium/abstract/executors/cdp/audits.py +39 -0
- osn_selenium/abstract/executors/cdp/autofill.py +34 -0
- osn_selenium/abstract/executors/cdp/background_service.py +22 -0
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
- osn_selenium/abstract/executors/cdp/browser.py +122 -0
- osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
- osn_selenium/abstract/executors/cdp/cast.py +31 -0
- osn_selenium/abstract/executors/cdp/console.py +18 -0
- osn_selenium/abstract/executors/cdp/css.py +197 -0
- osn_selenium/abstract/executors/cdp/debugger.py +198 -0
- osn_selenium/abstract/executors/cdp/device_access.py +22 -0
- osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
- osn_selenium/abstract/executors/cdp/dom.py +305 -0
- osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
- osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
- osn_selenium/abstract/executors/cdp/emulation.py +259 -0
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
- osn_selenium/abstract/executors/cdp/extensions.py +31 -0
- osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
- osn_selenium/abstract/executors/cdp/fetch.py +76 -0
- osn_selenium/abstract/executors/cdp/file_system.py +11 -0
- osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
- osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
- osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
- osn_selenium/abstract/executors/cdp/input.py +158 -0
- osn_selenium/abstract/executors/cdp/inspector.py +14 -0
- osn_selenium/abstract/executors/cdp/io.py +24 -0
- osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
- osn_selenium/abstract/executors/cdp/log.py +27 -0
- osn_selenium/abstract/executors/cdp/media.py +14 -0
- osn_selenium/abstract/executors/cdp/memory.py +61 -0
- osn_selenium/abstract/executors/cdp/network.py +252 -0
- osn_selenium/abstract/executors/cdp/overlay.py +166 -0
- osn_selenium/abstract/executors/cdp/page.py +347 -0
- osn_selenium/abstract/executors/cdp/performance.py +28 -0
- osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
- osn_selenium/abstract/executors/cdp/preload.py +14 -0
- osn_selenium/abstract/executors/cdp/profiler.py +54 -0
- osn_selenium/abstract/executors/cdp/pwa.py +46 -0
- osn_selenium/abstract/executors/cdp/runtime.py +176 -0
- osn_selenium/abstract/executors/cdp/schema.py +11 -0
- osn_selenium/abstract/executors/cdp/security.py +26 -0
- osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
- osn_selenium/abstract/executors/cdp/storage.py +175 -0
- osn_selenium/abstract/executors/cdp/system_info.py +24 -0
- osn_selenium/abstract/executors/cdp/target.py +125 -0
- osn_selenium/abstract/executors/cdp/tethering.py +14 -0
- osn_selenium/abstract/executors/cdp/tracing.py +48 -0
- osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
- osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/executors/javascript.py +203 -0
- osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
- osn_selenium/abstract/instances/action_chains/base.py +25 -0
- osn_selenium/abstract/instances/action_chains/click.py +93 -0
- osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
- osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
- osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
- osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
- osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
- osn_selenium/abstract/instances/action_chains/move.py +60 -0
- osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
- osn_selenium/abstract/instances/action_chains/utils.py +44 -0
- osn_selenium/abstract/instances/alert.py +67 -0
- osn_selenium/abstract/instances/browser.py +76 -0
- osn_selenium/abstract/instances/browsing_context.py +310 -0
- osn_selenium/abstract/instances/dialog.py +107 -0
- osn_selenium/abstract/instances/fedcm.py +133 -0
- osn_selenium/abstract/instances/mobile.py +79 -0
- osn_selenium/abstract/instances/network.py +100 -0
- osn_selenium/abstract/instances/permissions.py +52 -0
- osn_selenium/abstract/instances/script.py +109 -0
- osn_selenium/abstract/instances/shadow_root.py +81 -0
- osn_selenium/abstract/instances/storage.py +98 -0
- osn_selenium/abstract/instances/switch_to.py +104 -0
- osn_selenium/abstract/instances/web_driver_wait.py +57 -0
- osn_selenium/abstract/instances/web_element.py +395 -0
- osn_selenium/abstract/instances/web_extension.py +70 -0
- osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
- osn_selenium/abstract/webdriver/blink/base.py +80 -0
- osn_selenium/abstract/webdriver/blink/casting.py +82 -0
- osn_selenium/abstract/webdriver/blink/features.py +51 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
- osn_selenium/abstract/webdriver/blink/logging.py +40 -0
- osn_selenium/abstract/webdriver/blink/network.py +45 -0
- osn_selenium/abstract/webdriver/blink/settings.py +68 -0
- osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
- osn_selenium/abstract/webdriver/chrome/base.py +36 -0
- osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
- osn_selenium/abstract/webdriver/core/__init__.py +16 -0
- osn_selenium/abstract/webdriver/core/actions.py +58 -0
- osn_selenium/abstract/webdriver/core/auth.py +145 -0
- osn_selenium/abstract/webdriver/core/base.py +298 -0
- osn_selenium/abstract/webdriver/core/capture.py +84 -0
- osn_selenium/abstract/webdriver/core/components.py +82 -0
- osn_selenium/abstract/webdriver/core/devtools.py +69 -0
- osn_selenium/abstract/webdriver/core/element.py +55 -0
- osn_selenium/abstract/webdriver/core/file.py +82 -0
- osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
- osn_selenium/abstract/webdriver/core/navigation.py +65 -0
- osn_selenium/abstract/webdriver/core/script.py +88 -0
- osn_selenium/abstract/webdriver/core/settings.py +43 -0
- osn_selenium/abstract/webdriver/core/storage.py +81 -0
- osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
- osn_selenium/abstract/webdriver/core/window.py +237 -0
- osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
- osn_selenium/abstract/webdriver/edge/base.py +36 -0
- osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/edge/settings.py +110 -0
- osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
- osn_selenium/abstract/webdriver/yandex/base.py +18 -0
- osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
- osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
- osn_selenium/base_mixin.py +122 -0
- osn_selenium/browsers_handler/__init__.py +47 -17
- osn_selenium/browsers_handler/_linux.py +226 -0
- osn_selenium/browsers_handler/_windows.py +21 -14
- osn_selenium/browsers_handler/{types.py → models.py} +5 -2
- osn_selenium/dev_tools/_decorators.py +149 -0
- osn_selenium/dev_tools/_exception_helpers.py +116 -0
- osn_selenium/dev_tools/_functions.py +174 -0
- osn_selenium/dev_tools/_system_utils.py +35 -0
- osn_selenium/dev_tools/_typehints.py +35 -0
- osn_selenium/dev_tools/_validators.py +227 -0
- osn_selenium/dev_tools/_wrappers.py +92 -0
- osn_selenium/dev_tools/domains/__init__.py +7 -40
- osn_selenium/dev_tools/domains/abstract.py +98 -254
- osn_selenium/dev_tools/domains/fetch.py +229 -906
- osn_selenium/dev_tools/domains_default/fetch.py +40 -28
- osn_selenium/dev_tools/filters.py +40 -0
- osn_selenium/dev_tools/logger/main.py +214 -0
- osn_selenium/dev_tools/logger/models.py +232 -0
- osn_selenium/dev_tools/logger/target.py +278 -0
- osn_selenium/dev_tools/manager/__init__.py +16 -0
- osn_selenium/dev_tools/manager/base.py +124 -0
- osn_selenium/dev_tools/manager/lifecycle.py +236 -0
- osn_selenium/dev_tools/manager/logging.py +153 -0
- osn_selenium/dev_tools/manager/settings.py +89 -0
- osn_selenium/dev_tools/manager/targets.py +175 -0
- osn_selenium/dev_tools/models.py +49 -0
- osn_selenium/dev_tools/settings.py +139 -0
- osn_selenium/dev_tools/target/__init__.py +16 -0
- osn_selenium/dev_tools/target/base.py +427 -0
- osn_selenium/dev_tools/target/detach.py +54 -0
- osn_selenium/dev_tools/target/discovery.py +112 -0
- osn_selenium/dev_tools/target/events.py +120 -0
- osn_selenium/dev_tools/target/fingerprint.py +126 -0
- osn_selenium/dev_tools/target/lifecycle.py +184 -0
- osn_selenium/dev_tools/target/logging.py +163 -0
- osn_selenium/exceptions/__init__.py +1 -0
- osn_selenium/exceptions/base.py +9 -0
- osn_selenium/exceptions/configuration.py +84 -0
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +114 -0
- osn_selenium/exceptions/flags.py +45 -0
- osn_selenium/exceptions/instance.py +92 -0
- osn_selenium/exceptions/javascript.py +31 -0
- osn_selenium/exceptions/logic.py +31 -0
- osn_selenium/exceptions/path.py +77 -0
- osn_selenium/exceptions/platform.py +33 -0
- osn_selenium/exceptions/protocol.py +86 -0
- osn_selenium/exceptions/webdriver.py +44 -0
- osn_selenium/exceptions/window.py +63 -0
- osn_selenium/executors/__init__.py +1 -0
- osn_selenium/executors/sync/__init__.py +1 -0
- osn_selenium/executors/sync/cdp/__init__.py +550 -0
- osn_selenium/executors/sync/cdp/accessibility.py +74 -0
- osn_selenium/executors/sync/cdp/animation.py +50 -0
- osn_selenium/executors/sync/cdp/audits.py +48 -0
- osn_selenium/executors/sync/cdp/autofill.py +39 -0
- osn_selenium/executors/sync/cdp/background_service.py +30 -0
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
- osn_selenium/executors/sync/cdp/browser.py +131 -0
- osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
- osn_selenium/executors/sync/cdp/cast.py +38 -0
- osn_selenium/executors/sync/cdp/console.py +24 -0
- osn_selenium/executors/sync/cdp/css.py +187 -0
- osn_selenium/executors/sync/cdp/debugger.py +206 -0
- osn_selenium/executors/sync/cdp/device_access.py +27 -0
- osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
- osn_selenium/executors/sync/cdp/dom.py +310 -0
- osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
- osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
- osn_selenium/executors/sync/cdp/emulation.py +270 -0
- osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
- osn_selenium/executors/sync/cdp/extensions.py +39 -0
- osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
- osn_selenium/executors/sync/cdp/fetch.py +96 -0
- osn_selenium/executors/sync/cdp/file_system.py +18 -0
- osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
- osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
- osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
- osn_selenium/executors/sync/cdp/input.py +233 -0
- osn_selenium/executors/sync/cdp/inspector.py +21 -0
- osn_selenium/executors/sync/cdp/io.py +33 -0
- osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
- osn_selenium/executors/sync/cdp/log.py +35 -0
- osn_selenium/executors/sync/cdp/media.py +21 -0
- osn_selenium/executors/sync/cdp/memory.py +62 -0
- osn_selenium/executors/sync/cdp/network.py +287 -0
- osn_selenium/executors/sync/cdp/overlay.py +174 -0
- osn_selenium/executors/sync/cdp/page.py +365 -0
- osn_selenium/executors/sync/cdp/performance.py +33 -0
- osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
- osn_selenium/executors/sync/cdp/preload.py +21 -0
- osn_selenium/executors/sync/cdp/profiler.py +58 -0
- osn_selenium/executors/sync/cdp/pwa.py +55 -0
- osn_selenium/executors/sync/cdp/runtime.py +221 -0
- osn_selenium/executors/sync/cdp/schema.py +23 -0
- osn_selenium/executors/sync/cdp/security.py +30 -0
- osn_selenium/executors/sync/cdp/service_worker.py +56 -0
- osn_selenium/executors/sync/cdp/storage.py +151 -0
- osn_selenium/executors/sync/cdp/system_info.py +30 -0
- osn_selenium/executors/sync/cdp/target.py +147 -0
- osn_selenium/executors/sync/cdp/tethering.py +21 -0
- osn_selenium/executors/sync/cdp/tracing.py +62 -0
- osn_selenium/executors/sync/cdp/web_audio.py +24 -0
- osn_selenium/executors/sync/cdp/web_authn.py +82 -0
- osn_selenium/executors/sync/cdp.py +100 -0
- osn_selenium/executors/sync/javascript.py +79 -0
- osn_selenium/executors/trio_threads/__init__.py +1 -0
- osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
- osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
- osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
- osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
- osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
- osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
- osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
- osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
- osn_selenium/executors/trio_threads/cdp/console.py +33 -0
- osn_selenium/executors/trio_threads/cdp/css.py +196 -0
- osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
- osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
- osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
- osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
- osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
- osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
- osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
- osn_selenium/executors/trio_threads/cdp/input.py +242 -0
- osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
- osn_selenium/executors/trio_threads/cdp/io.py +42 -0
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
- osn_selenium/executors/trio_threads/cdp/log.py +44 -0
- osn_selenium/executors/trio_threads/cdp/media.py +30 -0
- osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
- osn_selenium/executors/trio_threads/cdp/network.py +296 -0
- osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
- osn_selenium/executors/trio_threads/cdp/page.py +374 -0
- osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
- osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
- osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
- osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
- osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
- osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
- osn_selenium/executors/trio_threads/cdp/security.py +43 -0
- osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
- osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
- osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
- osn_selenium/executors/trio_threads/cdp/target.py +156 -0
- osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
- osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
- osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
- osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
- osn_selenium/executors/trio_threads/cdp.py +104 -0
- osn_selenium/executors/trio_threads/javascript.py +90 -0
- osn_selenium/executors/unified/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/__init__.py +1 -0
- osn_selenium/executors/unified/cdp/accessibility.py +81 -0
- osn_selenium/executors/unified/cdp/animation.py +50 -0
- osn_selenium/executors/unified/cdp/audits.py +45 -0
- osn_selenium/executors/unified/cdp/autofill.py +41 -0
- osn_selenium/executors/unified/cdp/background_service.py +24 -0
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
- osn_selenium/executors/unified/cdp/browser.py +143 -0
- osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
- osn_selenium/executors/unified/cdp/cast.py +32 -0
- osn_selenium/executors/unified/cdp/console.py +18 -0
- osn_selenium/executors/unified/cdp/css.py +237 -0
- osn_selenium/executors/unified/cdp/debugger.py +243 -0
- osn_selenium/executors/unified/cdp/device_access.py +21 -0
- osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
- osn_selenium/executors/unified/cdp/dom.py +380 -0
- osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
- osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
- osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
- osn_selenium/executors/unified/cdp/emulation.py +312 -0
- osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
- osn_selenium/executors/unified/cdp/extensions.py +45 -0
- osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
- osn_selenium/executors/unified/cdp/fetch.py +111 -0
- osn_selenium/executors/unified/cdp/file_system.py +15 -0
- osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
- osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
- osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
- osn_selenium/executors/unified/cdp/input.py +254 -0
- osn_selenium/executors/unified/cdp/inspector.py +15 -0
- osn_selenium/executors/unified/cdp/io.py +29 -0
- osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
- osn_selenium/executors/unified/cdp/log.py +29 -0
- osn_selenium/executors/unified/cdp/media.py +15 -0
- osn_selenium/executors/unified/cdp/memory.py +59 -0
- osn_selenium/executors/unified/cdp/network.py +323 -0
- osn_selenium/executors/unified/cdp/overlay.py +209 -0
- osn_selenium/executors/unified/cdp/page.py +410 -0
- osn_selenium/executors/unified/cdp/performance.py +27 -0
- osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
- osn_selenium/executors/unified/cdp/preload.py +15 -0
- osn_selenium/executors/unified/cdp/profiler.py +55 -0
- osn_selenium/executors/unified/cdp/pwa.py +55 -0
- osn_selenium/executors/unified/cdp/runtime.py +245 -0
- osn_selenium/executors/unified/cdp/schema.py +17 -0
- osn_selenium/executors/unified/cdp/security.py +27 -0
- osn_selenium/executors/unified/cdp/service_worker.py +62 -0
- osn_selenium/executors/unified/cdp/storage.py +178 -0
- osn_selenium/executors/unified/cdp/system_info.py +24 -0
- osn_selenium/executors/unified/cdp/target.py +165 -0
- osn_selenium/executors/unified/cdp/tethering.py +15 -0
- osn_selenium/executors/unified/cdp/tracing.py +62 -0
- osn_selenium/executors/unified/cdp/web_audio.py +18 -0
- osn_selenium/executors/unified/cdp/web_authn.py +103 -0
- osn_selenium/executors/unified/javascript.py +104 -0
- osn_selenium/flags/__init__.py +1 -0
- osn_selenium/flags/_functions.py +45 -0
- osn_selenium/flags/_typehints.py +34 -0
- osn_selenium/flags/_validators.py +101 -0
- osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
- osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
- osn_selenium/flags/chrome.py +259 -0
- osn_selenium/flags/edge.py +259 -0
- osn_selenium/flags/models/__init__.py +1 -0
- osn_selenium/flags/models/base.py +130 -0
- osn_selenium/flags/models/blink.py +263 -0
- osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
- osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
- osn_selenium/flags/models/values.py +44 -0
- osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
- osn_selenium/flags/yandex.py +259 -0
- osn_selenium/instances/__init__.py +1 -0
- osn_selenium/instances/_functions.py +242 -0
- osn_selenium/instances/_typehints.py +148 -0
- osn_selenium/instances/_utils.py +143 -0
- osn_selenium/instances/convert.py +287 -0
- osn_selenium/instances/protocols.py +105 -0
- osn_selenium/instances/sync/__init__.py +1 -0
- osn_selenium/instances/sync/action_chains/__init__.py +32 -0
- osn_selenium/instances/sync/action_chains/base.py +74 -0
- osn_selenium/instances/sync/action_chains/click.py +61 -0
- osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
- osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
- osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
- osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
- osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
- osn_selenium/instances/sync/action_chains/move.py +46 -0
- osn_selenium/instances/sync/action_chains/scroll.py +43 -0
- osn_selenium/instances/sync/action_chains/utils.py +30 -0
- osn_selenium/instances/sync/alert.py +69 -0
- osn_selenium/instances/sync/browser.py +72 -0
- osn_selenium/instances/sync/browsing_context.py +193 -0
- osn_selenium/instances/sync/dialog.py +81 -0
- osn_selenium/instances/sync/fedcm.py +92 -0
- osn_selenium/instances/sync/mobile.py +75 -0
- osn_selenium/instances/sync/network.py +90 -0
- osn_selenium/instances/sync/permissions.py +80 -0
- osn_selenium/instances/sync/script.py +77 -0
- osn_selenium/instances/sync/shadow_root.py +113 -0
- osn_selenium/instances/sync/storage.py +91 -0
- osn_selenium/instances/sync/switch_to.py +92 -0
- osn_selenium/instances/sync/web_driver_wait.py +83 -0
- osn_selenium/instances/sync/web_element.py +179 -0
- osn_selenium/instances/sync/web_extension.py +77 -0
- osn_selenium/instances/trio_threads/__init__.py +1 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
- osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
- osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
- osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
- osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
- osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
- osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
- osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
- osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
- osn_selenium/instances/trio_threads/alert.py +87 -0
- osn_selenium/instances/trio_threads/browser.py +90 -0
- osn_selenium/instances/trio_threads/browsing_context.py +216 -0
- osn_selenium/instances/trio_threads/dialog.py +99 -0
- osn_selenium/instances/trio_threads/fedcm.py +110 -0
- osn_selenium/instances/trio_threads/mobile.py +93 -0
- osn_selenium/instances/trio_threads/network.py +108 -0
- osn_selenium/instances/trio_threads/permissions.py +102 -0
- osn_selenium/instances/trio_threads/script.py +95 -0
- osn_selenium/instances/trio_threads/shadow_root.py +154 -0
- osn_selenium/instances/trio_threads/storage.py +109 -0
- osn_selenium/instances/trio_threads/switch_to.py +124 -0
- osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
- osn_selenium/instances/trio_threads/web_element.py +217 -0
- osn_selenium/instances/trio_threads/web_extension.py +99 -0
- osn_selenium/instances/unified/__init__.py +1 -0
- osn_selenium/instances/unified/action_chains/__init__.py +22 -0
- osn_selenium/instances/unified/action_chains/base.py +31 -0
- osn_selenium/instances/unified/action_chains/click.py +27 -0
- osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
- osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
- osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
- osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
- osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
- osn_selenium/instances/unified/action_chains/move.py +24 -0
- osn_selenium/instances/unified/action_chains/scroll.py +21 -0
- osn_selenium/instances/unified/action_chains/utils.py +19 -0
- osn_selenium/instances/unified/alert.py +29 -0
- osn_selenium/instances/unified/browser.py +33 -0
- osn_selenium/instances/unified/browsing_context.py +151 -0
- osn_selenium/instances/unified/dialog.py +42 -0
- osn_selenium/instances/unified/fedcm.py +48 -0
- osn_selenium/instances/unified/mobile.py +36 -0
- osn_selenium/instances/unified/network.py +50 -0
- osn_selenium/instances/unified/permissions.py +43 -0
- osn_selenium/instances/unified/script.py +38 -0
- osn_selenium/instances/unified/shadow_root.py +46 -0
- osn_selenium/instances/unified/storage.py +48 -0
- osn_selenium/instances/unified/switch_to.py +49 -0
- osn_selenium/instances/unified/web_driver_wait.py +45 -0
- osn_selenium/instances/unified/web_element.py +145 -0
- osn_selenium/instances/unified/web_extension.py +38 -0
- osn_selenium/javascript/__init__.py +1 -0
- osn_selenium/javascript/_functions.py +63 -0
- osn_selenium/javascript/fingerprint/__init__.py +120 -0
- osn_selenium/javascript/fingerprint/_decorators.py +41 -0
- osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
- osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
- osn_selenium/javascript/fingerprint/_functions.py +35 -0
- osn_selenium/javascript/fingerprint/_typehints.py +27 -0
- osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
- osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
- osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
- osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
- osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
- osn_selenium/javascript/fingerprint/registry/models.py +41 -0
- osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
- osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
- osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
- osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
- osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
- osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
- osn_selenium/javascript/functions.py +44 -0
- osn_selenium/javascript/models.py +35 -0
- osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
- osn_selenium/models.py +94 -0
- osn_selenium/trio_threads_mixin.py +159 -0
- osn_selenium/webdrivers/_args_helpers.py +181 -0
- osn_selenium/webdrivers/_bridges.py +57 -0
- osn_selenium/webdrivers/_decorators.py +83 -0
- osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
- osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
- osn_selenium/webdrivers/_executable_tables/models.py +19 -0
- osn_selenium/webdrivers/_typehints.py +10 -0
- osn_selenium/webdrivers/protocols.py +50 -0
- osn_selenium/webdrivers/sync/__init__.py +1 -0
- osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
- osn_selenium/webdrivers/sync/blink/base.py +140 -0
- osn_selenium/webdrivers/sync/blink/casting.py +34 -0
- osn_selenium/webdrivers/sync/blink/features.py +28 -0
- osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/sync/blink/logging.py +25 -0
- osn_selenium/webdrivers/sync/blink/network.py +28 -0
- osn_selenium/webdrivers/sync/blink/settings.py +63 -0
- osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
- osn_selenium/webdrivers/sync/chrome/base.py +118 -0
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
- osn_selenium/webdrivers/sync/core/__init__.py +100 -0
- osn_selenium/webdrivers/sync/core/actions.py +59 -0
- osn_selenium/webdrivers/sync/core/auth.py +77 -0
- osn_selenium/webdrivers/sync/core/base.py +175 -0
- osn_selenium/webdrivers/sync/core/capture.py +37 -0
- osn_selenium/webdrivers/sync/core/comonents.py +57 -0
- osn_selenium/webdrivers/sync/core/devtools.py +47 -0
- osn_selenium/webdrivers/sync/core/element.py +42 -0
- osn_selenium/webdrivers/sync/core/file.py +40 -0
- osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
- osn_selenium/webdrivers/sync/core/navigation.py +36 -0
- osn_selenium/webdrivers/sync/core/script.py +53 -0
- osn_selenium/webdrivers/sync/core/settings.py +35 -0
- osn_selenium/webdrivers/sync/core/storage.py +48 -0
- osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
- osn_selenium/webdrivers/sync/core/window.py +99 -0
- osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
- osn_selenium/webdrivers/sync/edge/base.py +114 -0
- osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/edge/settings.py +58 -0
- osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
- osn_selenium/webdrivers/sync/yandex/base.py +111 -0
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
- osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
- osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
- osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
- osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
- osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
- osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
- osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
- osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
- osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
- osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
- osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
- osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
- osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
- osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
- osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
- osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
- osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
- osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
- osn_selenium/webdrivers/unified/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
- osn_selenium/webdrivers/unified/blink/base.py +135 -0
- osn_selenium/webdrivers/unified/blink/casting.py +30 -0
- osn_selenium/webdrivers/unified/blink/features.py +22 -0
- osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
- osn_selenium/webdrivers/unified/blink/logging.py +18 -0
- osn_selenium/webdrivers/unified/blink/network.py +22 -0
- osn_selenium/webdrivers/unified/blink/settings.py +86 -0
- osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
- osn_selenium/webdrivers/unified/chrome/base.py +58 -0
- osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
- osn_selenium/webdrivers/unified/core/__init__.py +1 -0
- osn_selenium/webdrivers/unified/core/actions.py +43 -0
- osn_selenium/webdrivers/unified/core/auth.py +70 -0
- osn_selenium/webdrivers/unified/core/base.py +139 -0
- osn_selenium/webdrivers/unified/core/capture.py +32 -0
- osn_selenium/webdrivers/unified/core/components.py +32 -0
- osn_selenium/webdrivers/unified/core/devtools.py +35 -0
- osn_selenium/webdrivers/unified/core/element.py +24 -0
- osn_selenium/webdrivers/unified/core/file.py +35 -0
- osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
- osn_selenium/webdrivers/unified/core/navigation.py +31 -0
- osn_selenium/webdrivers/unified/core/script.py +32 -0
- osn_selenium/webdrivers/unified/core/settings.py +44 -0
- osn_selenium/webdrivers/unified/core/storage.py +37 -0
- osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
- osn_selenium/webdrivers/unified/core/window.py +135 -0
- osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
- osn_selenium/webdrivers/unified/edge/base.py +56 -0
- osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
- osn_selenium/webdrivers/unified/edge/settings.py +48 -0
- osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
- osn_selenium/webdrivers/unified/yandex/base.py +58 -0
- osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
- osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
- osn_selenium-1.1.0.dist-info/METADATA +252 -0
- osn_selenium-1.1.0.dist-info/RECORD +615 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
- osn_selenium/captcha_workers/__init__.py +0 -26
- osn_selenium/dev_tools/_types.py +0 -22
- osn_selenium/dev_tools/errors.py +0 -89
- osn_selenium/dev_tools/logger.py +0 -558
- osn_selenium/dev_tools/manager.py +0 -1551
- osn_selenium/dev_tools/utils.py +0 -509
- osn_selenium/errors.py +0 -16
- osn_selenium/types.py +0 -118
- osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
- osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
- osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
- osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
- osn_selenium/webdrivers/Blink/protocols.py +0 -330
- osn_selenium/webdrivers/Blink/webdriver.py +0 -637
- osn_selenium/webdrivers/Chrome/protocols.py +0 -228
- osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
- osn_selenium/webdrivers/Edge/protocols.py +0 -228
- osn_selenium/webdrivers/Edge/webdriver.py +0 -394
- osn_selenium/webdrivers/Yandex/protocols.py +0 -211
- osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
- osn_selenium/webdrivers/_functions.py +0 -504
- osn_selenium/webdrivers/types.py +0 -390
- osn_selenium-0.0.0.dist-info/METADATA +0 -710
- osn_selenium-0.0.0.dist-info/RECORD +0 -57
- /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
- /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
- /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
- {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import trio
|
|
2
|
+
from osn_selenium.dev_tools.manager.base import BaseMixin
|
|
3
|
+
from osn_selenium.exceptions.devtools import CDPEndExceptions
|
|
4
|
+
from osn_selenium.dev_tools._exception_helpers import log_exception
|
|
5
|
+
from osn_selenium.dev_tools.logger.models import (
|
|
6
|
+
CDPLogLevelStats,
|
|
7
|
+
CDPMainLogEntry,
|
|
8
|
+
CDPTargetLogEntry,
|
|
9
|
+
FingerprintAPIStats,
|
|
10
|
+
FingerprintLogLevelStats,
|
|
11
|
+
FingerprintMainLogEntry,
|
|
12
|
+
FingerprintTargetLogEntry
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
__all__ = ["LoggingMixin"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class LoggingMixin(BaseMixin):
|
|
20
|
+
"""
|
|
21
|
+
Mixin for aggregating logs from all targets in the DevTools manager.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
async def _add_main_cdp_log(self):
|
|
25
|
+
"""
|
|
26
|
+
Sends updated overall logging statistics to the main logger.
|
|
27
|
+
|
|
28
|
+
This method constructs a `MainLogEntry` with current statistics and
|
|
29
|
+
sends it to the `_main_logger_send_channel`. If the channel buffer is full,
|
|
30
|
+
the log is dropped silently.
|
|
31
|
+
|
|
32
|
+
Raises:
|
|
33
|
+
CDPEndExceptions: If a CDP connection error occurs.
|
|
34
|
+
BaseException: If any other error occurs during logging.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
if self._main_logger_cdp_send_channel is not None and self._main_logger is not None:
|
|
39
|
+
log_entry = CDPMainLogEntry(
|
|
40
|
+
num_channels=len(self._handling_targets),
|
|
41
|
+
targets_types_stats=self._cdp_targets_types_stats,
|
|
42
|
+
num_logs=self._num_cdp_logs,
|
|
43
|
+
log_level_stats=self._cdp_log_level_stats,
|
|
44
|
+
channels_stats=[
|
|
45
|
+
target.cdp_log_stats
|
|
46
|
+
for target in self._handling_targets.values()
|
|
47
|
+
if target.target_type_log_accepted
|
|
48
|
+
],
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
self._main_logger_cdp_send_channel.send_nowait(log_entry)
|
|
52
|
+
except (trio.WouldBlock, trio.BrokenResourceError):
|
|
53
|
+
pass
|
|
54
|
+
except CDPEndExceptions as error:
|
|
55
|
+
raise error
|
|
56
|
+
except BaseException as error:
|
|
57
|
+
log_exception(error)
|
|
58
|
+
raise error
|
|
59
|
+
|
|
60
|
+
async def _add_cdp_log(self, log_entry: CDPTargetLogEntry):
|
|
61
|
+
"""
|
|
62
|
+
Updates internal logging statistics based on a new log entry.
|
|
63
|
+
|
|
64
|
+
This method increments total log counts and updates per-channel and per-level statistics.
|
|
65
|
+
It also triggers an update to the main logger.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
log_entry (CDPTargetLogEntry): The log entry to use for updating statistics.
|
|
69
|
+
|
|
70
|
+
Raises:
|
|
71
|
+
BaseException: Catches and logs any unexpected errors during the log aggregation process.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
self._num_cdp_logs += 1
|
|
76
|
+
|
|
77
|
+
if log_entry.level not in self._cdp_log_level_stats:
|
|
78
|
+
self._cdp_log_level_stats[log_entry.level] = CDPLogLevelStats(num_logs=1, last_log_time=log_entry.datetime)
|
|
79
|
+
else:
|
|
80
|
+
self._cdp_log_level_stats[log_entry.level].num_logs += 1
|
|
81
|
+
self._cdp_log_level_stats[log_entry.level].last_log_time = log_entry.datetime
|
|
82
|
+
|
|
83
|
+
await self._add_main_cdp_log()
|
|
84
|
+
except CDPEndExceptions:
|
|
85
|
+
pass
|
|
86
|
+
except BaseException as error:
|
|
87
|
+
log_exception(error)
|
|
88
|
+
raise error
|
|
89
|
+
|
|
90
|
+
async def _add_main_fingerprint_log(self):
|
|
91
|
+
"""
|
|
92
|
+
Sends updated overall fingerprint logging statistics to the main logger.
|
|
93
|
+
|
|
94
|
+
Raises:
|
|
95
|
+
CDPEndExceptions: If a CDP connection error occurs.
|
|
96
|
+
BaseException: If any other error occurs during logging.
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
try:
|
|
100
|
+
if self._main_logger_fingerprint_send_channel is not None and self._main_logger is not None:
|
|
101
|
+
log_entry = FingerprintMainLogEntry(
|
|
102
|
+
num_channels=len(self._handling_targets),
|
|
103
|
+
apis_stats=self._fingerprint_categories_stats,
|
|
104
|
+
num_logs=self._num_fingerprint_logs,
|
|
105
|
+
log_level_stats=self._fingerprint_log_level_stats,
|
|
106
|
+
channels_stats=[
|
|
107
|
+
target.fingerprint_log_stats
|
|
108
|
+
for target in self._handling_targets.values()
|
|
109
|
+
if target.target_type_log_accepted
|
|
110
|
+
],
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
self._main_logger_fingerprint_send_channel.send_nowait(log_entry)
|
|
114
|
+
except (trio.WouldBlock, trio.BrokenResourceError):
|
|
115
|
+
pass
|
|
116
|
+
except CDPEndExceptions as error:
|
|
117
|
+
raise error
|
|
118
|
+
except BaseException as error:
|
|
119
|
+
log_exception(error)
|
|
120
|
+
raise error
|
|
121
|
+
|
|
122
|
+
async def _add_fingerprint_log(self, log_entry: FingerprintTargetLogEntry):
|
|
123
|
+
"""
|
|
124
|
+
Updates internal fingerprint logging statistics based on a new log entry.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
log_entry (FingerprintTargetLogEntry): The log entry to use for updating statistics.
|
|
128
|
+
|
|
129
|
+
Raises:
|
|
130
|
+
BaseException: Catches and logs any unexpected errors during the log aggregation process.
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
try:
|
|
134
|
+
self._num_fingerprint_logs += 1
|
|
135
|
+
|
|
136
|
+
if log_entry.level not in self._fingerprint_log_level_stats:
|
|
137
|
+
self._fingerprint_log_level_stats[log_entry.level] = FingerprintLogLevelStats(num_logs=1, last_log_time=log_entry.datetime)
|
|
138
|
+
else:
|
|
139
|
+
self._fingerprint_log_level_stats[log_entry.level].num_logs += 1
|
|
140
|
+
self._fingerprint_log_level_stats[log_entry.level].last_log_time = log_entry.datetime
|
|
141
|
+
|
|
142
|
+
if log_entry.api not in self._fingerprint_categories_stats:
|
|
143
|
+
self._fingerprint_categories_stats[log_entry.api] = FingerprintAPIStats(num_logs=1, methods_stats={log_entry.used_method: 1})
|
|
144
|
+
else:
|
|
145
|
+
self._fingerprint_categories_stats[log_entry.api].num_logs += 1
|
|
146
|
+
self._fingerprint_categories_stats[log_entry.api].methods_stats[log_entry.used_method] = self._fingerprint_categories_stats[log_entry.api].methods_stats.get(log_entry.used_method, 0) + 1
|
|
147
|
+
|
|
148
|
+
await self._add_main_fingerprint_log()
|
|
149
|
+
except CDPEndExceptions:
|
|
150
|
+
pass
|
|
151
|
+
except BaseException as error:
|
|
152
|
+
log_exception(error)
|
|
153
|
+
raise error
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
from typing import Sequence, Union
|
|
2
|
+
from osn_selenium.dev_tools.manager.base import BaseMixin
|
|
3
|
+
from osn_selenium.dev_tools._decorators import warn_if_active
|
|
4
|
+
from osn_selenium.exceptions.configuration import NotExpectedTypeError
|
|
5
|
+
from osn_selenium.dev_tools.domains import (
|
|
6
|
+
DomainsSettings,
|
|
7
|
+
domains_classes_type,
|
|
8
|
+
domains_type
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
__all__ = ["SettingsMixin"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class SettingsMixin(BaseMixin):
|
|
16
|
+
"""
|
|
17
|
+
Mixin for managing DevTools domain settings (handlers and configurations).
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
@warn_if_active
|
|
21
|
+
def _remove_handler_settings(self, domain: domains_type):
|
|
22
|
+
"""
|
|
23
|
+
Removes the settings for a specific domain.
|
|
24
|
+
|
|
25
|
+
This is an internal method intended to be used only when the DevTools context is not active.
|
|
26
|
+
It uses the `@warn_if_active` decorator to log a warning if called incorrectly.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
domain (domains_type): The name of the domain to remove settings for.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
if self._domains_settings is not None:
|
|
33
|
+
self._domains_settings.pop(domain, None)
|
|
34
|
+
|
|
35
|
+
def remove_domains_handlers(self, domains: Union[domains_type, Sequence[domains_type]]):
|
|
36
|
+
"""
|
|
37
|
+
Removes handler settings for one or more DevTools domains.
|
|
38
|
+
|
|
39
|
+
This method can be called with a single domain name or a sequence of domain names.
|
|
40
|
+
It should only be called when the DevTools context is not active.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
domains (Union[domains_type, Sequence[domains_type]]): A single domain name as a string,
|
|
44
|
+
or a sequence of domain names to be removed.
|
|
45
|
+
|
|
46
|
+
Raises:
|
|
47
|
+
TypeError: If the `domains` argument is not a string or a sequence of strings.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
if isinstance(domains, str):
|
|
51
|
+
self._remove_handler_settings(domains)
|
|
52
|
+
elif isinstance(domains, Sequence) and all(isinstance(domain, str) for domain in domains):
|
|
53
|
+
for domain in domains:
|
|
54
|
+
self._remove_handler_settings(domain)
|
|
55
|
+
else:
|
|
56
|
+
raise NotExpectedTypeError(
|
|
57
|
+
value_name="domains",
|
|
58
|
+
value=domains,
|
|
59
|
+
valid_types=("str", "Sequence[str]")
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
@warn_if_active
|
|
63
|
+
def _set_handler_settings(self, domain: domains_type, settings: domains_classes_type):
|
|
64
|
+
"""
|
|
65
|
+
Sets the handler settings for a specific domain.
|
|
66
|
+
|
|
67
|
+
This is an internal method intended to be used only when the DevTools context is not active.
|
|
68
|
+
It uses the `@warn_if_active` decorator to log a warning if called incorrectly.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
domain (domains_type): The name of the domain to configure.
|
|
72
|
+
settings (domains_classes_type): The configuration settings for the domain.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
setattr(self._domains_settings, domain, settings)
|
|
76
|
+
|
|
77
|
+
def set_domains_handlers(self, settings: DomainsSettings):
|
|
78
|
+
"""
|
|
79
|
+
Sets handler settings for multiple domains from a DomainsSettings object.
|
|
80
|
+
|
|
81
|
+
This method iterates through the provided settings and applies them to the corresponding domains.
|
|
82
|
+
It should only be called when the DevTools context is not active.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
settings (DomainsSettings): An object containing the configuration for one or more domains.
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
for domain_name, domain_settings in settings.model_dump(exclude_none=True).items():
|
|
89
|
+
self._set_handler_settings(domain_name, domain_settings)
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
from typing import Any, List, Optional
|
|
2
|
+
from osn_selenium.dev_tools.models import TargetData
|
|
3
|
+
from osn_selenium.dev_tools.target import DevToolsTarget
|
|
4
|
+
from osn_selenium.dev_tools.manager.logging import LoggingMixin
|
|
5
|
+
from osn_selenium.dev_tools._exception_helpers import log_exception
|
|
6
|
+
from osn_selenium.dev_tools.logger.models import CDPTargetTypeStats
|
|
7
|
+
from osn_selenium.exceptions.devtools import (
|
|
8
|
+
BidiConnectionNotEstablishedError,
|
|
9
|
+
CDPEndExceptions
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
__all__ = ["TargetsMixin"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class TargetsMixin(LoggingMixin):
|
|
17
|
+
"""
|
|
18
|
+
Mixin for adding, removing, and retrieving DevTools targets.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
async def _remove_target(self, target: DevToolsTarget) -> Optional[bool]:
|
|
22
|
+
"""
|
|
23
|
+
Removes a target ID from the List of currently handled targets.
|
|
24
|
+
|
|
25
|
+
This method also triggers the removal of the target's specific logger channel
|
|
26
|
+
and updates overall logging statistics.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
target (DevToolsTarget): The target instance to remove.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
Optional[bool]: True if the target ID was successfully removed, False if it was not found.
|
|
33
|
+
Returns None if an exception occurs.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
async with self.targets_lock:
|
|
38
|
+
if target.target_id in self._handling_targets:
|
|
39
|
+
self._cdp_targets_types_stats[target.type_].num_targets -= 1
|
|
40
|
+
|
|
41
|
+
target = self._handling_targets.pop(target.target_id)
|
|
42
|
+
await target.log_cdp_step(message=f"Target '{target.target_id}' removed.")
|
|
43
|
+
await target.stop()
|
|
44
|
+
|
|
45
|
+
await self._add_main_cdp_log()
|
|
46
|
+
|
|
47
|
+
return True
|
|
48
|
+
else:
|
|
49
|
+
return False
|
|
50
|
+
except CDPEndExceptions:
|
|
51
|
+
pass
|
|
52
|
+
except BaseException as error:
|
|
53
|
+
log_exception(error)
|
|
54
|
+
|
|
55
|
+
async def _add_target(self, target_event: Any, is_main_target: bool = False) -> Optional[bool]:
|
|
56
|
+
"""
|
|
57
|
+
Adds a new browser target to the manager based on a target event.
|
|
58
|
+
|
|
59
|
+
This method processes events like `TargetCreated` or `AttachedToTarget`
|
|
60
|
+
to initialize and manage new `DevToolsTarget` instances. It ensures
|
|
61
|
+
that targets are not added if the manager is closing or if they already exist.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
target_event (Any): The event object containing target information.
|
|
65
|
+
Expected to have a `target_info` attribute or be the target info itself.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Optional[bool]: True if a new target was successfully added and started,
|
|
69
|
+
False if the target already existed or was filtered,
|
|
70
|
+
or None if an error occurred.
|
|
71
|
+
|
|
72
|
+
Raises:
|
|
73
|
+
BaseException: Catches and logs any unexpected errors during target addition.
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
if hasattr(target_event, "target_info"):
|
|
78
|
+
target_info = target_event.target_info
|
|
79
|
+
else:
|
|
80
|
+
target_info = target_event
|
|
81
|
+
|
|
82
|
+
async with self.targets_lock:
|
|
83
|
+
target_id = target_info.target_id
|
|
84
|
+
|
|
85
|
+
if self._is_closing:
|
|
86
|
+
return False
|
|
87
|
+
|
|
88
|
+
if target_id not in self._handling_targets:
|
|
89
|
+
self._handling_targets[target_id] = DevToolsTarget(
|
|
90
|
+
target_data=TargetData(
|
|
91
|
+
target_id=target_id,
|
|
92
|
+
type_=target_info.type_,
|
|
93
|
+
title=target_info.title,
|
|
94
|
+
url=target_info.url,
|
|
95
|
+
attached=target_info.attached,
|
|
96
|
+
can_access_opener=target_info.can_access_opener,
|
|
97
|
+
opener_id=target_info.opener_id,
|
|
98
|
+
opener_frame_id=target_info.opener_frame_id,
|
|
99
|
+
browser_context_id=target_info.browser_context_id,
|
|
100
|
+
subtype=target_info.subtype,
|
|
101
|
+
),
|
|
102
|
+
is_main_target=is_main_target,
|
|
103
|
+
logger_settings=self._logger_settings,
|
|
104
|
+
domains_settings=self._domains_settings,
|
|
105
|
+
devtools_package=self._devtools_package,
|
|
106
|
+
websocket_url=self._websocket_url,
|
|
107
|
+
new_targets_filter_list=self._new_targets_filter,
|
|
108
|
+
new_targets_buffer_size=self._new_targets_buffer_size,
|
|
109
|
+
nursery=self._nursery_object,
|
|
110
|
+
exit_event=self.exit_event,
|
|
111
|
+
fingerprint_injection_script=self._fingerprint_injection_script,
|
|
112
|
+
target_background_task=self._target_background_task,
|
|
113
|
+
add_target_func=self._add_target,
|
|
114
|
+
remove_target_func=self._remove_target,
|
|
115
|
+
add_cdp_log_func=self._add_cdp_log,
|
|
116
|
+
add_fingerprint_log_func=self._add_fingerprint_log,
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
if target_info.type_ not in self._cdp_targets_types_stats:
|
|
120
|
+
self._cdp_targets_types_stats[target_info.type_] = CDPTargetTypeStats(num_targets=1)
|
|
121
|
+
else:
|
|
122
|
+
self._cdp_targets_types_stats[target_info.type_].num_targets += 1
|
|
123
|
+
|
|
124
|
+
await self._add_main_cdp_log()
|
|
125
|
+
|
|
126
|
+
self._nursery_object.start_soon(self._handling_targets[target_id].run)
|
|
127
|
+
|
|
128
|
+
return True
|
|
129
|
+
else:
|
|
130
|
+
self._handling_targets[target_id].type_ = target_info.type_
|
|
131
|
+
self._handling_targets[target_id].title = target_info.title
|
|
132
|
+
self._handling_targets[target_id].url = target_info.url
|
|
133
|
+
self._handling_targets[target_id].attached = target_info.attached
|
|
134
|
+
self._handling_targets[target_id].can_access_opener = target_info.can_access_opener
|
|
135
|
+
self._handling_targets[target_id].opener_id = target_info.opener_id
|
|
136
|
+
self._handling_targets[target_id].opener_frame_id = target_info.opener_frame_id
|
|
137
|
+
self._handling_targets[target_id].browser_context_id = target_info.browser_context_id
|
|
138
|
+
self._handling_targets[target_id].subtype = target_info.subtype
|
|
139
|
+
|
|
140
|
+
return False
|
|
141
|
+
except* CDPEndExceptions:
|
|
142
|
+
pass
|
|
143
|
+
except* BaseException as error:
|
|
144
|
+
log_exception(error)
|
|
145
|
+
raise error
|
|
146
|
+
|
|
147
|
+
async def _get_all_targets(self) -> List[Any]:
|
|
148
|
+
"""
|
|
149
|
+
Retrieves a List of all currently active browser targets.
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
List[Any]: A List of target objects, each containing information like target ID, type, and URL.
|
|
153
|
+
|
|
154
|
+
Raises:
|
|
155
|
+
BidiConnectionNotEstablishedError: If the BiDi connection is not active.
|
|
156
|
+
"""
|
|
157
|
+
|
|
158
|
+
try:
|
|
159
|
+
if self._bidi_connection_object is not None:
|
|
160
|
+
targets_filter = self._devtools_package.get("target.TargetFilter")(
|
|
161
|
+
[
|
|
162
|
+
{"exclude": False, "type": "page"},
|
|
163
|
+
{"exclude": False, "type": "tab"},
|
|
164
|
+
{"exclude": True}
|
|
165
|
+
]
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
return await self._bidi_connection_object.session.execute(self._devtools_package.get("target.get_targets")(targets_filter))
|
|
169
|
+
|
|
170
|
+
raise BidiConnectionNotEstablishedError()
|
|
171
|
+
except CDPEndExceptions as error:
|
|
172
|
+
raise error
|
|
173
|
+
except BaseException as error:
|
|
174
|
+
log_exception(error)
|
|
175
|
+
raise error
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from osn_selenium._base_models import DictModel
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
__all__ = ["FingerprintData", "TargetData"]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class TargetData(DictModel):
|
|
9
|
+
"""
|
|
10
|
+
Dataclass to hold essential information about a browser target.
|
|
11
|
+
|
|
12
|
+
Attributes:
|
|
13
|
+
target_id (Optional[str]): The unique identifier for the target.
|
|
14
|
+
type_ (Optional[str]): The type of the target (e.g., "page", "iframe", "worker").
|
|
15
|
+
title (Optional[str]): The title of the target (e.g., the page title).
|
|
16
|
+
url (Optional[str]): The URL of the target.
|
|
17
|
+
attached (Optional[bool]): Indicates if the DevTools session is currently attached to this target.
|
|
18
|
+
can_access_opener (Optional[bool]): Whether the target can access its opener.
|
|
19
|
+
opener_id (Optional[str]): The ID of the opener target.
|
|
20
|
+
opener_frame_id (Optional[str]): The ID of the opener frame.
|
|
21
|
+
browser_context_id (Optional[str]): The browser context ID associated with the target.
|
|
22
|
+
subtype (Optional[str]): Subtype of the target.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
target_id: Optional[str] = None
|
|
26
|
+
type_: Optional[str] = None
|
|
27
|
+
title: Optional[str] = None
|
|
28
|
+
url: Optional[str] = None
|
|
29
|
+
attached: Optional[bool] = None
|
|
30
|
+
can_access_opener: Optional[bool] = None
|
|
31
|
+
opener_id: Optional[str] = None
|
|
32
|
+
opener_frame_id: Optional[str] = None
|
|
33
|
+
browser_context_id: Optional[str] = None
|
|
34
|
+
subtype: Optional[str] = None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class FingerprintData(DictModel):
|
|
38
|
+
"""
|
|
39
|
+
Dataclass representing detected fingerprinting activity.
|
|
40
|
+
|
|
41
|
+
Attributes:
|
|
42
|
+
api (str): The API that was accessed.
|
|
43
|
+
used_method (str): The method called.
|
|
44
|
+
stacktrace (Optional[str]): The stack trace where the access occurred.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
api: str
|
|
48
|
+
used_method: str
|
|
49
|
+
stacktrace: Optional[str]
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from pydantic import Field
|
|
3
|
+
from osn_selenium._base_models import DictModel
|
|
4
|
+
from osn_selenium.dev_tools.filters import TargetFilter
|
|
5
|
+
from osn_selenium.dev_tools.domains import DomainsSettings
|
|
6
|
+
from typing import (
|
|
7
|
+
Literal,
|
|
8
|
+
Optional,
|
|
9
|
+
Sequence,
|
|
10
|
+
Union
|
|
11
|
+
)
|
|
12
|
+
from osn_selenium.javascript.fingerprint import FingerprintSettings
|
|
13
|
+
from osn_selenium.dev_tools._typehints import (
|
|
14
|
+
CDP_LOG_LEVELS_TYPEHINT,
|
|
15
|
+
DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT,
|
|
16
|
+
FINGERPRINT_LOG_LEVELS_TYPEHINT
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"CDPLoggerSettings",
|
|
22
|
+
"DevToolsSettings",
|
|
23
|
+
"FingerprintLoggerSettings",
|
|
24
|
+
"LoggerSettings"
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class FingerprintLoggerSettings(DictModel):
|
|
29
|
+
"""
|
|
30
|
+
Configuration settings for fingerprint logging.
|
|
31
|
+
|
|
32
|
+
Attributes:
|
|
33
|
+
buffer_size (int): The size of the log buffer. Defaults to 100.
|
|
34
|
+
log_level_filter_mode (Literal["exclude", "include"]): Mode for filtering log levels.
|
|
35
|
+
Defaults to "exclude".
|
|
36
|
+
log_level_filter (Optional[Union[FingerprintLogLevelsType, Sequence[FingerprintLogLevelsType]]]):
|
|
37
|
+
Specific log levels to filter based on the mode. Defaults to None.
|
|
38
|
+
category_filter_mode (Literal["exclude", "include"]): Mode for filtering categories.
|
|
39
|
+
Defaults to "exclude".
|
|
40
|
+
category_filter (Optional[Union[str, Sequence[str]]]): Specific categories to filter.
|
|
41
|
+
Defaults to None.
|
|
42
|
+
send_wait (bool): Whether to wait for the log to be sent. Defaults to False.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
buffer_size: int = 100
|
|
46
|
+
log_level_filter_mode: Literal["exclude", "include"] = "exclude"
|
|
47
|
+
log_level_filter: Optional[
|
|
48
|
+
Union[
|
|
49
|
+
FINGERPRINT_LOG_LEVELS_TYPEHINT,
|
|
50
|
+
Sequence[FINGERPRINT_LOG_LEVELS_TYPEHINT]
|
|
51
|
+
]
|
|
52
|
+
] = None
|
|
53
|
+
category_filter_mode: Literal["exclude", "include"] = "exclude"
|
|
54
|
+
category_filter: Optional[Union[str, Sequence[str]]] = None
|
|
55
|
+
send_wait: bool = False
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class CDPLoggerSettings(DictModel):
|
|
59
|
+
"""
|
|
60
|
+
Configuration settings for Chrome DevTools Protocol (CDP) logging.
|
|
61
|
+
|
|
62
|
+
Attributes:
|
|
63
|
+
buffer_size (int): The size of the log buffer. Defaults to 100.
|
|
64
|
+
log_level_filter_mode (Literal["exclude", "include"]): The mode for filtering log levels.
|
|
65
|
+
"exclude" means log levels in `log_level_filter` will be excluded.
|
|
66
|
+
"include" means only log levels in `log_level_filter` will be included.
|
|
67
|
+
Defaults to "exclude".
|
|
68
|
+
log_level_filter (Optional[Union[CDPLogLevelsType, Sequence[CDPLogLevelsType]]]):
|
|
69
|
+
A single log level or a sequence of log levels to filter by.
|
|
70
|
+
Used in conjunction with `log_level_filter_mode`. Defaults to None.
|
|
71
|
+
target_type_filter_mode (Literal["exclude", "include"]): The mode for filtering target types.
|
|
72
|
+
"exclude" means target types in `target_type_filter` will be excluded.
|
|
73
|
+
"include" means only target types in `target_type_filter` will be included.
|
|
74
|
+
Defaults to "exclude".
|
|
75
|
+
target_type_filter (Optional[Union[str, Sequence[str]]]):
|
|
76
|
+
A single target type string or a sequence of target type strings to filter by.
|
|
77
|
+
Used in conjunction with `target_type_filter_mode`. Defaults to None.
|
|
78
|
+
send_wait (bool): Whether to wait for the log to be sent. Defaults to False.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
buffer_size: int = 100
|
|
82
|
+
log_level_filter_mode: Literal["exclude", "include"] = "exclude"
|
|
83
|
+
log_level_filter: Optional[Union[CDP_LOG_LEVELS_TYPEHINT, Sequence[CDP_LOG_LEVELS_TYPEHINT]]] = None
|
|
84
|
+
target_type_filter_mode: Literal["exclude", "include"] = "exclude"
|
|
85
|
+
target_type_filter: Optional[Union[str, Sequence[str]]] = None
|
|
86
|
+
send_wait: bool = False
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class LoggerSettings(DictModel):
|
|
90
|
+
"""
|
|
91
|
+
Settings for configuring the LoggerManager.
|
|
92
|
+
|
|
93
|
+
Attributes:
|
|
94
|
+
dir_path (Optional[Path]): The base directory where log files will be stored.
|
|
95
|
+
If None, logging will only happen in memory and not be written to files.
|
|
96
|
+
Defaults to None.
|
|
97
|
+
renew_log (bool): Whether to clear/renew the log directory on startup. Defaults to True.
|
|
98
|
+
cdp_settings (Optional[CDPLoggerSettings]): Settings specific to CDP logging. Defaults to None.
|
|
99
|
+
fingerprint_settings (Optional[FingerprintLoggerSettings]): Settings specific to fingerprint logging.
|
|
100
|
+
Defaults to None.
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
dir_path: Optional[Path] = None
|
|
104
|
+
renew_log: bool = True
|
|
105
|
+
cdp_settings: Optional[CDPLoggerSettings] = None
|
|
106
|
+
fingerprint_settings: Optional[FingerprintLoggerSettings] = None
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class DevToolsSettings(DictModel):
|
|
110
|
+
"""
|
|
111
|
+
Settings for configuring the DevTools manager.
|
|
112
|
+
|
|
113
|
+
Attributes:
|
|
114
|
+
new_targets_filter (Optional[Sequence[TargetFilter]]): A sequence of `TargetFilter` objects
|
|
115
|
+
to control which new browser targets (e.g., tabs, iframes) DevTools should discover and attach to.
|
|
116
|
+
Defaults to None, meaning all targets are considered.
|
|
117
|
+
new_targets_buffer_size (int): The buffer size for the Trio memory channel
|
|
118
|
+
used to receive new target events. A larger buffer can prevent `trio.WouldBlock`
|
|
119
|
+
errors under high event load. Defaults to 100.
|
|
120
|
+
target_background_task (Optional[devtools_background_func_type]): An optional asynchronous function
|
|
121
|
+
that will be run as a background task for each attached DevTools target. This can be used
|
|
122
|
+
for custom per-target logic. Defaults to None.
|
|
123
|
+
logger_settings (Optional[LoggerSettings]): Configuration settings for the internal logging system.
|
|
124
|
+
If None, default logging settings will be used (no file logging by default).
|
|
125
|
+
Defaults to None.
|
|
126
|
+
fingerprint_settings (Optional[FingerprintSettings]): Configuration for fingerprint detection.
|
|
127
|
+
domains_settings (Optional[DomainsSettings]): Configuration settings for various DevTools domains.
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
new_targets_filter: Optional[Sequence[TargetFilter]] = None
|
|
131
|
+
new_targets_buffer_size: int = 100
|
|
132
|
+
target_background_task: Optional[DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT] = None
|
|
133
|
+
logger_settings: Optional[LoggerSettings] = Field(default_factory=LoggerSettings)
|
|
134
|
+
fingerprint_settings: Optional[FingerprintSettings] = None
|
|
135
|
+
domains_settings: Optional[DomainsSettings] = None
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
LoggerSettings.model_rebuild()
|
|
139
|
+
DevToolsSettings.model_rebuild()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from osn_selenium.dev_tools.target.lifecycle import LifecycleMixin
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
__all__ = ["DevToolsTarget"]
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class DevToolsTarget(LifecycleMixin):
|
|
8
|
+
"""
|
|
9
|
+
Manages the DevTools Protocol session and event handling for a specific browser target.
|
|
10
|
+
|
|
11
|
+
Each `DevToolsTarget` instance represents a single CDP target (e.g., a browser tab,
|
|
12
|
+
an iframe, or a service worker) and handles its dedicated CDP session, event listeners,
|
|
13
|
+
and associated logging.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
pass
|