├── .gitignore ├── README.md ├── pyv8env ├── __init__.py └── env │ ├── chrome │ ├── __init__.py │ ├── flags.py │ ├── v8_dom_error.py │ ├── v8_dom_exception.py │ ├── v8_event_target.py │ ├── v8_window.py │ └── v8_window_properties.py │ ├── config.py │ ├── handler.py │ ├── impl │ ├── __init__.py │ ├── error.py │ ├── event_target.py │ ├── window.py │ └── window_properties.py │ └── priority_queue.py └── test.py /.gitignore: -------------------------------------------------------------------------------- 1 | # I have separate virtualenvs for python 2 and 3 2 | .idea/ 3 | *.pyc 4 | pyv8env.so 5 | pyv8env.egg-info 6 | pyv8env_ex.egg-info 7 | build 8 | dist 9 | .eggs 10 | 11 | js_cache/ 12 | *.html 13 | src.js 14 | 15 | # tox相关 16 | .tox/ 17 | .coverage 18 | htmlcov/ 19 | .pytest_cache/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 纯python补环境框架 2 | 3 | #### 系统要求 4 | 5 | - Python 3.10 或更高版本 6 | - 支持的平台:Windows, Linux 7 | 8 | #### 依赖 9 | `pip install git+https://github.com/ConlinH/pyv8` 10 | 11 | #### 测试运行 12 | 13 | ```bash 14 | git clone https://github.com/ConlinH/pyv8env.git 15 | 16 | cd pyv8env 17 | 18 | python test.py 19 | ``` 20 | 21 | -------------------------------------------------------------------------------- /pyv8env/__init__.py: -------------------------------------------------------------------------------- 1 | from pyv8 import * 2 | -------------------------------------------------------------------------------- /pyv8env/env/chrome/__init__.py: -------------------------------------------------------------------------------- 1 | from .v8_window import Window as V8Window 2 | from .v8_window_properties import WindowProperties as V8WindowProperties 3 | from .v8_event_target import EventTarget as V8EventTarget 4 | from .v8_dom_exception import DOMException as V8DOMException 5 | from .v8_dom_error import DOMError as V8DOMError 6 | 7 | # from .v8_xpath_expression import XPathExpression as V8XPathExpression 8 | # from .v8_html_collection import HTMLCollection as V8HTMLCollection 9 | # from .v8_history import History as V8History 10 | # from .v8_ext_disjoint_timer_query_webgl2 import EXTDisjointTimerQueryWebGL2 as V8EXTDisjointTimerQueryWebGL2 11 | # from .v8_performance_measure import PerformanceMeasure as V8PerformanceMeasure 12 | # from .v8_xr_composition_layer import XRCompositionLayer as V8XRCompositionLayer 13 | # from .v8_svg_transform_list import SVGTransformList as V8SVGTransformList 14 | # from .v8_svg_animate_element import SVGAnimateElement as V8SVGAnimateElement 15 | # from .v8_origin_trials_test import OriginTrialsTest as V8OriginTrialsTest 16 | # from .v8_css_namespace_rule import CSSNamespaceRule as V8CSSNamespaceRule 17 | # from .v8_media_stream_track_event import MediaStreamTrackEvent as V8MediaStreamTrackEvent 18 | # from .v8_websocket_error import WebSocketError as V8WebSocketError 19 | # from .v8_webgl_sync import WebGLSync as V8WebGLSync 20 | # from .v8_usb_device import USBDevice as V8USBDevice 21 | # from .v8_gpu import GPU as V8GPU 22 | # from .v8_node_iterator import NodeIterator as V8NodeIterator 23 | # from .v8_cache_storage import CacheStorage as V8CacheStorage 24 | # from .v8_xr_cpu_depth_information import XRCPUDepthInformation as V8XRCPUDepthInformation 25 | # from .v8_image_data import ImageData as V8ImageData 26 | # from .v8_css_math_max import CSSMathMax as V8CSSMathMax 27 | # from .v8_resize_observer_entry import ResizeObserverEntry as V8ResizeObserverEntry 28 | # from .v8_speech_recognition_event import SpeechRecognitionEvent as V8SpeechRecognitionEvent 29 | # from .v8_html_heading_element import HTMLHeadingElement as V8HTMLHeadingElement 30 | # from .v8_css_numeric_array import CSSNumericArray as V8CSSNumericArray 31 | # from .v8_trusted_type_policy_factory import TrustedTypePolicyFactory as V8TrustedTypePolicyFactory 32 | # from .v8_idb_database import IDBDatabase as V8IDBDatabase 33 | # from .v8_restriction_target import RestrictionTarget as V8RestrictionTarget 34 | # from .v8_worklet_global_scope import WorkletGlobalScope as V8WorkletGlobalScope 35 | # from .v8_audio_context import AudioContext as V8AudioContext 36 | # from .v8_webgl_shader_precision_format import WebGLShaderPrecisionFormat as V8WebGLShaderPrecisionFormat 37 | # from .v8_digital_goods_service import DigitalGoodsService as V8DigitalGoodsService 38 | # from .v8_shared_storage_worklet_global_scope import SharedStorageWorkletGlobalScope as V8SharedStorageWorkletGlobalScope 39 | # from .v8_readable_stream_default_reader import ReadableStreamDefaultReader as V8ReadableStreamDefaultReader 40 | # from .v8_gpu_internal_error import GPUInternalError as V8GPUInternalError 41 | # from .v8_navigation_destination import NavigationDestination as V8NavigationDestination 42 | # from .v8_svg_marker_element import SVGMarkerElement as V8SVGMarkerElement 43 | # from .v8_file_writer import FileWriter as V8FileWriter 44 | # from .v8_file_system_sync_access_handle import FileSystemSyncAccessHandle as V8FileSystemSyncAccessHandle 45 | # from .v8_sync_iterator_audio_param_map import SyncIterator_AudioParamMap as V8SyncIterator_AudioParamMap 46 | # from .v8_hit_test_layer_rect_list import HitTestLayerRectList as V8HitTestLayerRectList 47 | # from .v8_svg_fe_flood_element import SVGFEFloodElement as V8SVGFEFloodElement 48 | # from .v8_dom_point import DOMPoint as V8DOMPoint 49 | # from .v8_svg_fe_offset_element import SVGFEOffsetElement as V8SVGFEOffsetElement 50 | # from .v8_audio_data import AudioData as V8AudioData 51 | # from .v8_gpu_render_bundle import GPURenderBundle as V8GPURenderBundle 52 | # from .v8_push_message_data import PushMessageData as V8PushMessageData 53 | # from .v8_svg_point import SVGPoint as V8SVGPoint 54 | # from .v8_svg_fe_morphology_element import SVGFEMorphologyElement as V8SVGFEMorphologyElement 55 | # from .v8_abort_controller import AbortController as V8AbortController 56 | # from .v8_xml_serializer import XMLSerializer as V8XMLSerializer 57 | # from .v8_svg_fe_blend_element import SVGFEBlendElement as V8SVGFEBlendElement 58 | # from .v8_svg_radial_gradient_element import SVGRadialGradientElement as V8SVGRadialGradientElement 59 | # from .v8_svg_animated_integer import SVGAnimatedInteger as V8SVGAnimatedInteger 60 | # from .v8_svg_animated_length import SVGAnimatedLength as V8SVGAnimatedLength 61 | # from .v8_snap_event import SnapEvent as V8SnapEvent 62 | # from .v8_html_param_element import HTMLParamElement as V8HTMLParamElement 63 | # from .v8_html_image_element import HTMLImageElement as V8HTMLImageElement 64 | # from .v8_text_directive import TextDirective as V8TextDirective 65 | # from .v8_track_default_list import TrackDefaultList as V8TrackDefaultList 66 | # from .v8_css_variable_reference_value import CSSVariableReferenceValue as V8CSSVariableReferenceValue 67 | # from .v8_color_page_popup_controller import ColorPagePopupController as V8ColorPagePopupController 68 | # from .v8_chapter_information import ChapterInformation as V8ChapterInformation 69 | # from .v8_html_area_element import HTMLAreaElement as V8HTMLAreaElement 70 | # from .v8_virtual_keyboard_geometry_change_event import VirtualKeyboardGeometryChangeEvent as V8VirtualKeyboardGeometryChangeEvent 71 | # from .v8_canvas_filter import CanvasFilter as V8CanvasFilter 72 | # from .v8_xr_reference_space_event import XRReferenceSpaceEvent as V8XRReferenceSpaceEvent 73 | # from .v8_sync_iterator_midi_input_map import SyncIterator_MIDIInputMap as V8SyncIterator_MIDIInputMap 74 | # from .v8_html_frame_element import HTMLFrameElement as V8HTMLFrameElement 75 | # from .v8_oes_element_index_uint import OESElementIndexUint as V8OESElementIndexUint 76 | # from .v8_source_buffer import SourceBuffer as V8SourceBuffer 77 | # from .v8_media_stream_audio_source_node import MediaStreamAudioSourceNode as V8MediaStreamAudioSourceNode 78 | # from .v8_biquad_filter_node import BiquadFilterNode as V8BiquadFilterNode 79 | # from .v8_page_popup_controller import PagePopupController as V8PagePopupController 80 | # from .v8_sync_iterator_font_face_set import SyncIterator_FontFaceSet as V8SyncIterator_FontFaceSet 81 | # from .v8_xml_http_request_upload import XMLHttpRequestUpload as V8XMLHttpRequestUpload 82 | # from .v8_webgl_debug_shaders import WebGLDebugShaders as V8WebGLDebugShaders 83 | # from .v8_khr_parallel_shader_compile import KHRParallelShaderCompile as V8KHRParallelShaderCompile 84 | # from .v8_html_input_element import HTMLInputElement as V8HTMLInputElement 85 | # from .v8_gpu_adapter import GPUAdapter as V8GPUAdapter 86 | # from .v8_ml_context import MLContext as V8MLContext 87 | # from .v8_svg_view_element import SVGViewElement as V8SVGViewElement 88 | # from .v8_canvas_pattern import CanvasPattern as V8CanvasPattern 89 | # from .v8_nv_shader_noperspective_interpolation import NVShaderNoperspectiveInterpolation as V8NVShaderNoperspectiveInterpolation 90 | # from .v8_xml_http_request_event_target import XMLHttpRequestEventTarget as V8XMLHttpRequestEventTarget 91 | # from .v8_svg_length import SVGLength as V8SVGLength 92 | # from .v8_resize_observer import ResizeObserver as V8ResizeObserver 93 | # from .v8_html_marquee_element import HTMLMarqueeElement as V8HTMLMarqueeElement 94 | # from .v8_file_list import FileList as V8FileList 95 | # from .v8_text_track_list import TextTrackList as V8TextTrackList 96 | # from .v8_death_aware_script_wrappable import DeathAwareScriptWrappable as V8DeathAwareScriptWrappable 97 | # from .v8_user_activation import UserActivation as V8UserActivation 98 | # from .v8_authenticator_response import AuthenticatorResponse as V8AuthenticatorResponse 99 | # from .v8_bluetooth_remote_gatt_server import BluetoothRemoteGATTServer as V8BluetoothRemoteGATTServer 100 | # from .v8_serial_port import SerialPort as V8SerialPort 101 | # from .v8_svg_number import SVGNumber as V8SVGNumber 102 | # from .v8_csp_violation_report_body import CSPViolationReportBody as V8CSPViolationReportBody 103 | # from .v8_sync_iterator_bluetooth_service_data_map import SyncIterator_BluetoothServiceDataMap as V8SyncIterator_BluetoothServiceDataMap 104 | # from .v8_gamepad_button_event import GamepadButtonEvent as V8GamepadButtonEvent 105 | # from .v8_mesh_2d_uv_buffer import Mesh2DUVBuffer as V8Mesh2DUVBuffer 106 | # from .v8_css_math_product import CSSMathProduct as V8CSSMathProduct 107 | # from .v8_file_system_observer import FileSystemObserver as V8FileSystemObserver 108 | # from .v8_view_transition_type_set import ViewTransitionTypeSet as V8ViewTransitionTypeSet 109 | # from .v8_svg_animated_length_list import SVGAnimatedLengthList as V8SVGAnimatedLengthList 110 | # from .v8_presentation_availability import PresentationAvailability as V8PresentationAvailability 111 | # from .v8_gpu_command_encoder import GPUCommandEncoder as V8GPUCommandEncoder 112 | # from .v8_gravity_sensor import GravitySensor as V8GravitySensor 113 | # from .v8_gamepad import Gamepad as V8Gamepad 114 | # from .v8_webgl_provoking_vertex import WebGLProvokingVertex as V8WebGLProvokingVertex 115 | # from .v8_media_device_info import MediaDeviceInfo as V8MediaDeviceInfo 116 | # from .v8_speech_synthesis import SpeechSynthesis as V8SpeechSynthesis 117 | # from .v8_ext_conservative_depth import EXTConservativeDepth as V8EXTConservativeDepth 118 | # from .v8_sync_iterator_view_transition_type_set import SyncIterator_ViewTransitionTypeSet as V8SyncIterator_ViewTransitionTypeSet 119 | # from .v8_bluetooth_characteristic_properties import BluetoothCharacteristicProperties as V8BluetoothCharacteristicProperties 120 | # from .v8_ai import AI as V8AI 121 | # from .v8_file_system_handle import FileSystemHandle as V8FileSystemHandle 122 | # from .v8_svg_matrix import SVGMatrix as V8SVGMatrix 123 | # from .v8_webgl_polygon_mode import WebGLPolygonMode as V8WebGLPolygonMode 124 | # from .v8_performance_long_animation_frame_timing import PerformanceLongAnimationFrameTiming as V8PerformanceLongAnimationFrameTiming 125 | # from .v8_service_worker_registration import ServiceWorkerRegistration as V8ServiceWorkerRegistration 126 | # from .v8_html_base_element import HTMLBaseElement as V8HTMLBaseElement 127 | # from .v8_cdata_section import CDATASection as V8CDATASection 128 | # from .v8_permissions import Permissions as V8Permissions 129 | # from .v8_performance_element_timing import PerformanceElementTiming as V8PerformanceElementTiming 130 | # from .v8_authenticator_assertion_response import AuthenticatorAssertionResponse as V8AuthenticatorAssertionResponse 131 | # from .v8_web_transport import WebTransport as V8WebTransport 132 | # from .v8_bluetooth_remote_gatt_descriptor import BluetoothRemoteGATTDescriptor as V8BluetoothRemoteGATTDescriptor 133 | # from .v8_ndef_record import NDEFRecord as V8NDEFRecord 134 | # from .v8_sync_iterator_highlight import SyncIterator_Highlight as V8SyncIterator_Highlight 135 | # from .v8_ink import Ink as V8Ink 136 | # from .v8_trusted_script_url import TrustedScriptURL as V8TrustedScriptURL 137 | # from .v8_script_processor_node import ScriptProcessorNode as V8ScriptProcessorNode 138 | # from .v8_gpu_validation_error import GPUValidationError as V8GPUValidationError 139 | # from .v8_permission_status import PermissionStatus as V8PermissionStatus 140 | # from .v8_svg_text_content_element import SVGTextContentElement as V8SVGTextContentElement 141 | # from .v8_svg_script_element import SVGScriptElement as V8SVGScriptElement 142 | # from .v8_worklet import Worklet as V8Worklet 143 | # from .v8_selector_directive import SelectorDirective as V8SelectorDirective 144 | # from .v8_intervention_report_body import InterventionReportBody as V8InterventionReportBody 145 | # from .v8_push_manager import PushManager as V8PushManager 146 | # from .v8_mutation_observer import MutationObserver as V8MutationObserver 147 | # from .v8_xr_anchor import XRAnchor as V8XRAnchor 148 | # from .v8_directory_reader import DirectoryReader as V8DirectoryReader 149 | # from .v8_webgl_program import WebGLProgram as V8WebGLProgram 150 | # from .v8_file_system_change_record import FileSystemChangeRecord as V8FileSystemChangeRecord 151 | # from .v8_internals import Internals as V8Internals 152 | # from .v8_webgl_compressed_texture_etc import WebGLCompressedTextureETC as V8WebGLCompressedTextureETC 153 | # from .v8_animation_worklet_global_scope import AnimationWorkletGlobalScope as V8AnimationWorkletGlobalScope 154 | # from .v8_css_page_rule import CSSPageRule as V8CSSPageRule 155 | # from .v8_message_event import MessageEvent as V8MessageEvent 156 | # from .v8_idb_open_db_request import IDBOpenDBRequest as V8IDBOpenDBRequest 157 | # from .v8_cache import Cache as V8Cache 158 | # from .v8_audio_buffer_source_node import AudioBufferSourceNode as V8AudioBufferSourceNode 159 | # from .v8_xr_plane_set import XRPlaneSet as V8XRPlaneSet 160 | # from .v8_angle_instanced_arrays import ANGLEInstancedArrays as V8ANGLEInstancedArrays 161 | # from .v8_navigator_login import NavigatorLogin as V8NavigatorLogin 162 | # from .v8_svg_number_list import SVGNumberList as V8SVGNumberList 163 | # from .v8_geolocation import Geolocation as V8Geolocation 164 | # from .v8_accelerometer import Accelerometer as V8Accelerometer 165 | # from .v8_css_transform_value import CSSTransformValue as V8CSSTransformValue 166 | # from .v8_sync_iterator_highlight_registry import SyncIterator_HighlightRegistry as V8SyncIterator_HighlightRegistry 167 | # from .v8_gpu_device import GPUDevice as V8GPUDevice 168 | # from .v8_keyframe_effect import KeyframeEffect as V8KeyframeEffect 169 | # from .v8_text_encoder import TextEncoder as V8TextEncoder 170 | # from .v8_css_layer_block_rule import CSSLayerBlockRule as V8CSSLayerBlockRule 171 | # from .v8_html_object_element import HTMLObjectElement as V8HTMLObjectElement 172 | # from .v8_text_metrics import TextMetrics as V8TextMetrics 173 | # from .v8_svg_line_element import SVGLineElement as V8SVGLineElement 174 | # from .v8_device_properties import DeviceProperties as V8DeviceProperties 175 | # from .v8_worklet_animation import WorkletAnimation as V8WorkletAnimation 176 | # from .v8_not_restored_reasons import NotRestoredReasons as V8NotRestoredReasons 177 | # from .v8_script_wrappable_task_state import ScriptWrappableTaskState as V8ScriptWrappableTaskState 178 | # from .v8_readable_stream_byob_reader import ReadableStreamBYOBReader as V8ReadableStreamBYOBReader 179 | # from .v8_transform_stream import TransformStream as V8TransformStream 180 | # from .v8_payment_method_change_event import PaymentMethodChangeEvent as V8PaymentMethodChangeEvent 181 | # from .v8_push_event import PushEvent as V8PushEvent 182 | # from .v8_shared_worker import SharedWorker as V8SharedWorker 183 | # from .v8_bluetooth_device import BluetoothDevice as V8BluetoothDevice 184 | # from .v8_document_picture_in_picture import DocumentPictureInPicture as V8DocumentPictureInPicture 185 | # from .v8_video_track_generator import VideoTrackGenerator as V8VideoTrackGenerator 186 | # from .v8_css_math_invert import CSSMathInvert as V8CSSMathInvert 187 | # from .v8_ui_event import UIEvent as V8UIEvent 188 | # from .v8_svg_tspan_element import SVGTSpanElement as V8SVGTSpanElement 189 | # from .v8_css_position_try_rule import CSSPositionTryRule as V8CSSPositionTryRule 190 | # from .v8_encoded_audio_chunk import EncodedAudioChunk as V8EncodedAudioChunk 191 | # from .v8_html_label_element import HTMLLabelElement as V8HTMLLabelElement 192 | # from .v8_battery_manager import BatteryManager as V8BatteryManager 193 | # from .v8_usb_out_transfer_result import USBOutTransferResult as V8USBOutTransferResult 194 | # from .v8_handwriting_stroke import HandwritingStroke as V8HandwritingStroke 195 | # from .v8_mojo_watcher import MojoWatcher as V8MojoWatcher 196 | # from .v8_push_subscription_change_event import PushSubscriptionChangeEvent as V8PushSubscriptionChangeEvent 197 | # from .v8_element_internals import ElementInternals as V8ElementInternals 198 | # from .v8_webgl_blend_func_extended import WebGLBlendFuncExtended as V8WebGLBlendFuncExtended 199 | # from .v8_scheduling import Scheduling as V8Scheduling 200 | # from .v8_css_translate import CSSTranslate as V8CSSTranslate 201 | # from .v8_file_reader_sync import FileReaderSync as V8FileReaderSync 202 | # from .v8_form_data_event import FormDataEvent as V8FormDataEvent 203 | # from .v8_html_frame_set_element import HTMLFrameSetElement as V8HTMLFrameSetElement 204 | # from .v8_promise_rejection_event import PromiseRejectionEvent as V8PromiseRejectionEvent 205 | # from .v8_metadata import Metadata as V8Metadata 206 | # from .v8_xr_input_source_event import XRInputSourceEvent as V8XRInputSourceEvent 207 | # from .v8_speech_recognition_result import SpeechRecognitionResult as V8SpeechRecognitionResult 208 | # from .v8_invoke_event import InvokeEvent as V8InvokeEvent 209 | # from .v8_xslt_processor import XSLTProcessor as V8XSLTProcessor 210 | # from .v8_ext_shader_texture_lod import EXTShaderTextureLOD as V8EXTShaderTextureLOD 211 | # from .v8_ml_buffer import MLBuffer as V8MLBuffer 212 | # from .v8_memory_info import MemoryInfo as V8MemoryInfo 213 | # from .v8_svg_fe_convolve_matrix_element import SVGFEConvolveMatrixElement as V8SVGFEConvolveMatrixElement 214 | # from .v8_ext_frag_depth import EXTFragDepth as V8EXTFragDepth 215 | # from .v8_media_key_system_access import MediaKeySystemAccess as V8MediaKeySystemAccess 216 | # from .v8_payment_manager import PaymentManager as V8PaymentManager 217 | # from .v8_html_map_element import HTMLMapElement as V8HTMLMapElement 218 | # from .v8_authenticator_attestation_response import AuthenticatorAttestationResponse as V8AuthenticatorAttestationResponse 219 | # from .v8_html_meta_element import HTMLMetaElement as V8HTMLMetaElement 220 | # from .v8_preference_object import PreferenceObject as V8PreferenceObject 221 | # from .v8_layout_worklet_global_scope import LayoutWorkletGlobalScope as V8LayoutWorkletGlobalScope 222 | # from .v8_plugin import Plugin as V8Plugin 223 | # from .v8_headers import Headers as V8Headers 224 | # from .v8_password_credential import PasswordCredential as V8PasswordCredential 225 | # from .v8_credential import Credential as V8Credential 226 | # from .v8_bluetooth_service_data_map import BluetoothServiceDataMap as V8BluetoothServiceDataMap 227 | # from .v8_clipboard_event import ClipboardEvent as V8ClipboardEvent 228 | # from .v8_svg_animate_transform_element import SVGAnimateTransformElement as V8SVGAnimateTransformElement 229 | # from .v8_usb_in_transfer_result import USBInTransferResult as V8USBInTransferResult 230 | # from .v8_css_matrix_component import CSSMatrixComponent as V8CSSMatrixComponent 231 | # from .v8_performance_event_timing import PerformanceEventTiming as V8PerformanceEventTiming 232 | # from .v8_webgl2_rendering_context import WebGL2RenderingContext as V8WebGL2RenderingContext 233 | # from .v8_ai_text_session import AITextSession as V8AITextSession 234 | # from .v8_css_skew import CSSSkew as V8CSSSkew 235 | # from .v8_xr_transient_input_hit_test_result import XRTransientInputHitTestResult as V8XRTransientInputHitTestResult 236 | # from .v8_keyboard_layout_map import KeyboardLayoutMap as V8KeyboardLayoutMap 237 | # from .v8_text_event import TextEvent as V8TextEvent 238 | # from .v8_css_media_rule import CSSMediaRule as V8CSSMediaRule 239 | # from .v8_hash_change_event import HashChangeEvent as V8HashChangeEvent 240 | # from .v8_html_element import HTMLElement as V8HTMLElement 241 | # from .v8_web_transport_datagram_duplex_stream import WebTransportDatagramDuplexStream as V8WebTransportDatagramDuplexStream 242 | # from .v8_rtc_peer_connection_ice_error_event import RTCPeerConnectionIceErrorEvent as V8RTCPeerConnectionIceErrorEvent 243 | # from .v8_image_capture import ImageCapture as V8ImageCapture 244 | # from .v8_webgl_draw_instanced_base_vertex_base_instance import WebGLDrawInstancedBaseVertexBaseInstance as V8WebGLDrawInstancedBaseVertexBaseInstance 245 | # from .v8_writable_stream_default_controller import WritableStreamDefaultController as V8WritableStreamDefaultController 246 | # from .v8_video_track_list import VideoTrackList as V8VideoTrackList 247 | # from .v8_smart_card_error import SmartCardError as V8SmartCardError 248 | # from .v8_overconstrained_error import OverconstrainedError as V8OverconstrainedError 249 | # from .v8_fence import Fence as V8Fence 250 | # from .v8_css_math_value import CSSMathValue as V8CSSMathValue 251 | # from .v8_media_key_message_event import MediaKeyMessageEvent as V8MediaKeyMessageEvent 252 | # from .v8_gpu_bind_group import GPUBindGroup as V8GPUBindGroup 253 | # from .v8_ndef_message import NDEFMessage as V8NDEFMessage 254 | # from .v8_inspector_overlay_host import InspectorOverlayHost as V8InspectorOverlayHost 255 | # from .v8_gpu_uncaptured_error_event import GPUUncapturedErrorEvent as V8GPUUncapturedErrorEvent 256 | # from .v8_xr_input_sources_change_event import XRInputSourcesChangeEvent as V8XRInputSourcesChangeEvent 257 | # from .v8_report_body import ReportBody as V8ReportBody 258 | # from .v8_content_visibility_auto_state_change_event import ContentVisibilityAutoStateChangeEvent as V8ContentVisibilityAutoStateChangeEvent 259 | # from .v8_sync_iterator_css_font_feature_values_map import SyncIterator_CSSFontFeatureValuesMap as V8SyncIterator_CSSFontFeatureValuesMap 260 | # from .v8_xr_anchor_set import XRAnchorSet as V8XRAnchorSet 261 | # from .v8_constant_source_node import ConstantSourceNode as V8ConstantSourceNode 262 | # from .v8_udp_socket import UDPSocket as V8UDPSocket 263 | # from .v8_rtc_error import RTCError as V8RTCError 264 | # from .v8_html_form_element import HTMLFormElement as V8HTMLFormElement 265 | # from .v8_mojo import Mojo as V8Mojo 266 | # from .v8_performance_resource_timing import PerformanceResourceTiming as V8PerformanceResourceTiming 267 | # from .v8_document_timeline import DocumentTimeline as V8DocumentTimeline 268 | # from .v8_rtc_rtp_transceiver import RTCRtpTransceiver as V8RTCRtpTransceiver 269 | # from .v8_before_unload_event import BeforeUnloadEvent as V8BeforeUnloadEvent 270 | # from .v8_media_stream_track_generator import MediaStreamTrackGenerator as V8MediaStreamTrackGenerator 271 | # from .v8_identity_credential import IdentityCredential as V8IdentityCredential 272 | # from .v8_smart_card_connection import SmartCardConnection as V8SmartCardConnection 273 | # from .v8_navigation_preload_manager import NavigationPreloadManager as V8NavigationPreloadManager 274 | # from .v8_performance_navigation_timing import PerformanceNavigationTiming as V8PerformanceNavigationTiming 275 | # from .v8_selection import Selection as V8Selection 276 | # from .v8_css_transition import CSSTransition as V8CSSTransition 277 | # from .v8_xr_light_probe import XRLightProbe as V8XRLightProbe 278 | # from .v8_channel_splitter_node import ChannelSplitterNode as V8ChannelSplitterNode 279 | # from .v8_absolute_orientation_sensor import AbsoluteOrientationSensor as V8AbsoluteOrientationSensor 280 | # from .v8_picture_in_picture_window import PictureInPictureWindow as V8PictureInPictureWindow 281 | # from .v8_svg_ellipse_element import SVGEllipseElement as V8SVGEllipseElement 282 | # from .v8_mime_type_array import MimeTypeArray as V8MimeTypeArray 283 | # from .v8_highlight import Highlight as V8Highlight 284 | # from .v8_relative_orientation_sensor import RelativeOrientationSensor as V8RelativeOrientationSensor 285 | # from .v8_federated_credential import FederatedCredential as V8FederatedCredential 286 | # from .v8_callback_function_test import CallbackFunctionTest as V8CallbackFunctionTest 287 | # from .v8_animation_timeline import AnimationTimeline as V8AnimationTimeline 288 | # from .v8_svg_fe_spot_light_element import SVGFESpotLightElement as V8SVGFESpotLightElement 289 | # from .v8_orientation_sensor import OrientationSensor as V8OrientationSensor 290 | # from .v8_document_fragment import DocumentFragment as V8DocumentFragment 291 | # from .v8_panner_node import PannerNode as V8PannerNode 292 | # from .v8_video_track import VideoTrack as V8VideoTrack 293 | # from .v8_xr_webgl_depth_information import XRWebGLDepthInformation as V8XRWebGLDepthInformation 294 | # from .v8_fenced_frame_config import FencedFrameConfig as V8FencedFrameConfig 295 | # from .v8_sync_iterator_midi_output_map import SyncIterator_MIDIOutputMap as V8SyncIterator_MIDIOutputMap 296 | # from .v8_webgl_shader_pixel_local_storage import WebGLShaderPixelLocalStorage as V8WebGLShaderPixelLocalStorage 297 | # from .v8_css_keyframes_rule import CSSKeyframesRule as V8CSSKeyframesRule 298 | # from .v8_url_pattern import URLPattern as V8URLPattern 299 | # from .v8_navigation_activation import NavigationActivation as V8NavigationActivation 300 | # from .v8_gpu_compilation_message import GPUCompilationMessage as V8GPUCompilationMessage 301 | # from .v8_extendable_event import ExtendableEvent as V8ExtendableEvent 302 | # from .v8_svg_rect import SVGRect as V8SVGRect 303 | # from .v8_tcp_socket import TCPSocket as V8TCPSocket 304 | # from .v8_sensor_error_event import SensorErrorEvent as V8SensorErrorEvent 305 | # from .v8_html_mod_element import HTMLModElement as V8HTMLModElement 306 | # from .v8_xml_document import XMLDocument as V8XMLDocument 307 | # from .v8_blob import Blob as V8Blob 308 | # from .v8_offscreen_canvas import OffscreenCanvas as V8OffscreenCanvas 309 | # from .v8_convolver_node import ConvolverNode as V8ConvolverNode 310 | # from .v8_webgl_compressed_texture_pvrtc import WebGLCompressedTexturePVRTC as V8WebGLCompressedTexturePVRTC 311 | # from .v8_layout_shift import LayoutShift as V8LayoutShift 312 | # from .v8_media_element_audio_source_node import MediaElementAudioSourceNode as V8MediaElementAudioSourceNode 313 | # from .v8_handwriting_drawing import HandwritingDrawing as V8HandwritingDrawing 314 | # from .v8_composition_event import CompositionEvent as V8CompositionEvent 315 | # from .v8_directory_entry_sync import DirectoryEntrySync as V8DirectoryEntrySync 316 | # from .v8_audio_track import AudioTrack as V8AudioTrack 317 | # from .v8_resize_observer_size import ResizeObserverSize as V8ResizeObserverSize 318 | # from .v8_html_html_element import HTMLHtmlElement as V8HTMLHtmlElement 319 | # from .v8_audio_param_map import AudioParamMap as V8AudioParamMap 320 | # from .v8_audio_decoder import AudioDecoder as V8AudioDecoder 321 | # from .v8_decompression_stream import DecompressionStream as V8DecompressionStream 322 | # from .v8_video_encoder import VideoEncoder as V8VideoEncoder 323 | # from .v8_media_query_list_event import MediaQueryListEvent as V8MediaQueryListEvent 324 | # from .v8_file_system_directory_handle import FileSystemDirectoryHandle as V8FileSystemDirectoryHandle 325 | # from .v8_svg_animated_number_list import SVGAnimatedNumberList as V8SVGAnimatedNumberList 326 | # from .v8_html_options_collection import HTMLOptionsCollection as V8HTMLOptionsCollection 327 | # from .v8_ml_graph import MLGraph as V8MLGraph 328 | # from .v8_presentation import Presentation as V8Presentation 329 | # from .v8_paint_rendering_context_2d import PaintRenderingContext2D as V8PaintRenderingContext2D 330 | # from .v8_contact_address import ContactAddress as V8ContactAddress 331 | # from .v8_webgl_compressed_texture_s3tc import WebGLCompressedTextureS3TC as V8WebGLCompressedTextureS3TC 332 | # from .v8_otp_credential import OTPCredential as V8OTPCredential 333 | # from .v8_idb_factory import IDBFactory as V8IDBFactory 334 | # from .v8_speech_recognition_alternative import SpeechRecognitionAlternative as V8SpeechRecognitionAlternative 335 | # from .v8_svg_geometry_element import SVGGeometryElement as V8SVGGeometryElement 336 | # from .v8_validity_state import ValidityState as V8ValidityState 337 | # from .v8_file_system_file_handle import FileSystemFileHandle as V8FileSystemFileHandle 338 | # from .v8_gpu_texture_view import GPUTextureView as V8GPUTextureView 339 | # from .v8_svg_fe_component_transfer_element import SVGFEComponentTransferElement as V8SVGFEComponentTransferElement 340 | # from .v8_gc_observation import GCObservation as V8GCObservation 341 | # from .v8_image_bitmap import ImageBitmap as V8ImageBitmap 342 | # from .v8_analyser_node import AnalyserNode as V8AnalyserNode 343 | # from .v8_message_channel import MessageChannel as V8MessageChannel 344 | # from .v8_html_link_element import HTMLLinkElement as V8HTMLLinkElement 345 | # from .v8_svg_preserve_aspect_ratio import SVGPreserveAspectRatio as V8SVGPreserveAspectRatio 346 | # from .v8_svg_fe_color_matrix_element import SVGFEColorMatrixElement as V8SVGFEColorMatrixElement 347 | # from .v8_payment_instruments import PaymentInstruments as V8PaymentInstruments 348 | # from .v8_svg_unit_types import SVGUnitTypes as V8SVGUnitTypes 349 | # from .v8_svg_switch_element import SVGSwitchElement as V8SVGSwitchElement 350 | # from .v8_video_frame import VideoFrame as V8VideoFrame 351 | # from .v8_protected_audience import ProtectedAudience as V8ProtectedAudience 352 | # from .v8_css_math_clamp import CSSMathClamp as V8CSSMathClamp 353 | # from .v8_performance_observer_entry_list import PerformanceObserverEntryList as V8PerformanceObserverEntryList 354 | # from .v8_webgl_clip_cull_distance import WebGLClipCullDistance as V8WebGLClipCullDistance 355 | # from .v8_html_track_element import HTMLTrackElement as V8HTMLTrackElement 356 | # from .v8_rtc_rtp_transport import RTCRtpTransport as V8RTCRtpTransport 357 | # from .v8_image_track import ImageTrack as V8ImageTrack 358 | # from .v8_scheduler import Scheduler as V8Scheduler 359 | # from .v8_subscriber import Subscriber as V8Subscriber 360 | # from .v8_computed_accessible_node import ComputedAccessibleNode as V8ComputedAccessibleNode 361 | # from .v8_track_event import TrackEvent as V8TrackEvent 362 | # from .v8_svg_element import SVGElement as V8SVGElement 363 | # from .v8_static_range import StaticRange as V8StaticRange 364 | # from .v8_webgl_buffer import WebGLBuffer as V8WebGLBuffer 365 | # from .v8_drag_event import DragEvent as V8DragEvent 366 | # from .v8_performance_entry import PerformanceEntry as V8PerformanceEntry 367 | # from .v8_shared_worker_global_scope import SharedWorkerGlobalScope as V8SharedWorkerGlobalScope 368 | # from .v8_media_capabilities import MediaCapabilities as V8MediaCapabilities 369 | # from .v8_attribute_part import AttributePart as V8AttributePart 370 | # from .v8_close_watcher import CloseWatcher as V8CloseWatcher 371 | # from .v8_background_fetch_manager import BackgroundFetchManager as V8BackgroundFetchManager 372 | # from .v8_ext_polygon_offset_clamp import EXTPolygonOffsetClamp as V8EXTPolygonOffsetClamp 373 | # from .v8_part import Part as V8Part 374 | # from .v8_mathml_element import MathMLElement as V8MathMLElement 375 | # from .v8_xr_input_source_array import XRInputSourceArray as V8XRInputSourceArray 376 | # from .v8_css_style_value import CSSStyleValue as V8CSSStyleValue 377 | # from .v8_dom_file_system import DOMFileSystem as V8DOMFileSystem 378 | # from .v8_audio_sink_info import AudioSinkInfo as V8AudioSinkInfo 379 | # from .v8_hid import HID as V8HID 380 | # from .v8_html_opt_group_element import HTMLOptGroupElement as V8HTMLOptGroupElement 381 | # from .v8_smart_card_resource_manager import SmartCardResourceManager as V8SmartCardResourceManager 382 | # from .v8_performance_observer import PerformanceObserver as V8PerformanceObserver 383 | # from .v8_database import Database as V8Database 384 | # from .v8_payment_request_update_event import PaymentRequestUpdateEvent as V8PaymentRequestUpdateEvent 385 | # from .v8_before_create_policy_event import BeforeCreatePolicyEvent as V8BeforeCreatePolicyEvent 386 | # from .v8_message_port import MessagePort as V8MessagePort 387 | # from .v8_gpu_render_pass_encoder import GPURenderPassEncoder as V8GPURenderPassEncoder 388 | # from .v8_ext_srgb import EXTsRGB as V8EXTsRGB 389 | # from .v8_html_table_section_element import HTMLTableSectionElement as V8HTMLTableSectionElement 390 | # from .v8_file_system_writable_file_stream import FileSystemWritableFileStream as V8FileSystemWritableFileStream 391 | # from .v8_device_posture import DevicePosture as V8DevicePosture 392 | # from .v8_usb_connection_event import USBConnectionEvent as V8USBConnectionEvent 393 | # from .v8_worker_location import WorkerLocation as V8WorkerLocation 394 | # from .v8_rtc_rtp_sender import RTCRtpSender as V8RTCRtpSender 395 | # from .v8_html_anchor_element import HTMLAnchorElement as V8HTMLAnchorElement 396 | # from .v8_html_menu_element import HTMLMenuElement as V8HTMLMenuElement 397 | # from .v8_css_hsl import CSSHSL as V8CSSHSL 398 | # from .v8_style_property_map import StylePropertyMap as V8StylePropertyMap 399 | # from .v8_xr_view import XRView as V8XRView 400 | # from .v8_xr_ray import XRRay as V8XRRay 401 | # from .v8_reporting_observer import ReportingObserver as V8ReportingObserver 402 | # from .v8_captured_mouse_event import CapturedMouseEvent as V8CapturedMouseEvent 403 | # from .v8_performance import Performance as V8Performance 404 | # from .v8_xr_pose import XRPose as V8XRPose 405 | # from .v8_document_picture_in_picture_event import DocumentPictureInPictureEvent as V8DocumentPictureInPictureEvent 406 | # from .v8_source_buffer_list import SourceBufferList as V8SourceBufferList 407 | # from .v8_sub_apps import SubApps as V8SubApps 408 | # from .v8_interest_event import InterestEvent as V8InterestEvent 409 | # from .v8_navigate_event import NavigateEvent as V8NavigateEvent 410 | # from .v8_gpu_buffer import GPUBuffer as V8GPUBuffer 411 | # from .v8_xr_hand import XRHand as V8XRHand 412 | # from .v8_webgl_active_info import WebGLActiveInfo as V8WebGLActiveInfo 413 | # from .v8_fragment_directive import FragmentDirective as V8FragmentDirective 414 | # from .v8_device_motion_event_rotation_rate import DeviceMotionEventRotationRate as V8DeviceMotionEventRotationRate 415 | # from .v8_html_output_element import HTMLOutputElement as V8HTMLOutputElement 416 | # from .v8_page_transition_event import PageTransitionEvent as V8PageTransitionEvent 417 | # from .v8_keyboard_event import KeyboardEvent as V8KeyboardEvent 418 | # from .v8_html_canvas_element import HTMLCanvasElement as V8HTMLCanvasElement 419 | # from .v8_gpu_adapter_info import GPUAdapterInfo as V8GPUAdapterInfo 420 | # from .v8_delegated_ink_trail_presenter import DelegatedInkTrailPresenter as V8DelegatedInkTrailPresenter 421 | # from .v8_sql_result_set import SQLResultSet as V8SQLResultSet 422 | # from .v8_performance_paint_timing import PerformancePaintTiming as V8PerformancePaintTiming 423 | # from .v8_webgl_multi_draw_instanced_base_vertex_base_instance import WebGLMultiDrawInstancedBaseVertexBaseInstance as V8WebGLMultiDrawInstancedBaseVertexBaseInstance 424 | # from .v8_midi_output import MIDIOutput as V8MIDIOutput 425 | # from .v8_sql_result_set_row_list import SQLResultSetRowList as V8SQLResultSetRowList 426 | # from .v8_css_style_declaration import CSSStyleDeclaration as V8CSSStyleDeclaration 427 | # from .v8_html_video_element import HTMLVideoElement as V8HTMLVideoElement 428 | # from .v8_caret_position import CaretPosition as V8CaretPosition 429 | # from .v8_dom_string_list import DOMStringList as V8DOMStringList 430 | # from .v8_image_track_list import ImageTrackList as V8ImageTrackList 431 | # from .v8_webgl_stencil_texturing import WebGLStencilTexturing as V8WebGLStencilTexturing 432 | # from .v8_bluetooth_remote_gatt_service import BluetoothRemoteGATTService as V8BluetoothRemoteGATTService 433 | # from .v8_cookie_change_event import CookieChangeEvent as V8CookieChangeEvent 434 | # from .v8_transition_event import TransitionEvent as V8TransitionEvent 435 | # from .v8_gpu_heap_property import GPUHeapProperty as V8GPUHeapProperty 436 | # from .v8_screen_orientation import ScreenOrientation as V8ScreenOrientation 437 | # from .v8_css_color_value import CSSColorValue as V8CSSColorValue 438 | # from .v8_css_scope_rule import CSSScopeRule as V8CSSScopeRule 439 | # from .v8_picture_in_picture_event import PictureInPictureEvent as V8PictureInPictureEvent 440 | # from .v8_pressure_record import PressureRecord as V8PressureRecord 441 | # from .v8_gpu_device_lost_info import GPUDeviceLostInfo as V8GPUDeviceLostInfo 442 | # from .v8_oes_shader_multisample_interpolation import OESShaderMultisampleInterpolation as V8OESShaderMultisampleInterpolation 443 | # from .v8_ext_texture_compression_bptc import EXTTextureCompressionBPTC as V8EXTTextureCompressionBPTC 444 | # from .v8_payment_request_event import PaymentRequestEvent as V8PaymentRequestEvent 445 | # from .v8_text_format import TextFormat as V8TextFormat 446 | # from .v8_directory_reader_sync import DirectoryReaderSync as V8DirectoryReaderSync 447 | # from .v8_svg_fe_distant_light_element import SVGFEDistantLightElement as V8SVGFEDistantLightElement 448 | # from .v8_visual_viewport import VisualViewport as V8VisualViewport 449 | # from .v8_gpu_sampler import GPUSampler as V8GPUSampler 450 | # from .v8_touch import Touch as V8Touch 451 | # from .v8_permissions_policy_violation_report_body import PermissionsPolicyViolationReportBody as V8PermissionsPolicyViolationReportBody 452 | # from .v8_css_font_palette_values_rule import CSSFontPaletteValuesRule as V8CSSFontPaletteValuesRule 453 | # from .v8_dom_parser import DOMParser as V8DOMParser 454 | # from .v8_html_br_element import HTMLBRElement as V8HTMLBRElement 455 | # from .v8_video_playback_quality import VideoPlaybackQuality as V8VideoPlaybackQuality 456 | # from .v8_gpu_texture import GPUTexture as V8GPUTexture 457 | # from .v8_presentation_connection_available_event import PresentationConnectionAvailableEvent as V8PresentationConnectionAvailableEvent 458 | # from .v8_geolocation_coordinates import GeolocationCoordinates as V8GeolocationCoordinates 459 | # from .v8_serial import Serial as V8Serial 460 | # from .v8_task_priority_change_event import TaskPriorityChangeEvent as V8TaskPriorityChangeEvent 461 | # from .v8_webgl_render_shared_exponent import WebGLRenderSharedExponent as V8WebGLRenderSharedExponent 462 | # from .v8_dom_matrix import DOMMatrix as V8DOMMatrix 463 | # from .v8_device_orientation_event import DeviceOrientationEvent as V8DeviceOrientationEvent 464 | # from .v8_translation import Translation as V8Translation 465 | # from .v8_xr_joint_pose import XRJointPose as V8XRJointPose 466 | # from .v8_usb_interface import USBInterface as V8USBInterface 467 | # from .v8_rtc_peer_connection_ice_event import RTCPeerConnectionIceEvent as V8RTCPeerConnectionIceEvent 468 | # from .v8_device_motion_event import DeviceMotionEvent as V8DeviceMotionEvent 469 | # from .v8_extendable_cookie_change_event import ExtendableCookieChangeEvent as V8ExtendableCookieChangeEvent 470 | # from .v8_credentials_container import CredentialsContainer as V8CredentialsContainer 471 | # from .v8_css_import_rule import CSSImportRule as V8CSSImportRule 472 | # from .v8_layout_child import LayoutChild as V8LayoutChild 473 | # from .v8_xr_rigid_transform import XRRigidTransform as V8XRRigidTransform 474 | # from .v8_html_button_element import HTMLButtonElement as V8HTMLButtonElement 475 | # from .v8_html_div_element import HTMLDivElement as V8HTMLDivElement 476 | # from .v8_data_transfer_item_list import DataTransferItemList as V8DataTransferItemList 477 | # from .v8_ext_color_buffer_half_float import EXTColorBufferHalfFloat as V8EXTColorBufferHalfFloat 478 | # from .v8_dom_rect_read_only import DOMRectReadOnly as V8DOMRectReadOnly 479 | # from .v8_oes_vertex_array_object import OESVertexArrayObject as V8OESVertexArrayObject 480 | # from .v8_performance_mark import PerformanceMark as V8PerformanceMark 481 | # from .v8_subtle_crypto import SubtleCrypto as V8SubtleCrypto 482 | # from .v8_shared_storage import SharedStorage as V8SharedStorage 483 | # from .v8_html_select_list_element import HTMLSelectListElement as V8HTMLSelectListElement 484 | # from .v8_pressure_observer import PressureObserver as V8PressureObserver 485 | # from .v8_gpu_supported_features import GPUSupportedFeatures as V8GPUSupportedFeatures 486 | # from .v8_offline_audio_context import OfflineAudioContext as V8OfflineAudioContext 487 | # from .v8_gamepad_event import GamepadEvent as V8GamepadEvent 488 | # from .v8_text_track_cue_list import TextTrackCueList as V8TextTrackCueList 489 | # from .v8_gpu_pipeline_layout import GPUPipelineLayout as V8GPUPipelineLayout 490 | # from .v8_rtc_stats_report import RTCStatsReport as V8RTCStatsReport 491 | # from .v8_sanitizer import Sanitizer as V8Sanitizer 492 | # from .v8_css_rule import CSSRule as V8CSSRule 493 | # from .v8_svg_fe_point_light_element import SVGFEPointLightElement as V8SVGFEPointLightElement 494 | # from .v8_text import Text as V8Text 495 | # from .v8_svg_a_element import SVGAElement as V8SVGAElement 496 | # from .v8_css_grouping_rule import CSSGroupingRule as V8CSSGroupingRule 497 | # from .v8_payment_address import PaymentAddress as V8PaymentAddress 498 | # from .v8_canvas_capture_media_stream_track import CanvasCaptureMediaStreamTrack as V8CanvasCaptureMediaStreamTrack 499 | # from .v8_svg_style_element import SVGStyleElement as V8SVGStyleElement 500 | # from .v8_clipboard import Clipboard as V8Clipboard 501 | # from .v8_html_ulist_element import HTMLUListElement as V8HTMLUListElement 502 | # from .v8_gpu_compute_pass_encoder import GPUComputePassEncoder as V8GPUComputePassEncoder 503 | # from .v8_svg_animated_rect import SVGAnimatedRect as V8SVGAnimatedRect 504 | # from .v8_security_policy_violation_event import SecurityPolicyViolationEvent as V8SecurityPolicyViolationEvent 505 | # from .v8_gpu_shader_module import GPUShaderModule as V8GPUShaderModule 506 | # from .v8_xr_image_tracking_result import XRImageTrackingResult as V8XRImageTrackingResult 507 | # from .v8_rtc_peer_connection import RTCPeerConnection as V8RTCPeerConnection 508 | # from .v8_background_fetch_event import BackgroundFetchEvent as V8BackgroundFetchEvent 509 | # from .v8_sensor import Sensor as V8Sensor 510 | # from .v8_sync_iterator_media_key_status_map import SyncIterator_MediaKeyStatusMap as V8SyncIterator_MediaKeyStatusMap 511 | # from .v8_character_data import CharacterData as V8CharacterData 512 | # from .v8_html_time_element import HTMLTimeElement as V8HTMLTimeElement 513 | # from .v8_css_unit_value import CSSUnitValue as V8CSSUnitValue 514 | # from .v8_html_data_element import HTMLDataElement as V8HTMLDataElement 515 | # from .v8_dev_tools_host import DevToolsHost as V8DevToolsHost 516 | # from .v8_language_translator import LanguageTranslator as V8LanguageTranslator 517 | # from .v8_html_text_area_element import HTMLTextAreaElement as V8HTMLTextAreaElement 518 | # from .v8_webgl_multi_draw import WebGLMultiDraw as V8WebGLMultiDraw 519 | # from .v8_xr_session import XRSession as V8XRSession 520 | # from .v8_webgl_renderbuffer import WebGLRenderbuffer as V8WebGLRenderbuffer 521 | # from .v8_css_unparsed_value import CSSUnparsedValue as V8CSSUnparsedValue 522 | # from .v8_webgl_vertex_array_object import WebGLVertexArrayObject as V8WebGLVertexArrayObject 523 | # from .v8_ml_operand import MLOperand as V8MLOperand 524 | # from .v8_html_table_element import HTMLTableElement as V8HTMLTableElement 525 | # from .v8_websocket import WebSocket as V8WebSocket 526 | # from .v8_dom_string_map import DOMStringMap as V8DOMStringMap 527 | # from .v8_svg_fe_merge_element import SVGFEMergeElement as V8SVGFEMergeElement 528 | # from .v8_geolocation_position import GeolocationPosition as V8GeolocationPosition 529 | # from .v8_overscroll_event import OverscrollEvent as V8OverscrollEvent 530 | # from .v8_rtc_session_description import RTCSessionDescription as V8RTCSessionDescription 531 | # from .v8_intrinsic_sizes import IntrinsicSizes as V8IntrinsicSizes 532 | # from .v8_mesh_2d_index_buffer import Mesh2DIndexBuffer as V8Mesh2DIndexBuffer 533 | # from .v8_presentation_request import PresentationRequest as V8PresentationRequest 534 | # from .v8_layout_constraints import LayoutConstraints as V8LayoutConstraints 535 | # from .v8_rtc_sctp_transport import RTCSctpTransport as V8RTCSctpTransport 536 | # from .v8_custom_state_set import CustomStateSet as V8CustomStateSet 537 | # from .v8_svg_title_element import SVGTitleElement as V8SVGTitleElement 538 | # from .v8_web_transport_error import WebTransportError as V8WebTransportError 539 | # from .v8_presentation_connection import PresentationConnection as V8PresentationConnection 540 | # from .v8_dom_file_system_sync import DOMFileSystemSync as V8DOMFileSystemSync 541 | # from .v8_css_layer_statement_rule import CSSLayerStatementRule as V8CSSLayerStatementRule 542 | # from .v8_abstract_range import AbstractRange as V8AbstractRange 543 | # from .v8_svg_animated_preserve_aspect_ratio import SVGAnimatedPreserveAspectRatio as V8SVGAnimatedPreserveAspectRatio 544 | # from .v8_file_entry_sync import FileEntrySync as V8FileEntrySync 545 | # from .v8_text_encoder_stream import TextEncoderStream as V8TextEncoderStream 546 | # from .v8_svg_fe_func_b_element import SVGFEFuncBElement as V8SVGFEFuncBElement 547 | # from .v8_svg_animate_motion_element import SVGAnimateMotionElement as V8SVGAnimateMotionElement 548 | # from .v8_hid_connection_event import HIDConnectionEvent as V8HIDConnectionEvent 549 | # from .v8_named_node_map import NamedNodeMap as V8NamedNodeMap 550 | # from .v8_rtc_ice_candidate import RTCIceCandidate as V8RTCIceCandidate 551 | # from .v8_screen_detailed import ScreenDetailed as V8ScreenDetailed 552 | # from .v8_webgl_rendering_context import WebGLRenderingContext as V8WebGLRenderingContext 553 | # from .v8_font_face import FontFace as V8FontFace 554 | # from .v8_vtt_region import VTTRegion as V8VTTRegion 555 | # from .v8_idb_object_store import IDBObjectStore as V8IDBObjectStore 556 | # from .v8_crop_target import CropTarget as V8CropTarget 557 | # from .v8_gpu_command_buffer import GPUCommandBuffer as V8GPUCommandBuffer 558 | # from .v8_html_script_element import HTMLScriptElement as V8HTMLScriptElement 559 | # from .v8_wave_shaper_node import WaveShaperNode as V8WaveShaperNode 560 | # from .v8_accessible_node import AccessibleNode as V8AccessibleNode 561 | # from .v8_oes_fbo_render_mipmap import OESFboRenderMipmap as V8OESFboRenderMipmap 562 | # from .v8_page_reveal_event import PageRevealEvent as V8PageRevealEvent 563 | # from .v8_element import Element as V8Element 564 | # from .v8_bluetooth import Bluetooth as V8Bluetooth 565 | # from .v8_webgl_lose_context import WebGLLoseContext as V8WebGLLoseContext 566 | # from .v8_gpu_compilation_info import GPUCompilationInfo as V8GPUCompilationInfo 567 | # from .v8_html_table_caption_element import HTMLTableCaptionElement as V8HTMLTableCaptionElement 568 | # from .v8_dom_rect import DOMRect as V8DOMRect 569 | # from .v8_svg_mask_element import SVGMaskElement as V8SVGMaskElement 570 | # from .v8_audio_worklet_global_scope import AudioWorkletGlobalScope as V8AudioWorkletGlobalScope 571 | # from .v8_visibility_state_entry import VisibilityStateEntry as V8VisibilityStateEntry 572 | # from .v8_svg_polygon_element import SVGPolygonElement as V8SVGPolygonElement 573 | # from .v8_speech_recognition import SpeechRecognition as V8SpeechRecognition 574 | # from .v8_gpu_error import GPUError as V8GPUError 575 | # from .v8_html_meter_element import HTMLMeterElement as V8HTMLMeterElement 576 | # from .v8_test_report_body import TestReportBody as V8TestReportBody 577 | # from .v8_text_decoder import TextDecoder as V8TextDecoder 578 | # from .v8_clipboard_item import ClipboardItem as V8ClipboardItem 579 | # from .v8_html_form_controls_collection import HTMLFormControlsCollection as V8HTMLFormControlsCollection 580 | # from .v8_background_fetch_registration import BackgroundFetchRegistration as V8BackgroundFetchRegistration 581 | # from .v8_node_list import NodeList as V8NodeList 582 | # from .v8_worker_navigator import WorkerNavigator as V8WorkerNavigator 583 | # from .v8_css_view_transition_rule import CSSViewTransitionRule as V8CSSViewTransitionRule 584 | # from .v8_audio_buffer import AudioBuffer as V8AudioBuffer 585 | # from .v8_html_dialog_element import HTMLDialogElement as V8HTMLDialogElement 586 | # from .v8_html_hr_element import HTMLHRElement as V8HTMLHRElement 587 | # from .v8_timestamp_trigger import TimestampTrigger as V8TimestampTrigger 588 | # from .v8_layout_shift_attribution import LayoutShiftAttribution as V8LayoutShiftAttribution 589 | # from .v8_style_sheet_list import StyleSheetList as V8StyleSheetList 590 | # from .v8_audio_listener import AudioListener as V8AudioListener 591 | # from .v8_record_test import RecordTest as V8RecordTest 592 | # from .v8_svg_use_element import SVGUseElement as V8SVGUseElement 593 | # from .v8_xr_system import XRSystem as V8XRSystem 594 | # from .v8_xr_webgl_binding import XRWebGLBinding as V8XRWebGLBinding 595 | # from .v8_wheel_event import WheelEvent as V8WheelEvent 596 | # from .v8_hid_input_report_event import HIDInputReportEvent as V8HIDInputReportEvent 597 | # from .v8_midi_input_map import MIDIInputMap as V8MIDIInputMap 598 | # from .v8_ext_depth_clamp import EXTDepthClamp as V8EXTDepthClamp 599 | # from .v8_svg_circle_element import SVGCircleElement as V8SVGCircleElement 600 | # from .v8_svg_fe_tile_element import SVGFETileElement as V8SVGFETileElement 601 | # from .v8_html_table_cell_element import HTMLTableCellElement as V8HTMLTableCellElement 602 | # from .v8_push_subscription_options import PushSubscriptionOptions as V8PushSubscriptionOptions 603 | # from .v8_idb_key_range import IDBKeyRange as V8IDBKeyRange 604 | # from .v8_html_option_element import HTMLOptionElement as V8HTMLOptionElement 605 | # from .v8_svg_gradient_element import SVGGradientElement as V8SVGGradientElement 606 | # from .v8_svg_symbol_element import SVGSymbolElement as V8SVGSymbolElement 607 | # from .v8_gpu_pipeline_error import GPUPipelineError as V8GPUPipelineError 608 | # from .v8_html_progress_element import HTMLProgressElement as V8HTMLProgressElement 609 | # from .v8_internal_settings import InternalSettings as V8InternalSettings 610 | # from .v8_webgl_debug_renderer_info import WebGLDebugRendererInfo as V8WebGLDebugRendererInfo 611 | # from .v8_html_all_collection import HTMLAllCollection as V8HTMLAllCollection 612 | # from .v8_preference_manager import PreferenceManager as V8PreferenceManager 613 | # from .v8_html_paragraph_element import HTMLParagraphElement as V8HTMLParagraphElement 614 | # from .v8_rtc_encoded_video_frame import RTCEncodedVideoFrame as V8RTCEncodedVideoFrame 615 | # from .v8_not_restored_reason_details import NotRestoredReasonDetails as V8NotRestoredReasonDetails 616 | # from .v8_sql_transaction import SQLTransaction as V8SQLTransaction 617 | # from .v8_sync_iterator_headers import SyncIterator_Headers as V8SyncIterator_Headers 618 | # from .v8_rtc_track_event import RTCTrackEvent as V8RTCTrackEvent 619 | # from .v8_async_iterator_file_system_directory_handle import AsyncIterator_FileSystemDirectoryHandle as V8AsyncIterator_FileSystemDirectoryHandle 620 | # from .v8_media_source import MediaSource as V8MediaSource 621 | # from .v8_midi_output_map import MIDIOutputMap as V8MIDIOutputMap 622 | # from .v8_css_math_min import CSSMathMin as V8CSSMathMin 623 | # from .v8_html_audio_element import HTMLAudioElement as V8HTMLAudioElement 624 | # from .v8_content_index_event import ContentIndexEvent as V8ContentIndexEvent 625 | # from .v8_ext_texture_compression_rgtc import EXTTextureCompressionRGTC as V8EXTTextureCompressionRGTC 626 | # from .v8_css_image_value import CSSImageValue as V8CSSImageValue 627 | # from .v8_navigation_history_entry import NavigationHistoryEntry as V8NavigationHistoryEntry 628 | # from .v8_animation import Animation as V8Animation 629 | # from .v8_request import Request as V8Request 630 | # from .v8_entry_sync import EntrySync as V8EntrySync 631 | # from .v8_plugin_array import PluginArray as V8PluginArray 632 | # from .v8_web_printer import WebPrinter as V8WebPrinter 633 | # from .v8_clients import Clients as V8Clients 634 | # from .v8_error_event import ErrorEvent as V8ErrorEvent 635 | # from .v8_underlying_sink_base import UnderlyingSinkBase as V8UnderlyingSinkBase 636 | # from .v8_mouse_event import MouseEvent as V8MouseEvent 637 | # from .v8_idb_cursor import IDBCursor as V8IDBCursor 638 | # from .v8_css_container_rule import CSSContainerRule as V8CSSContainerRule 639 | # from .v8_font_face_set import FontFaceSet as V8FontFaceSet 640 | # from .v8_ext_render_snorm import EXTRenderSnorm as V8EXTRenderSnorm 641 | # from .v8_xr_projection_layer import XRProjectionLayer as V8XRProjectionLayer 642 | # from .v8_css_supports_rule import CSSSupportsRule as V8CSSSupportsRule 643 | # from .v8_audio_destination_node import AudioDestinationNode as V8AudioDestinationNode 644 | # from .v8_virtual_keyboard import VirtualKeyboard as V8VirtualKeyboard 645 | # from .v8_html_span_element import HTMLSpanElement as V8HTMLSpanElement 646 | # from .v8_text_update_event import TextUpdateEvent as V8TextUpdateEvent 647 | # from .v8_usb_configuration import USBConfiguration as V8USBConfiguration 648 | # from .v8_directive import Directive as V8Directive 649 | # from .v8_document_policy_violation_report_body import DocumentPolicyViolationReportBody as V8DocumentPolicyViolationReportBody 650 | # from .v8_oes_texture_float import OESTextureFloat as V8OESTextureFloat 651 | # from .v8_svg_length_list import SVGLengthList as V8SVGLengthList 652 | # from .v8_deprecation_report_body import DeprecationReportBody as V8DeprecationReportBody 653 | # from .v8_css_position_try_descriptors import CSSPositionTryDescriptors as V8CSSPositionTryDescriptors 654 | # from .v8_speech_synthesis_event import SpeechSynthesisEvent as V8SpeechSynthesisEvent 655 | # from .v8_mojo_interface_request_event import MojoInterfaceRequestEvent as V8MojoInterfaceRequestEvent 656 | # from .v8_compression_stream import CompressionStream as V8CompressionStream 657 | # from .v8_css_style_rule import CSSStyleRule as V8CSSStyleRule 658 | # from .v8_layout_fragment import LayoutFragment as V8LayoutFragment 659 | # from .v8_webgl_object import WebGLObject as V8WebGLObject 660 | # from .v8_svg_fe_drop_shadow_element import SVGFEDropShadowElement as V8SVGFEDropShadowElement 661 | # from .v8_html_li_element import HTMLLIElement as V8HTMLLIElement 662 | # from .v8_file_reader import FileReader as V8FileReader 663 | # from .v8_ml_model_loader import MLModelLoader as V8MLModelLoader 664 | # from .v8_css_keyframe_rule import CSSKeyframeRule as V8CSSKeyframeRule 665 | # from .v8_font_face_set_load_event import FontFaceSetLoadEvent as V8FontFaceSetLoadEvent 666 | # from .v8_keyboard import Keyboard as V8Keyboard 667 | # from .v8_media_query_list import MediaQueryList as V8MediaQueryList 668 | # from .v8_html_field_set_element import HTMLFieldSetElement as V8HTMLFieldSetElement 669 | # from .v8_scroll_timeline import ScrollTimeline as V8ScrollTimeline 670 | # from .v8_xr_transient_input_hit_test_source import XRTransientInputHitTestSource as V8XRTransientInputHitTestSource 671 | # from .v8_trusted_type_policy import TrustedTypePolicy as V8TrustedTypePolicy 672 | # from .v8_gpu_map_mode import GPUMapMode as V8GPUMapMode 673 | # from .v8_storage_bucket import StorageBucket as V8StorageBucket 674 | # from .v8_gpu_supported_limits import GPUSupportedLimits as V8GPUSupportedLimits 675 | # from .v8_xr_render_state import XRRenderState as V8XRRenderState 676 | # from .v8_speech_recognition_error_event import SpeechRecognitionErrorEvent as V8SpeechRecognitionErrorEvent 677 | # from .v8_css_rule_list import CSSRuleList as V8CSSRuleList 678 | # from .v8_gpu_render_bundle_encoder import GPURenderBundleEncoder as V8GPURenderBundleEncoder 679 | # from .v8_pointer_event import PointerEvent as V8PointerEvent 680 | # from .v8_audio_param import AudioParam as V8AudioParam 681 | # from .v8_svg_path_element import SVGPathElement as V8SVGPathElement 682 | # from .v8_svg_fe_image_element import SVGFEImageElement as V8SVGFEImageElement 683 | # from .v8_window_controls_overlay import WindowControlsOverlay as V8WindowControlsOverlay 684 | # from .v8_ext_blend_min_max import EXTBlendMinMax as V8EXTBlendMinMax 685 | # from .v8_performance_server_timing import PerformanceServerTiming as V8PerformanceServerTiming 686 | # from .v8_rtc_encoded_audio_frame import RTCEncodedAudioFrame as V8RTCEncodedAudioFrame 687 | # from .v8_progress_event import ProgressEvent as V8ProgressEvent 688 | # from .v8_media_stream_track_audio_stats import MediaStreamTrackAudioStats as V8MediaStreamTrackAudioStats 689 | # from .v8_svg_text_positioning_element import SVGTextPositioningElement as V8SVGTextPositioningElement 690 | # from .v8_task_signal import TaskSignal as V8TaskSignal 691 | # from .v8_svg_animated_number import SVGAnimatedNumber as V8SVGAnimatedNumber 692 | # from .v8_file_entry import FileEntry as V8FileEntry 693 | # from .v8_ext_texture_norm_16 import EXTTextureNorm16 as V8EXTTextureNorm16 694 | # from .v8_contacts_manager import ContactsManager as V8ContactsManager 695 | # from .v8_html_embed_element import HTMLEmbedElement as V8HTMLEmbedElement 696 | # from .v8_input_device_capabilities import InputDeviceCapabilities as V8InputDeviceCapabilities 697 | # from .v8_svg_fe_displacement_map_element import SVGFEDisplacementMapElement as V8SVGFEDisplacementMapElement 698 | # from .v8_back_forward_cache_restoration import BackForwardCacheRestoration as V8BackForwardCacheRestoration 699 | # from .v8_svg_graphics_element import SVGGraphicsElement as V8SVGGraphicsElement 700 | # from .v8_speech_grammar import SpeechGrammar as V8SpeechGrammar 701 | # from .v8_pop_state_event import PopStateEvent as V8PopStateEvent 702 | # from .v8_payment_request import PaymentRequest as V8PaymentRequest 703 | # from .v8_network_information import NetworkInformation as V8NetworkInformation 704 | # from .v8_internals_ukm_recorder import InternalsUkmRecorder as V8InternalsUkmRecorder 705 | # from .v8_svg_pattern_element import SVGPatternElement as V8SVGPatternElement 706 | # from .v8_svg_rect_element import SVGRectElement as V8SVGRectElement 707 | # from .v8_device_motion_event_acceleration import DeviceMotionEventAcceleration as V8DeviceMotionEventAcceleration 708 | # from .v8_barcode_detector import BarcodeDetector as V8BarcodeDetector 709 | # from .v8_dom_matrix_read_only import DOMMatrixReadOnly as V8DOMMatrixReadOnly 710 | # from .v8_sync_iterator_gpu_supported_features import SyncIterator_GPUSupportedFeatures as V8SyncIterator_GPUSupportedFeatures 711 | # from .v8_dom_rect_list import DOMRectList as V8DOMRectList 712 | # from .v8_webgl_context_event import WebGLContextEvent as V8WebGLContextEvent 713 | # from .v8_accessible_node_list import AccessibleNodeList as V8AccessibleNodeList 714 | # from .v8_svg_fe_composite_element import SVGFECompositeElement as V8SVGFECompositeElement 715 | # from .v8_idb_transaction import IDBTransaction as V8IDBTransaction 716 | # from .v8_fetch_later_result import FetchLaterResult as V8FetchLaterResult 717 | # from .v8_css_scale import CSSScale as V8CSSScale 718 | # from .v8_sync_iterator_url_search_params import SyncIterator_URLSearchParams as V8SyncIterator_URLSearchParams 719 | # from .v8_performance_script_timing import PerformanceScriptTiming as V8PerformanceScriptTiming 720 | # from .v8_xr_webgl_layer import XRWebGLLayer as V8XRWebGLLayer 721 | # from .v8_ovr_multiview_2 import OVRMultiview2 as V8OVRMultiview2 722 | # from .v8_sync_iterator_rtc_stats_report import SyncIterator_RTCStatsReport as V8SyncIterator_RTCStatsReport 723 | # from .v8_oes_standard_derivatives import OESStandardDerivatives as V8OESStandardDerivatives 724 | # from .v8_gpu_compute_pipeline import GPUComputePipeline as V8GPUComputePipeline 725 | # from .v8_offscreen_canvas_rendering_context_2d import OffscreenCanvasRenderingContext2D as V8OffscreenCanvasRenderingContext2D 726 | # from .v8_periodic_wave import PeriodicWave as V8PeriodicWave 727 | # from .v8_canvas_rendering_context_2d import CanvasRenderingContext2D as V8CanvasRenderingContext2D 728 | # from .v8_storage import Storage as V8Storage 729 | # from .v8_browser_capture_media_stream_track import BrowserCaptureMediaStreamTrack as V8BrowserCaptureMediaStreamTrack 730 | # from .v8_speech_recognition_result_list import SpeechRecognitionResultList as V8SpeechRecognitionResultList 731 | # from .v8_dom_implementation import DOMImplementation as V8DOMImplementation 732 | # from .v8_abort_payment_event import AbortPaymentEvent as V8AbortPaymentEvent 733 | # from .v8_internal_runtime_flags import InternalRuntimeFlags as V8InternalRuntimeFlags 734 | # from .v8_css_starting_style_rule import CSSStartingStyleRule as V8CSSStartingStyleRule 735 | # from .v8_shadow_root import ShadowRoot as V8ShadowRoot 736 | # from .v8_html_document import HTMLDocument as V8HTMLDocument 737 | # from .v8_xr_input_source import XRInputSource as V8XRInputSource 738 | # from .v8_css_font_feature_values_map import CSSFontFeatureValuesMap as V8CSSFontFeatureValuesMap 739 | # from .v8_lock import Lock as V8Lock 740 | # from .v8_svg_string_list import SVGStringList as V8SVGStringList 741 | # from .v8_dynamics_compressor_node import DynamicsCompressorNode as V8DynamicsCompressorNode 742 | # from .v8_html_media_element import HTMLMediaElement as V8HTMLMediaElement 743 | # from .v8_identity_provider import IdentityProvider as V8IdentityProvider 744 | # from .v8_ml import ML as V8ML 745 | # from .v8_css_skew_x import CSSSkewX as V8CSSSkewX 746 | # from .v8_internal_settings_generated import InternalSettingsGenerated as V8InternalSettingsGenerated 747 | # from .v8_html_data_list_element import HTMLDataListElement as V8HTMLDataListElement 748 | # from .v8_dictionary_test import DictionaryTest as V8DictionaryTest 749 | # from .v8_content_index import ContentIndex as V8ContentIndex 750 | # from .v8_mutation_event import MutationEvent as V8MutationEvent 751 | # from .v8_html_head_element import HTMLHeadElement as V8HTMLHeadElement 752 | # from .v8_cookie_store import CookieStore as V8CookieStore 753 | # from .v8_usb_endpoint import USBEndpoint as V8USBEndpoint 754 | # from .v8_count_queuing_strategy import CountQueuingStrategy as V8CountQueuingStrategy 755 | # from .v8_speech_synthesis_utterance import SpeechSynthesisUtterance as V8SpeechSynthesisUtterance 756 | # from .v8_intersection_observer import IntersectionObserver as V8IntersectionObserver 757 | # from .v8_idb_version_change_event import IDBVersionChangeEvent as V8IDBVersionChangeEvent 758 | # from .v8_attr import Attr as V8Attr 759 | # from .v8_svg_linear_gradient_element import SVGLinearGradientElement as V8SVGLinearGradientElement 760 | # from .v8_webgl_color_buffer_float import WebGLColorBufferFloat as V8WebGLColorBufferFloat 761 | # from .v8_mime_type import MimeType as V8MimeType 762 | # from .v8_navigation import Navigation as V8Navigation 763 | # from .v8_webgl_draw_buffers import WebGLDrawBuffers as V8WebGLDrawBuffers 764 | # from .v8_media_session import MediaSession as V8MediaSession 765 | # from .v8_sync_iterator_style_property_map_read_only import SyncIterator_StylePropertyMapReadOnly as V8SyncIterator_StylePropertyMapReadOnly 766 | # from .v8_media_stream_track import MediaStreamTrack as V8MediaStreamTrack 767 | # from .v8_writable_stream import WritableStream as V8WritableStream 768 | # from .v8_before_install_prompt_event import BeforeInstallPromptEvent as V8BeforeInstallPromptEvent 769 | # from .v8_remote_playback import RemotePlayback as V8RemotePlayback 770 | # from .v8_rtc_data_channel import RTCDataChannel as V8RTCDataChannel 771 | # from .v8_css_property_rule import CSSPropertyRule as V8CSSPropertyRule 772 | # from .v8_event import Event as V8Event 773 | # from .v8_shared_storage_worklet import SharedStorageWorklet as V8SharedStorageWorklet 774 | # from .v8_digital_credential import DigitalCredential as V8DigitalCredential 775 | # from .v8_document import Document as V8Document 776 | # from .v8_webgl_timer_query_ext import WebGLTimerQueryEXT as V8WebGLTimerQueryEXT 777 | # from .v8_abort_signal import AbortSignal as V8AbortSignal 778 | # from .v8_xr_viewer_pose import XRViewerPose as V8XRViewerPose 779 | # from .v8_blob_event import BlobEvent as V8BlobEvent 780 | # from .v8_html_body_element import HTMLBodyElement as V8HTMLBodyElement 781 | # from .v8_largest_contentful_paint import LargestContentfulPaint as V8LargestContentfulPaint 782 | # from .v8_wake_lock_sentinel import WakeLockSentinel as V8WakeLockSentinel 783 | # from .v8_text_detector import TextDetector as V8TextDetector 784 | # from .v8_html_select_element import HTMLSelectElement as V8HTMLSelectElement 785 | # from .v8_launch_params import LaunchParams as V8LaunchParams 786 | # from .v8_identity_credential_error import IdentityCredentialError as V8IdentityCredentialError 787 | # from .v8_xr_reference_space import XRReferenceSpace as V8XRReferenceSpace 788 | # from .v8_ads import Ads as V8Ads 789 | # from .v8_sequence_test import SequenceTest as V8SequenceTest 790 | # from .v8_node_part import NodePart as V8NodePart 791 | # from .v8_canvas_gradient import CanvasGradient as V8CanvasGradient 792 | # from .v8_html_table_col_element import HTMLTableColElement as V8HTMLTableColElement 793 | # from .v8_screen import Screen as V8Screen 794 | # from .v8_xr_sub_image import XRSubImage as V8XRSubImage 795 | # from .v8_html_details_element import HTMLDetailsElement as V8HTMLDetailsElement 796 | # from .v8_usb_isochronous_out_transfer_result import USBIsochronousOutTransferResult as V8USBIsochronousOutTransferResult 797 | # from .v8_storage_event import StorageEvent as V8StorageEvent 798 | # from .v8_idle_deadline import IdleDeadline as V8IdleDeadline 799 | # from .v8_oes_texture_half_float import OESTextureHalfFloat as V8OESTextureHalfFloat 800 | # from .v8_sync_event import SyncEvent as V8SyncEvent 801 | # from .v8_ext_color_buffer_float import EXTColorBufferFloat as V8EXTColorBufferFloat 802 | # from .v8_document_type import DocumentType as V8DocumentType 803 | # from .v8_css import CSS as V8CSS 804 | # from .v8_css_rotate import CSSRotate as V8CSSRotate 805 | # from .v8_css_style_sheet import CSSStyleSheet as V8CSSStyleSheet 806 | # from .v8_oes_texture_half_float_linear import OESTextureHalfFloatLinear as V8OESTextureHalfFloatLinear 807 | # from .v8_custom_event import CustomEvent as V8CustomEvent 808 | # from .v8_highlight_registry import HighlightRegistry as V8HighlightRegistry 809 | # from .v8_navigator_managed_data import NavigatorManagedData as V8NavigatorManagedData 810 | # from .v8_locked_mode import LockedMode as V8LockedMode 811 | # from .v8_sync_iterator_keyboard_layout_map import SyncIterator_KeyboardLayoutMap as V8SyncIterator_KeyboardLayoutMap 812 | # from .v8_coop_access_violation_report_body import CoopAccessViolationReportBody as V8CoopAccessViolationReportBody 813 | # from .v8_dom_token_list import DOMTokenList as V8DOMTokenList 814 | # from .v8_webgl_transform_feedback import WebGLTransformFeedback as V8WebGLTransformFeedback 815 | # from .v8_svg_fe_func_r_element import SVGFEFuncRElement as V8SVGFEFuncRElement 816 | # from .v8_extendable_message_event import ExtendableMessageEvent as V8ExtendableMessageEvent 817 | # from .v8_mojo_interface_interceptor import MojoInterfaceInterceptor as V8MojoInterfaceInterceptor 818 | # from .v8_private_attribution import PrivateAttribution as V8PrivateAttribution 819 | # from .v8_report import Report as V8Report 820 | # from .v8_image_bitmap_rendering_context import ImageBitmapRenderingContext as V8ImageBitmapRenderingContext 821 | # from .v8_xr_plane import XRPlane as V8XRPlane 822 | # from .v8_private_aggregation import PrivateAggregation as V8PrivateAggregation 823 | # from .v8_gpu_queue import GPUQueue as V8GPUQueue 824 | # from .v8_readable_byte_stream_controller import ReadableByteStreamController as V8ReadableByteStreamController 825 | # from .v8_svg_metadata_element import SVGMetadataElement as V8SVGMetadataElement 826 | # from .v8_ndef_reader import NDEFReader as V8NDEFReader 827 | # from .v8_usb_isochronous_in_transfer_packet import USBIsochronousInTransferPacket as V8USBIsochronousInTransferPacket 828 | # from .v8_touch_event import TouchEvent as V8TouchEvent 829 | # from .v8_gpu_bind_group_layout import GPUBindGroupLayout as V8GPUBindGroupLayout 830 | # from .v8_css_font_feature_values_rule import CSSFontFeatureValuesRule as V8CSSFontFeatureValuesRule 831 | # from .v8_html_quote_element import HTMLQuoteElement as V8HTMLQuoteElement 832 | # from .v8_css_position_value import CSSPositionValue as V8CSSPositionValue 833 | # from .v8_form_data import FormData as V8FormData 834 | # from .v8_text_format_update_event import TextFormatUpdateEvent as V8TextFormatUpdateEvent 835 | # from .v8_stereo_panner_node import StereoPannerNode as V8StereoPannerNode 836 | # from .v8_dom_quad import DOMQuad as V8DOMQuad 837 | # from .v8_svg_foreign_object_element import SVGForeignObjectElement as V8SVGForeignObjectElement 838 | # from .v8_comment import Comment as V8Comment 839 | # from .v8_web_print_job import WebPrintJob as V8WebPrintJob 840 | # from .v8_svg_image_element import SVGImageElement as V8SVGImageElement 841 | # from .v8_rtc_dtls_transport import RTCDtlsTransport as V8RTCDtlsTransport 842 | # from .v8_ml_activation import MLActivation as V8MLActivation 843 | # from .v8_html_slot_element import HTMLSlotElement as V8HTMLSlotElement 844 | # from .v8_event_source import EventSource as V8EventSource 845 | # from .v8_child_node_part import ChildNodePart as V8ChildNodePart 846 | # from .v8_ext_disjoint_timer_query import EXTDisjointTimerQuery as V8EXTDisjointTimerQuery 847 | # from .v8_text_track import TextTrack as V8TextTrack 848 | # from .v8_xr_space import XRSpace as V8XRSpace 849 | # from .v8_css_keyword_value import CSSKeywordValue as V8CSSKeywordValue 850 | # from .v8_xr_depth_information import XRDepthInformation as V8XRDepthInformation 851 | # from .v8_byte_length_queuing_strategy import ByteLengthQueuingStrategy as V8ByteLengthQueuingStrategy 852 | # from .v8_css_skew_y import CSSSkewY as V8CSSSkewY 853 | # from .v8_performance_navigation import PerformanceNavigation as V8PerformanceNavigation 854 | # from .v8_html_fenced_frame_element import HTMLFencedFrameElement as V8HTMLFencedFrameElement 855 | # from .v8_launch_queue import LaunchQueue as V8LaunchQueue 856 | # from .v8_async_iterator_shared_storage import AsyncIterator_SharedStorage as V8AsyncIterator_SharedStorage 857 | # from .v8_bluetooth_uuid import BluetoothUUID as V8BluetoothUUID 858 | # from .v8_window_client import WindowClient as V8WindowClient 859 | # from .v8_svg_stop_element import SVGStopElement as V8SVGStopElement 860 | # from .v8_css_transform_component import CSSTransformComponent as V8CSSTransformComponent 861 | # from .v8_sql_error import SQLError as V8SQLError 862 | # from .v8_readable_stream import ReadableStream as V8ReadableStream 863 | # from .v8_xml_http_request import XMLHttpRequest as V8XMLHttpRequest 864 | # from .v8_close_event import CloseEvent as V8CloseEvent 865 | # from .v8_async_iterator_readable_stream import AsyncIterator_ReadableStream as V8AsyncIterator_ReadableStream 866 | # from .v8_html_table_row_element import HTMLTableRowElement as V8HTMLTableRowElement 867 | # from .v8_transform_stream_default_controller import TransformStreamDefaultController as V8TransformStreamDefaultController 868 | # from .v8_text_decoder_stream import TextDecoderStream as V8TextDecoderStream 869 | # from .v8_external import External as V8External 870 | # from .v8_node_filter import NodeFilter as V8NodeFilter 871 | # from .v8_ml_model import MLModel as V8MLModel 872 | # from .v8_audio_processing_event import AudioProcessingEvent as V8AudioProcessingEvent 873 | # from .v8_media_key_session import MediaKeySession as V8MediaKeySession 874 | # from .v8_input_device_info import InputDeviceInfo as V8InputDeviceInfo 875 | # from .v8_ambient_light_sensor import AmbientLightSensor as V8AmbientLightSensor 876 | # from .v8_html_source_element import HTMLSourceElement as V8HTMLSourceElement 877 | # from .v8_animation_playback_event import AnimationPlaybackEvent as V8AnimationPlaybackEvent 878 | # from .v8_oes_texture_float_linear import OESTextureFloatLinear as V8OESTextureFloatLinear 879 | # from .v8_sync_iterator_xr_plane_set import SyncIterator_XRPlaneSet as V8SyncIterator_XRPlaneSet 880 | # from .v8_svg_point_list import SVGPointList as V8SVGPointList 881 | # from .v8_writable_stream_default_writer import WritableStreamDefaultWriter as V8WritableStreamDefaultWriter 882 | # from .v8_oes_sample_variables import OESSampleVariables as V8OESSampleVariables 883 | # from .v8_profiler import Profiler as V8Profiler 884 | # from .v8_hid_device import HIDDevice as V8HIDDevice 885 | # from .v8_location import Location as V8Location 886 | # from .v8_offline_audio_completion_event import OfflineAudioCompletionEvent as V8OfflineAudioCompletionEvent 887 | # from .v8_midi_connection_event import MIDIConnectionEvent as V8MIDIConnectionEvent 888 | # from .v8_xr_hit_test_source import XRHitTestSource as V8XRHitTestSource 889 | # from .v8_svg_animated_enumeration import SVGAnimatedEnumeration as V8SVGAnimatedEnumeration 890 | # from .v8_background_fetch_update_ui_event import BackgroundFetchUpdateUIEvent as V8BackgroundFetchUpdateUIEvent 891 | # from .v8_css_rgb import CSSRGB as V8CSSRGB 892 | # from .v8_service_worker_global_scope import ServiceWorkerGlobalScope as V8ServiceWorkerGlobalScope 893 | # from .v8_websocket_stream import WebSocketStream as V8WebSocketStream 894 | # from .v8_gpu_shader_stage import GPUShaderStage as V8GPUShaderStage 895 | # from .v8_gpu_memory_heap_info import GPUMemoryHeapInfo as V8GPUMemoryHeapInfo 896 | # from .v8_broadcast_channel import BroadcastChannel as V8BroadcastChannel 897 | # from .v8_svg_filter_element import SVGFilterElement as V8SVGFilterElement 898 | # from .v8_usb_isochronous_in_transfer_result import USBIsochronousInTransferResult as V8USBIsochronousInTransferResult 899 | # from .v8_media_stream_audio_destination_node import MediaStreamAudioDestinationNode as V8MediaStreamAudioDestinationNode 900 | # from .v8_storage_access_handle import StorageAccessHandle as V8StorageAccessHandle 901 | # from .v8_xr_frame import XRFrame as V8XRFrame 902 | # from .v8_gyroscope import Gyroscope as V8Gyroscope 903 | # from .v8_svg_transform import SVGTransform as V8SVGTransform 904 | # from .v8_idb_request import IDBRequest as V8IDBRequest 905 | # from .v8_audio_worklet_node import AudioWorkletNode as V8AudioWorkletNode 906 | # from .v8_touch_list import TouchList as V8TouchList 907 | # from .v8_xr_joint_space import XRJointSpace as V8XRJointSpace 908 | # from .v8_gpu_texture_usage import GPUTextureUsage as V8GPUTextureUsage 909 | # from .v8_svg_animation_element import SVGAnimationElement as V8SVGAnimationElement 910 | # from .v8_screen_capture_media_stream_track import ScreenCaptureMediaStreamTrack as V8ScreenCaptureMediaStreamTrack 911 | # from .v8_input_event import InputEvent as V8InputEvent 912 | # from .v8_rtc_data_channel_event import RTCDataChannelEvent as V8RTCDataChannelEvent 913 | # from .v8_window_controls_overlay_geometry_change_event import WindowControlsOverlayGeometryChangeEvent as V8WindowControlsOverlayGeometryChangeEvent 914 | # from .v8_navigation_transition import NavigationTransition as V8NavigationTransition 915 | # from .v8_bar_prop import BarProp as V8BarProp 916 | # from .v8_iir_filter_node import IIRFilterNode as V8IIRFilterNode 917 | # from .v8_xr_bounded_reference_space import XRBoundedReferenceSpace as V8XRBoundedReferenceSpace 918 | # from .v8_svg_fe_func_g_element import SVGFEFuncGElement as V8SVGFEFuncGElement 919 | # from .v8_animation_effect import AnimationEffect as V8AnimationEffect 920 | # from .v8_navigation_current_entry_change_event import NavigationCurrentEntryChangeEvent as V8NavigationCurrentEntryChangeEvent 921 | # from .v8_html_directory_element import HTMLDirectoryElement as V8HTMLDirectoryElement 922 | # from .v8_client import Client as V8Client 923 | # from .v8_processing_instruction import ProcessingInstruction as V8ProcessingInstruction 924 | # from .v8_file_writer_sync import FileWriterSync as V8FileWriterSync 925 | # from .v8_ml_graph_builder import MLGraphBuilder as V8MLGraphBuilder 926 | # from .v8_webgl_sampler import WebGLSampler as V8WebGLSampler 927 | # from .v8_web_printing_manager import WebPrintingManager as V8WebPrintingManager 928 | # from .v8_xr_layer import XRLayer as V8XRLayer 929 | # from .v8_html_pre_element import HTMLPreElement as V8HTMLPreElement 930 | # from .v8_svg_clip_path_element import SVGClipPathElement as V8SVGClipPathElement 931 | # from .v8_push_subscription import PushSubscription as V8PushSubscription 932 | # from .v8_formatted_text import FormattedText as V8FormattedText 933 | # from .v8_paint_size import PaintSize as V8PaintSize 934 | # from .v8_gpu_canvas_context import GPUCanvasContext as V8GPUCanvasContext 935 | # from .v8_presentation_receiver import PresentationReceiver as V8PresentationReceiver 936 | # from .v8_geolocation_position_error import GeolocationPositionError as V8GeolocationPositionError 937 | # from .v8_xr_camera import XRCamera as V8XRCamera 938 | # from .v8_audio_worklet import AudioWorklet as V8AudioWorklet 939 | # from .v8_worklet_animation_effect import WorkletAnimationEffect as V8WorkletAnimationEffect 940 | # from .v8_html_permission_element import HTMLPermissionElement as V8HTMLPermissionElement 941 | # from .v8_worker_global_scope import WorkerGlobalScope as V8WorkerGlobalScope 942 | # from .v8_task_controller import TaskController as V8TaskController 943 | # from .v8_sync_iterator_bluetooth_manufacturer_data_map import SyncIterator_BluetoothManufacturerDataMap as V8SyncIterator_BluetoothManufacturerDataMap 944 | # from .v8_sync_iterator_xr_anchor_set import SyncIterator_XRAnchorSet as V8SyncIterator_XRAnchorSet 945 | # from .v8_range import Range as V8Range 946 | # from .v8_webgl_depth_texture import WebGLDepthTexture as V8WebGLDepthTexture 947 | # from .v8_css_counter_style_rule import CSSCounterStyleRule as V8CSSCounterStyleRule 948 | # from .v8_union_types_test import UnionTypesTest as V8UnionTypesTest 949 | # from .v8_media_metadata import MediaMetadata as V8MediaMetadata 950 | # from .v8_svg_mpath_element import SVGMPathElement as V8SVGMPathElement 951 | # from .v8_css_animation import CSSAnimation as V8CSSAnimation 952 | # from .v8_bluetooth_le_scan import BluetoothLEScan as V8BluetoothLEScan 953 | # from .v8_event_counts import EventCounts as V8EventCounts 954 | # from .v8_midi_message_event import MIDIMessageEvent as V8MIDIMessageEvent 955 | # from .v8_audio_scheduled_source_node import AudioScheduledSourceNode as V8AudioScheduledSourceNode 956 | # from .v8_track_default import TrackDefault as V8TrackDefault 957 | # from .v8_webgl_compressed_texture_astc import WebGLCompressedTextureASTC as V8WebGLCompressedTextureASTC 958 | # from .v8_trusted_html import TrustedHTML as V8TrustedHTML 959 | # from .v8_delay_node import DelayNode as V8DelayNode 960 | # from .v8_svg_animated_boolean import SVGAnimatedBoolean as V8SVGAnimatedBoolean 961 | # from .v8_svg_fe_func_a_element import SVGFEFuncAElement as V8SVGFEFuncAElement 962 | # from .v8_install_event import InstallEvent as V8InstallEvent 963 | # from .v8_svg_animated_angle import SVGAnimatedAngle as V8SVGAnimatedAngle 964 | # from .v8_audio_encoder import AudioEncoder as V8AudioEncoder 965 | # from .v8_gamepad_haptic_actuator import GamepadHapticActuator as V8GamepadHapticActuator 966 | # from .v8_svg_fe_merge_node_element import SVGFEMergeNodeElement as V8SVGFEMergeNodeElement 967 | # from .v8_handwriting_recognizer import HandwritingRecognizer as V8HandwritingRecognizer 968 | # from .v8_svg_fe_gaussian_blur_element import SVGFEGaussianBlurElement as V8SVGFEGaussianBlurElement 969 | # from .v8_character_bounds_update_event import CharacterBoundsUpdateEvent as V8CharacterBoundsUpdateEvent 970 | # from .v8_webgl_vertex_array_object_oes import WebGLVertexArrayObjectOES as V8WebGLVertexArrayObjectOES 971 | # from .v8_readable_stream_byob_request import ReadableStreamBYOBRequest as V8ReadableStreamBYOBRequest 972 | # from .v8_bluetooth_manufacturer_data_map import BluetoothManufacturerDataMap as V8BluetoothManufacturerDataMap 973 | # from .v8_xr_webgl_sub_image import XRWebGLSubImage as V8XRWebGLSubImage 974 | # from .v8_hit_test_layer_rect import HitTestLayerRect as V8HitTestLayerRect 975 | # from .v8_navigator import Navigator as V8Navigator 976 | # from .v8_radio_node_list import RadioNodeList as V8RadioNodeList 977 | # from .v8_css_condition_rule import CSSConditionRule as V8CSSConditionRule 978 | # from .v8_xr_session_event import XRSessionEvent as V8XRSessionEvent 979 | # from .v8_xr_light_estimate import XRLightEstimate as V8XRLightEstimate 980 | # from .v8_media_stream_track_video_stats import MediaStreamTrackVideoStats as V8MediaStreamTrackVideoStats 981 | # from .v8_navigator_ua_data import NavigatorUAData as V8NavigatorUAData 982 | # from .v8_css_font_face_rule import CSSFontFaceRule as V8CSSFontFaceRule 983 | # from .v8_rtc_dtmf_sender import RTCDTMFSender as V8RTCDTMFSender 984 | # from .v8_media_keys import MediaKeys as V8MediaKeys 985 | # from .v8_gamepad_axis_event import GamepadAxisEvent as V8GamepadAxisEvent 986 | # from .v8_gpu_buffer_usage import GPUBufferUsage as V8GPUBufferUsage 987 | # from .v8_gpu_render_pipeline import GPURenderPipeline as V8GPURenderPipeline 988 | # from .v8_css_numeric_value import CSSNumericValue as V8CSSNumericValue 989 | # from .v8_performance_long_task_timing import PerformanceLongTaskTiming as V8PerformanceLongTaskTiming 990 | # from .v8_rtc_rtp_receiver import RTCRtpReceiver as V8RTCRtpReceiver 991 | # from .v8_public_key_credential import PublicKeyCredential as V8PublicKeyCredential 992 | # from .v8_media_source_handle import MediaSourceHandle as V8MediaSourceHandle 993 | # from .v8_svg_animated_string import SVGAnimatedString as V8SVGAnimatedString 994 | # from .v8_html_dlist_element import HTMLDListElement as V8HTMLDListElement 995 | # from .v8_webgl_shader import WebGLShader as V8WebGLShader 996 | # from .v8_xpath_evaluator import XPathEvaluator as V8XPathEvaluator 997 | # from .v8_file import File as V8File 998 | # from .v8_svg_component_transfer_function_element import SVGComponentTransferFunctionElement as V8SVGComponentTransferFunctionElement 999 | # from .v8_lock_screen_data import LockScreenData as V8LockScreenData 1000 | # from .v8_mutation_record import MutationRecord as V8MutationRecord 1001 | # from .v8_gpu_query_set import GPUQuerySet as V8GPUQuerySet 1002 | # from .v8_speech_grammar_list import SpeechGrammarList as V8SpeechGrammarList 1003 | # from .v8_smart_card_context import SmartCardContext as V8SmartCardContext 1004 | # from .v8_intersection_observer_entry import IntersectionObserverEntry as V8IntersectionObserverEntry 1005 | # from .v8_media_stream_track_processor import MediaStreamTrackProcessor as V8MediaStreamTrackProcessor 1006 | # from .v8_svg_animated_transform_list import SVGAnimatedTransformList as V8SVGAnimatedTransformList 1007 | # from .v8_toggle_event import ToggleEvent as V8ToggleEvent 1008 | # from .v8_presentation_connection_list import PresentationConnectionList as V8PresentationConnectionList 1009 | # from .v8_media_key_status_map import MediaKeyStatusMap as V8MediaKeyStatusMap 1010 | # from .v8_rtc_dtmf_tone_change_event import RTCDTMFToneChangeEvent as V8RTCDTMFToneChangeEvent 1011 | # from .v8_highlight_pointer_event import HighlightPointerEvent as V8HighlightPointerEvent 1012 | # from .v8_midi_port import MIDIPort as V8MIDIPort 1013 | # from .v8_view_transition import ViewTransition as V8ViewTransition 1014 | # from .v8_base_audio_context import BaseAudioContext as V8BaseAudioContext 1015 | # from .v8_cookie_deprecation_label import CookieDeprecationLabel as V8CookieDeprecationLabel 1016 | # from .v8_face_detector import FaceDetector as V8FaceDetector 1017 | # from .v8_data_transfer import DataTransfer as V8DataTransfer 1018 | # from .v8_webgl_uniform_location import WebGLUniformLocation as V8WebGLUniformLocation 1019 | # from .v8_usb_alternate_interface import USBAlternateInterface as V8USBAlternateInterface 1020 | # from .v8_html_olist_element import HTMLOListElement as V8HTMLOListElement 1021 | # from .v8_media_encrypted_event import MediaEncryptedEvent as V8MediaEncryptedEvent 1022 | # from .v8_midi_input import MIDIInput as V8MIDIInput 1023 | # from .v8_ndef_reading_event import NDEFReadingEvent as V8NDEFReadingEvent 1024 | # from .v8_wake_lock import WakeLock as V8WakeLock 1025 | # from .v8_media_recorder import MediaRecorder as V8MediaRecorder 1026 | # from .v8_wgsl_language_features import WGSLLanguageFeatures as V8WGSLLanguageFeatures 1027 | # from .v8_node import Node as V8Node 1028 | # from .v8_task_attribution_timing import TaskAttributionTiming as V8TaskAttributionTiming 1029 | # from .v8_media_stream import MediaStream as V8MediaStream 1030 | # from .v8_sync_iterator_wgsl_language_features import SyncIterator_WGSLLanguageFeatures as V8SyncIterator_WGSLLanguageFeatures 1031 | # from .v8_webgl_compressed_texture_etc1 import WebGLCompressedTextureETC1 as V8WebGLCompressedTextureETC1 1032 | # from .v8_gpu_external_texture import GPUExternalTexture as V8GPUExternalTexture 1033 | # from .v8_web_transport_bidirectional_stream import WebTransportBidirectionalStream as V8WebTransportBidirectionalStream 1034 | # from .v8_periodic_sync_manager import PeriodicSyncManager as V8PeriodicSyncManager 1035 | # from .v8_html_style_element import HTMLStyleElement as V8HTMLStyleElement 1036 | # from .v8_svg_fe_turbulence_element import SVGFETurbulenceElement as V8SVGFETurbulenceElement 1037 | # from .v8_gpu_out_of_memory_error import GPUOutOfMemoryError as V8GPUOutOfMemoryError 1038 | # from .v8_css_perspective import CSSPerspective as V8CSSPerspective 1039 | # from .v8_soft_navigation_entry import SoftNavigationEntry as V8SoftNavigationEntry 1040 | # from .v8_html_iframe_element import HTMLIFrameElement as V8HTMLIFrameElement 1041 | # from .v8_speech_synthesis_error_event import SpeechSynthesisErrorEvent as V8SpeechSynthesisErrorEvent 1042 | # from .v8_css_math_negate import CSSMathNegate as V8CSSMathNegate 1043 | # from .v8_periodic_sync_event import PeriodicSyncEvent as V8PeriodicSyncEvent 1044 | # from .v8_tcp_server_socket import TCPServerSocket as V8TCPServerSocket 1045 | # from .v8_rtc_error_event import RTCErrorEvent as V8RTCErrorEvent 1046 | # from .v8_xr_viewport import XRViewport as V8XRViewport 1047 | # from .v8_ext_texture_filter_anisotropic import EXTTextureFilterAnisotropic as V8EXTTextureFilterAnisotropic 1048 | # from .v8_audio_node import AudioNode as V8AudioNode 1049 | # from .v8_svg_angle import SVGAngle as V8SVGAngle 1050 | # from .v8_document_part_root import DocumentPartRoot as V8DocumentPartRoot 1051 | # from .v8_service_worker_container import ServiceWorkerContainer as V8ServiceWorkerContainer 1052 | # from .v8_html_picture_element import HTMLPictureElement as V8HTMLPictureElement 1053 | # from .v8_idle_detector import IdleDetector as V8IdleDetector 1054 | # from .v8_usb_isochronous_out_transfer_packet import USBIsochronousOutTransferPacket as V8USBIsochronousOutTransferPacket 1055 | # from .v8_media_error import MediaError as V8MediaError 1056 | # from .v8_background_fetch_record import BackgroundFetchRecord as V8BackgroundFetchRecord 1057 | # from .v8_deprecated_storage_quota import DeprecatedStorageQuota as V8DeprecatedStorageQuota 1058 | # from .v8_speech_synthesis_voice import SpeechSynthesisVoice as V8SpeechSynthesisVoice 1059 | # from .v8_performance_timing import PerformanceTiming as V8PerformanceTiming 1060 | # from .v8_gamepad_button import GamepadButton as V8GamepadButton 1061 | # from .v8_data_transfer_item import DataTransferItem as V8DataTransferItem 1062 | # from .v8_idb_index import IDBIndex as V8IDBIndex 1063 | # from .v8_worker_internals import WorkerInternals as V8WorkerInternals 1064 | # from .v8_static_selection import StaticSelection as V8StaticSelection 1065 | # from .v8_worklet_group_effect import WorkletGroupEffect as V8WorkletGroupEffect 1066 | # from .v8_ext_texture_mirror_clamp_to_edge import EXTTextureMirrorClampToEdge as V8EXTTextureMirrorClampToEdge 1067 | # from .v8_webgl_framebuffer import WebGLFramebuffer as V8WebGLFramebuffer 1068 | # from .v8_storage_bucket_manager import StorageBucketManager as V8StorageBucketManager 1069 | # from .v8_svg_fe_specular_lighting_element import SVGFESpecularLightingElement as V8SVGFESpecularLightingElement 1070 | # from .v8_video_color_space import VideoColorSpace as V8VideoColorSpace 1071 | # from .v8_css_hwb import CSSHWB as V8CSSHWB 1072 | # from .v8_linear_acceleration_sensor import LinearAccelerationSensor as V8LinearAccelerationSensor 1073 | # from .v8_response import Response as V8Response 1074 | # from .v8_feature_policy import FeaturePolicy as V8FeaturePolicy 1075 | # from .v8_crypto_key import CryptoKey as V8CryptoKey 1076 | # from .v8_font_data import FontData as V8FontData 1077 | # from .v8_sync_iterator_event_counts import SyncIterator_EventCounts as V8SyncIterator_EventCounts 1078 | # from .v8_svg_polyline_element import SVGPolylineElement as V8SVGPolylineElement 1079 | # from .v8_animation_event import AnimationEvent as V8AnimationEvent 1080 | # from .v8_paint_worklet_global_scope import PaintWorkletGlobalScope as V8PaintWorkletGlobalScope 1081 | # from .v8_html_template_element import HTMLTemplateElement as V8HTMLTemplateElement 1082 | # from .v8_svg_fe_diffuse_lighting_element import SVGFEDiffuseLightingElement as V8SVGFEDiffuseLightingElement 1083 | # from .v8_magnetometer import Magnetometer as V8Magnetometer 1084 | # from .v8_worker import Worker as V8Worker 1085 | # from .v8_directory_entry import DirectoryEntry as V8DirectoryEntry 1086 | # from .v8_dedicated_worker_global_scope import DedicatedWorkerGlobalScope as V8DedicatedWorkerGlobalScope 1087 | # from .v8_midi_access import MIDIAccess as V8MIDIAccess 1088 | # from .v8_page_swap_event import PageSwapEvent as V8PageSwapEvent 1089 | # from .v8_trusted_script import TrustedScript as V8TrustedScript 1090 | # from .v8_capture_controller import CaptureController as V8CaptureController 1091 | # from .v8_webgl_texture import WebGLTexture as V8WebGLTexture 1092 | # from .v8_mesh_2d_vertex_buffer import Mesh2DVertexBuffer as V8Mesh2DVertexBuffer 1093 | # from .v8_svg_g_element import SVGGElement as V8SVGGElement 1094 | # from .v8_fetch_event import FetchEvent as V8FetchEvent 1095 | # from .v8_readable_stream_default_controller import ReadableStreamDefaultController as V8ReadableStreamDefaultController 1096 | # from .v8_bluetooth_remote_gatt_characteristic import BluetoothRemoteGATTCharacteristic as V8BluetoothRemoteGATTCharacteristic 1097 | # from .v8_ext_clip_control import EXTClipControl as V8EXTClipControl 1098 | # from .v8_sync_manager import SyncManager as V8SyncManager 1099 | # from .v8_view_timeline import ViewTimeline as V8ViewTimeline 1100 | # from .v8_gpu_color_write import GPUColorWrite as V8GPUColorWrite 1101 | # from .v8_can_make_payment_event import CanMakePaymentEvent as V8CanMakePaymentEvent 1102 | # from .v8_vtt_cue import VTTCue as V8VTTCue 1103 | # from .v8_webgl_query import WebGLQuery as V8WebGLQuery 1104 | # from .v8_webgl_compressed_texture_s3tc_srgb import WebGLCompressedTextureS3TCsRGB as V8WebGLCompressedTextureS3TCsRGB 1105 | # from .v8_svg_text_element import SVGTextElement as V8SVGTextElement 1106 | # from .v8_usb import USB as V8USB 1107 | # from .v8_garbage_collected_script_wrappable import GarbageCollectedScriptWrappable as V8GarbageCollectedScriptWrappable 1108 | # from .v8_style_media import StyleMedia as V8StyleMedia 1109 | # from .v8_layout_edges import LayoutEdges as V8LayoutEdges 1110 | # from .v8_url_search_params import URLSearchParams as V8URLSearchParams 1111 | # from .v8_sync_iterator_form_data import SyncIterator_FormData as V8SyncIterator_FormData 1112 | # from .v8_svg_set_element import SVGSetElement as V8SVGSetElement 1113 | # from .v8_xr_dom_overlay_state import XRDOMOverlayState as V8XRDOMOverlayState 1114 | # from .v8_presentation_connection_close_event import PresentationConnectionCloseEvent as V8PresentationConnectionCloseEvent 1115 | # from .v8_shadow_realm_global_scope import ShadowRealmGlobalScope as V8ShadowRealmGlobalScope 1116 | # from .v8_gain_node import GainNode as V8GainNode 1117 | # from .v8_observable import Observable as V8Observable 1118 | # from .v8_video_decoder import VideoDecoder as V8VideoDecoder 1119 | # from .v8_media_stream_event import MediaStreamEvent as V8MediaStreamEvent 1120 | # from .v8_html_legend_element import HTMLLegendElement as V8HTMLLegendElement 1121 | # from .v8_image_decoder import ImageDecoder as V8ImageDecoder 1122 | # from .v8_channel_merger_node import ChannelMergerNode as V8ChannelMergerNode 1123 | # from .v8_lock_manager import LockManager as V8LockManager 1124 | # from .v8_html_font_element import HTMLFontElement as V8HTMLFontElement 1125 | # from .v8_submit_event import SubmitEvent as V8SubmitEvent 1126 | # from .v8_svg_text_path_element import SVGTextPathElement as V8SVGTextPathElement 1127 | # from .v8_url import URL as V8URL 1128 | # from .v8_html_unknown_element import HTMLUnknownElement as V8HTMLUnknownElement 1129 | # from .v8_screen_details import ScreenDetails as V8ScreenDetails 1130 | # from .v8_path_2d import Path2D as V8Path2D 1131 | # from .v8_svg_svg_element import SVGSVGElement as V8SVGSVGElement 1132 | # from .v8_media_list import MediaList as V8MediaList 1133 | # from .v8_svg_defs_element import SVGDefsElement as V8SVGDefsElement 1134 | # from .v8_css_math_sum import CSSMathSum as V8CSSMathSum 1135 | # from .v8_encoded_video_chunk import EncodedVideoChunk as V8EncodedVideoChunk 1136 | # from .v8_svg_desc_element import SVGDescElement as V8SVGDescElement 1137 | # from .v8_oscillator_node import OscillatorNode as V8OscillatorNode 1138 | # from .v8_audio_worklet_processor import AudioWorkletProcessor as V8AudioWorkletProcessor 1139 | # from .v8_idb_cursor_with_value import IDBCursorWithValue as V8IDBCursorWithValue 1140 | # from .v8_resource_progress_event import ResourceProgressEvent as V8ResourceProgressEvent 1141 | # from .v8_text_track_cue import TextTrackCue as V8TextTrackCue 1142 | # from .v8_type_conversions import TypeConversions as V8TypeConversions 1143 | # from .v8_time_ranges import TimeRanges as V8TimeRanges 1144 | # from .v8_rtc_certificate import RTCCertificate as V8RTCCertificate 1145 | # from .v8_dom_point_read_only import DOMPointReadOnly as V8DOMPointReadOnly 1146 | # from .v8_rtc_ice_transport import RTCIceTransport as V8RTCIceTransport 1147 | # from .v8_bluetooth_advertising_event import BluetoothAdvertisingEvent as V8BluetoothAdvertisingEvent 1148 | # from .v8_sync_iterator_custom_state_set import SyncIterator_CustomStateSet as V8SyncIterator_CustomStateSet 1149 | # from .v8_custom_element_registry import CustomElementRegistry as V8CustomElementRegistry 1150 | # from .v8_edit_context import EditContext as V8EditContext 1151 | # from .v8_mojo_handle import MojoHandle as V8MojoHandle 1152 | # from .v8_notification import Notification as V8Notification 1153 | # from .v8_sync_iterator_xr_hand import SyncIterator_XRHand as V8SyncIterator_XRHand 1154 | # from .v8_gamepad_touch import GamepadTouch as V8GamepadTouch 1155 | # from .v8_service_worker import ServiceWorker as V8ServiceWorker 1156 | # from .v8_xr_hit_test_result import XRHitTestResult as V8XRHitTestResult 1157 | # from .v8_eye_dropper import EyeDropper as V8EyeDropper 1158 | # from .v8_media_devices import MediaDevices as V8MediaDevices 1159 | # from .v8_html_title_element import HTMLTitleElement as V8HTMLTitleElement 1160 | # from .v8_notification_event import NotificationEvent as V8NotificationEvent 1161 | # from .v8_xpath_result import XPathResult as V8XPathResult 1162 | # from .v8_focus_event import FocusEvent as V8FocusEvent 1163 | # from .v8_storage_manager import StorageManager as V8StorageManager 1164 | # from .v8_style_property_map_read_only import StylePropertyMapReadOnly as V8StylePropertyMapReadOnly 1165 | # from .v8_ext_float_blend import EXTFloatBlend as V8EXTFloatBlend 1166 | # from .v8_style_sheet import StyleSheet as V8StyleSheet 1167 | # from .v8_crypto import Crypto as V8Crypto 1168 | # from .v8_payment_response import PaymentResponse as V8PaymentResponse 1169 | # from .v8_audio_playout_stats import AudioPlayoutStats as V8AudioPlayoutStats 1170 | # from .v8_audio_track_list import AudioTrackList as V8AudioTrackList 1171 | # from .v8_oes_draw_buffers_indexed import OESDrawBuffersIndexed as V8OESDrawBuffersIndexed 1172 | # from .v8_tree_walker import TreeWalker as V8TreeWalker 1173 | # from .v8_cookie_store_manager import CookieStoreManager as V8CookieStoreManager 1174 | # from .v8_entry import Entry as V8Entry 1175 | -------------------------------------------------------------------------------- /pyv8env/env/chrome/flags.py: -------------------------------------------------------------------------------- 1 | 2 | from ..config import * 3 | 4 | construct_000000 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kDontAll, length=0, v8_array=0, immutable=0, has_constructor=0) 5 | construct_000001 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kDontAll, length=0, v8_array=0, immutable=0, has_constructor=1) 6 | construct_000020 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kDontAll, length=0, v8_array=0, immutable=FlagImmutable.prototype, has_constructor=0) 7 | construct_000031 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kDontAll, length=0, v8_array=0, immutable=FlagImmutable.instance | FlagImmutable.prototype, has_constructor=1) 8 | construct_000100 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kDontAll, length=0, v8_array=FlagArrayProto.iterator, immutable=0, has_constructor=0) 9 | construct_000101 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kDontAll, length=0, v8_array=FlagArrayProto.iterator, immutable=0, has_constructor=1) 10 | construct_0003101 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kDontAll, length=0, v8_array=FlagArrayProto.iterator | FlagArrayProto.entries | FlagArrayProto.keys | FlagArrayProto.values | FlagArrayProto.forEach, immutable=0, has_constructor=1) 11 | construct_010000 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kNew, length=0, v8_array=0, immutable=0, has_constructor=0) 12 | construct_010001 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kNew, length=0, v8_array=0, immutable=0, has_constructor=1) 13 | construct_010100 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kNew, length=0, v8_array=FlagArrayProto.iterator, immutable=0, has_constructor=0) 14 | construct_011000 = ConstructorConfig(exposed=FlagExposed.kNo, constructor=FlagConstructor.kNew, length=1, v8_array=0, immutable=0, has_constructor=0) 15 | construct_100001 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kDontAll, length=0, v8_array=0, immutable=0, has_constructor=1) 16 | construct_100021 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kDontAll, length=0, v8_array=0, immutable=FlagImmutable.prototype, has_constructor=1) 17 | construct_100031 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kDontAll, length=0, v8_array=0, immutable=FlagImmutable.instance | FlagImmutable.prototype, has_constructor=1) 18 | construct_100101 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kDontAll, length=0, v8_array=FlagArrayProto.iterator, immutable=0, has_constructor=1) 19 | construct_1003101 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kDontAll, length=0, v8_array=FlagArrayProto.iterator | FlagArrayProto.entries | FlagArrayProto.keys | FlagArrayProto.values | FlagArrayProto.forEach, immutable=0, has_constructor=1) 20 | construct_110001 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kNew, length=0, v8_array=0, immutable=0, has_constructor=1) 21 | construct_110021 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kNew, length=0, v8_array=0, immutable=FlagImmutable.prototype, has_constructor=1) 22 | construct_110101 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kNew, length=0, v8_array=FlagArrayProto.iterator, immutable=0, has_constructor=1) 23 | construct_111001 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kNew, length=1, v8_array=0, immutable=0, has_constructor=1) 24 | construct_1113101 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kNew, length=1, v8_array=FlagArrayProto.iterator | FlagArrayProto.entries | FlagArrayProto.keys | FlagArrayProto.values | FlagArrayProto.forEach, immutable=0, has_constructor=1) 25 | construct_112001 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kNew, length=2, v8_array=0, immutable=0, has_constructor=1) 26 | construct_113001 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kNew, length=3, v8_array=0, immutable=0, has_constructor=1) 27 | construct_114001 = ConstructorConfig(exposed=FlagExposed.kYes, constructor=FlagConstructor.kNew, length=4, v8_array=0, immutable=0, has_constructor=1) 28 | -------------------------------------------------------------------------------- /pyv8env/env/chrome/v8_dom_error.py: -------------------------------------------------------------------------------- 1 | from .flags import * 2 | 3 | 4 | @construct_111001 5 | class DOMError(Exception): 6 | 7 | __v8_attribute__ = ( 8 | # (attr_name, get_cb, set_cb, CallbackType, FlagLocation, V8Attribute, FlagReceiverCheck, 9 | # FlagCrossOriginCheck, FlagCrossOriginCheck, SideEffectType) 10 | ("name", "get_name", None, 0, 1, 0, 0, 0, 0, 1), 11 | ("message", "get_message", None, 0, 1, 0, 0, 0, 0, 1), 12 | 13 | ) 14 | 15 | def get_name(self): 16 | val = self._attr.get('name') 17 | if val is not None: 18 | return val 19 | logger.debug(f'patch -> v8_dom_error.py -> DOMError.name -> get attr') 20 | 21 | def get_message(self): 22 | val = self._attr.get('message') 23 | if val is not None: 24 | return val 25 | logger.debug(f'patch -> v8_dom_error.py -> DOMError.message -> get attr') 26 | -------------------------------------------------------------------------------- /pyv8env/env/chrome/v8_dom_exception.py: -------------------------------------------------------------------------------- 1 | from .flags import * 2 | 3 | 4 | @construct_110001 5 | class DOMException(Exception): 6 | INDEX_SIZE_ERR = 1 7 | DOMSTRING_SIZE_ERR = 2 8 | HIERARCHY_REQUEST_ERR = 3 9 | WRONG_DOCUMENT_ERR = 4 10 | INVALID_CHARACTER_ERR = 5 11 | NO_DATA_ALLOWED_ERR = 6 12 | NO_MODIFICATION_ALLOWED_ERR = 7 13 | NOT_FOUND_ERR = 8 14 | NOT_SUPPORTED_ERR = 9 15 | INUSE_ATTRIBUTE_ERR = 10 16 | INVALID_STATE_ERR = 11 17 | SYNTAX_ERR = 12 18 | INVALID_MODIFICATION_ERR = 13 19 | NAMESPACE_ERR = 14 20 | INVALID_ACCESS_ERR = 15 21 | VALIDATION_ERR = 16 22 | TYPE_MISMATCH_ERR = 17 23 | SECURITY_ERR = 18 24 | NETWORK_ERR = 19 25 | ABORT_ERR = 20 26 | URL_MISMATCH_ERR = 21 27 | QUOTA_EXCEEDED_ERR = 22 28 | TIMEOUT_ERR = 23 29 | INVALID_NODE_TYPE_ERR = 24 30 | DATA_CLONE_ERR = 25 31 | 32 | __v8_attribute__ = ( 33 | # (attr_name, get_cb, set_cb, CallbackType, FlagLocation, V8Attribute, FlagReceiverCheck, 34 | # FlagCrossOriginCheck, FlagCrossOriginCheck, SideEffectType) 35 | ("code", "get_code", None, 0, 1, 0, 0, 0, 0, 1), 36 | ("name", "get_name", None, 0, 1, 0, 0, 0, 0, 1), 37 | ("message", "get_message", None, 0, 1, 0, 0, 0, 0, 1), 38 | 39 | ) 40 | 41 | def get_code(self): 42 | val = self._attr.get('code') 43 | if val is not None: 44 | return val 45 | logger.debug(f'patch -> v8_dom_exception.py -> DOMException.code -> get attr') 46 | 47 | def get_name(self): 48 | val = self._attr.get('name') 49 | if val is not None: 50 | return val 51 | logger.debug(f'patch -> v8_dom_exception.py -> DOMException.name -> get attr') 52 | 53 | def get_message(self): 54 | val = self._attr.get('message') 55 | if val is not None: 56 | return val 57 | logger.debug(f'patch -> v8_dom_exception.py -> DOMException.message -> get attr') 58 | -------------------------------------------------------------------------------- /pyv8env/env/chrome/v8_event_target.py: -------------------------------------------------------------------------------- 1 | from .flags import * 2 | 3 | 4 | @construct_110021 5 | class EventTarget: 6 | def __str__(self): 7 | return f'[object {self.__class__.__name__}]' 8 | 9 | def __init__(self, *args, **kw): 10 | self._attr = dict(kw) 11 | 12 | __v8_method__ = ( 13 | # (name, cb, length, CallbackType, FlagLocation, V8Attribute, FlagReceiverCheck, 14 | # cross_origin_check, SideEffectType) 15 | ("addEventListener", "fn_addEventListener", 2, 0, 1, 0, 0, 0, 0), 16 | ("dispatchEvent", "fn_dispatchEvent", 1, 0, 1, 0, 0, 0, 0), 17 | ("removeEventListener", "fn_removeEventListener", 2, 0, 1, 0, 0, 0, 0), 18 | ("on", "fn_on", 1, 0, 1, 0, 0, 0, 0), 19 | 20 | ) 21 | 22 | def fn_addEventListener(self, *args): 23 | logger.debug(f'patch -> v8_event_target.py -> EventTarget.addEventListener{tuple(args)} -> method') 24 | 25 | def fn_dispatchEvent(self, *args, capture=False): 26 | logger.debug(f'patch -> v8_event_target.py -> EventTarget.dispatchEvent{tuple(args)} -> method') 27 | 28 | def fn_removeEventListener(self, *args): 29 | logger.debug(f'patch -> v8_event_target.py -> EventTarget.removeEventListener{tuple(args)} -> method') 30 | 31 | def fn_on(self, *args): 32 | logger.debug(f'patch -> v8_event_target.py -> EventTarget.on{tuple(args)} -> method') 33 | -------------------------------------------------------------------------------- /pyv8env/env/chrome/v8_window_properties.py: -------------------------------------------------------------------------------- 1 | from .flags import * 2 | from .v8_event_target import EventTarget 3 | 4 | 5 | @construct_000020 6 | class WindowProperties(EventTarget): 7 | __v8_skip_inherit__ = True 8 | 9 | def __str__(self): 10 | return f'[object {self.__class__.__name__}]' 11 | 12 | def __init__(self, *args, **kw): 13 | super(WindowProperties, self).__init__(*args, **kw) 14 | -------------------------------------------------------------------------------- /pyv8env/env/config.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from functools import wraps 3 | from loguru import logger 4 | 5 | from pyv8.flag import * 6 | 7 | 8 | class AttributeJSConfig: 9 | def __init__( 10 | self, 11 | name, 12 | get_cb, 13 | set_cb=None, 14 | v8_property_attribute=3, # v8::PropertyAttribute 15 | location=2, # FlagLocation 16 | receiver_check=1, 17 | cross_origin_check_for_get=1, # FlagReceiverCheck 18 | cross_origin_check_for_set=1, # FlagCrossOriginCheck 19 | v8_side_effect=2, # FlagCrossOriginCheck 20 | ): 21 | self.name = name 22 | self.get_cb = get_cb 23 | self.set_cb = set_cb 24 | self.v8_property_attribute = v8_property_attribute 25 | self.location = location 26 | self.receiver_check = receiver_check 27 | self.cross_origin_check_for_get = cross_origin_check_for_get 28 | self.cross_origin_check_for_set = cross_origin_check_for_set 29 | self.v8_side_effect = v8_side_effect 30 | 31 | def __call__(self, func): 32 | setattr(func, "__v8_method__", 1) 33 | setattr(func, "__v8_location", self.location) 34 | setattr(func, "__v8_receiver_check", self.receiver_check) 35 | setattr(func, "__v8_cross_origin_check_for_get", self.cross_origin_check_for_get) 36 | setattr(func, "__v8_cross_origin_check_for_set", self.cross_origin_check_for_set) 37 | setattr(func, "__v8_v8_side_effect", self.v8_side_effect) 38 | 39 | 40 | class AttributeConfig: 41 | def __init__( 42 | self, 43 | v8_property_attribute=V8Attribute.kNone, # v8::PropertyAttribute 44 | location=FlagLocation.kPrototype, # FlagLocation 45 | receiver_check=FlagReceiverCheck.kCheck, 46 | cross_origin_check_for_get=FlagCrossOriginCheck.kCheck, # FlagReceiverCheck 47 | cross_origin_check_for_set=FlagCrossOriginCheck.kCheck, # FlagCrossOriginCheck 48 | side_effect=SideEffectType.kHasSideEffect, # FlagCrossOriginCheck 49 | ): 50 | self.property_attribute = v8_property_attribute 51 | self.location = location 52 | self.receiver_check = receiver_check 53 | self.cross_origin_check_for_get = cross_origin_check_for_get 54 | self.cross_origin_check_for_set = cross_origin_check_for_set 55 | self.side_effect = side_effect 56 | 57 | def __call__(self, func): 58 | setattr(func, "__v8_method__", 1) 59 | setattr(func, "__v8_property_attribute", self.property_attribute) 60 | setattr(func, "__v8_location", self.location) 61 | setattr(func, "__v8_receiver_check", self.receiver_check) 62 | setattr(func, "__v8_cross_origin_check_for_get", self.cross_origin_check_for_get) 63 | setattr(func, "__v8_cross_origin_check_for_set", self.cross_origin_check_for_set) 64 | setattr(func, "__v8_side_effect", self.side_effect) 65 | return func 66 | 67 | def __str__(self): 68 | return f'attr_{self.location}{self.property_attribute}{self.receiver_check}{self.cross_origin_check_for_get}{self.cross_origin_check_for_set}{self.side_effect}' 69 | 70 | 71 | class OperationConfig: 72 | def __init__( 73 | self, 74 | length=0, 75 | v8_property_attribute=V8Attribute.kNone, 76 | location=FlagLocation.kPrototype, 77 | receiver_check=FlagReceiverCheck.kCheck, 78 | cross_origin_check=FlagCrossOriginCheck.kCheck, 79 | side_effect=SideEffectType.kHasSideEffect, 80 | ): 81 | self.length = length 82 | self.property_attribute = v8_property_attribute 83 | self.location = location 84 | self.receiver_check = receiver_check 85 | self.cross_origin_check = cross_origin_check 86 | self.side_effect = side_effect 87 | 88 | def __call__(self, func): 89 | setattr(func, "__v8_method", 1) 90 | setattr(func, "__v8_length", self.length) 91 | setattr(func, "__v8_property_attribute", self.property_attribute) 92 | setattr(func, "__v8_location", self.location) 93 | setattr(func, "__v8_receiver_check", self.receiver_check) 94 | setattr(func, "__v8_cross_origin_check", self.cross_origin_check) 95 | setattr(func, "__v8_side_effect", self.side_effect) 96 | return func 97 | 98 | def __str__(self): 99 | return f'operation_{self.location}{self.length}{self.property_attribute}{self.receiver_check}{self.cross_origin_check}{self.side_effect}' 100 | 101 | 102 | __hook_exclude_name = ( 103 | "dir", "dirxml", "profile", "profileEnd", "clear", "table", "keys", "values", 104 | "debug", "undebug", "inspect", "copy", "queryObjects", 'monitor', 'unmonitor', 105 | "$", "$$", "$_", "$0", "$1", "$2", "$3", "$4", "$", "$x", "DataVie", 106 | "String", "Array", "Date", "Object", "window", "Symbol", "Number", "Function", 107 | "Symbol.toPrimitive", "Symbol.toStringTag", 108 | "parseFloat", "parseInt", "Math", "BigInt", "RegExp", "console", "isNaN", "Boolean", 109 | "faker", "unescape", "NaN", "Infinity", "_cf_chl_opt", "decodeURIComponent" 110 | ) 111 | 112 | 113 | def __v8_get_hook__(self, name, value=None, error=None, ctx_type=''): 114 | if name in __hook_exclude_name: 115 | return 116 | if isinstance(name, str) and name.startswith('a1_0x'): 117 | return 118 | msg = f"{ctx_type} getter: {self.__class__.__name__}.{name} -> {value}" 119 | if error: 120 | msg += f", error: {error}" 121 | logger.info(msg) 122 | 123 | 124 | def __v8_set_hook__(self, name, value, error, ctx_type=''): 125 | if isinstance(name, str) and name.startswith('a1_0x'): 126 | return 127 | msg = f"{ctx_type} setter: {self.__class__.__name__}.{name} = {value}" 128 | if error: 129 | msg += f", error: {error}" 130 | logger.info(msg) 131 | 132 | 133 | def __v8_method_hook__(self, func_name, arguments, value, has_error, ctx_type=''): 134 | msg = f"{ctx_type} method: {self.__name__ if isinstance(self, type) else self.__class__.__name__}.{func_name}{tuple(arguments)}" 135 | if has_error: 136 | msg += f" -> error: {value}" 137 | else: 138 | msg += f" -> {value}" 139 | logger.info(msg) 140 | 141 | 142 | def __v8_construct_hook__(name, arguments, value, has_error, is_construct_call, ctx_type=''): 143 | if is_construct_call: 144 | msg = f"{ctx_type} construct: new {name}{tuple(arguments)} -> {value}" 145 | else: 146 | msg = f"{ctx_type} construct: {name}{tuple(arguments)} -> {value}" 147 | if has_error: 148 | msg += f", has_error: {has_error}" 149 | logger.info(msg) 150 | 151 | 152 | exposed_constructs = {} 153 | exposed_names = [ 154 | "Option", 155 | "Image", 156 | "Audio", 157 | "webkitURL", 158 | "webkitRTCPeerConnection", 159 | "webkitMediaStream", 160 | "WebKitMutationObserver", 161 | "WebKitCSSMatrix", 162 | "XSLTProcessor", 163 | "XPathResult", 164 | "XPathExpression", 165 | "XPathEvaluator", 166 | "XMLSerializer", 167 | "XMLHttpRequestUpload", 168 | "XMLHttpRequestEventTarget", 169 | "XMLHttpRequest", 170 | "XMLDocument", 171 | "WritableStreamDefaultWriter", 172 | "WritableStreamDefaultController", 173 | "WritableStream", 174 | "Worker", 175 | "WindowControlsOverlayGeometryChangeEvent", 176 | "WindowControlsOverlay", 177 | "Window", 178 | "WheelEvent", 179 | "WebSocket", 180 | "WebGLVertexArrayObject", 181 | "WebGLUniformLocation", 182 | "WebGLTransformFeedback", 183 | "WebGLTexture", 184 | "WebGLSync", 185 | "WebGLShaderPrecisionFormat", 186 | "WebGLShader", 187 | "WebGLSampler", 188 | "WebGLRenderingContext", 189 | "WebGLRenderbuffer", 190 | "WebGLQuery", 191 | "WebGLProgram", 192 | "WebGLObject", 193 | "WebGLFramebuffer", 194 | "WebGLContextEvent", 195 | "WebGLBuffer", 196 | "WebGLActiveInfo", 197 | "WebGL2RenderingContext", 198 | "WaveShaperNode", 199 | "VisualViewport", 200 | "VisibilityStateEntry", 201 | "VirtualKeyboardGeometryChangeEvent", 202 | "ViewTransition", 203 | "VideoPlaybackQuality", 204 | "VideoFrame", 205 | "VideoColorSpace", 206 | "ValidityState", 207 | "VTTCue", 208 | "UserActivation", 209 | "URLSearchParams", 210 | "URLPattern", 211 | "URL", 212 | "UIEvent", 213 | "TrustedTypePolicyFactory", 214 | "TrustedTypePolicy", 215 | "TrustedScriptURL", 216 | "TrustedScript", 217 | "TrustedHTML", 218 | "TreeWalker", 219 | "TransitionEvent", 220 | "TransformStreamDefaultController", 221 | "TransformStream", 222 | "TrackEvent", 223 | "TouchList", 224 | "TouchEvent", 225 | "Touch", 226 | "ToggleEvent", 227 | "TimeRanges", 228 | "TextUpdateEvent", 229 | "TextTrackList", 230 | "TextTrackCueList", 231 | "TextTrackCue", 232 | "TextTrack", 233 | "TextMetrics", 234 | "TextFormatUpdateEvent", 235 | "TextFormat", 236 | "TextEvent", 237 | "TextEncoderStream", 238 | "TextEncoder", 239 | "TextDecoderStream", 240 | "TextDecoder", 241 | "Text", 242 | "TaskSignal", 243 | "TaskPriorityChangeEvent", 244 | "TaskController", 245 | "TaskAttributionTiming", 246 | "SyncManager", 247 | "SubmitEvent", 248 | "StyleSheetList", 249 | "StyleSheet", 250 | "StylePropertyMapReadOnly", 251 | "StylePropertyMap", 252 | "StorageEvent", 253 | "Storage", 254 | "StereoPannerNode", 255 | "StaticRange", 256 | "SourceBufferList", 257 | "SourceBuffer", 258 | "ShadowRoot", 259 | "Selection", 260 | "SecurityPolicyViolationEvent", 261 | "ScriptProcessorNode", 262 | "ScreenOrientation", 263 | "Screen", 264 | "Scheduling", 265 | "Scheduler", 266 | "SVGViewElement", 267 | "SVGUseElement", 268 | "SVGUnitTypes", 269 | "SVGTransformList", 270 | "SVGTransform", 271 | "SVGTitleElement", 272 | "SVGTextPositioningElement", 273 | "SVGTextPathElement", 274 | "SVGTextElement", 275 | "SVGTextContentElement", 276 | "SVGTSpanElement", 277 | "SVGSymbolElement", 278 | "SVGSwitchElement", 279 | "SVGStyleElement", 280 | "SVGStringList", 281 | "SVGStopElement", 282 | "SVGSetElement", 283 | "SVGScriptElement", 284 | "SVGSVGElement", 285 | "SVGRectElement", 286 | "SVGRect", 287 | "SVGRadialGradientElement", 288 | "SVGPreserveAspectRatio", 289 | "SVGPolylineElement", 290 | "SVGPolygonElement", 291 | "SVGPointList", 292 | "SVGPoint", 293 | "SVGPatternElement", 294 | "SVGPathElement", 295 | "SVGNumberList", 296 | "SVGNumber", 297 | "SVGMetadataElement", 298 | "SVGMatrix", 299 | "SVGMaskElement", 300 | "SVGMarkerElement", 301 | "SVGMPathElement", 302 | "SVGLinearGradientElement", 303 | "SVGLineElement", 304 | "SVGLengthList", 305 | "SVGLength", 306 | "SVGImageElement", 307 | "SVGGraphicsElement", 308 | "SVGGradientElement", 309 | "SVGGeometryElement", 310 | "SVGGElement", 311 | "SVGForeignObjectElement", 312 | "SVGFilterElement", 313 | "SVGFETurbulenceElement", 314 | "SVGFETileElement", 315 | "SVGFESpotLightElement", 316 | "SVGFESpecularLightingElement", 317 | "SVGFEPointLightElement", 318 | "SVGFEOffsetElement", 319 | "SVGFEMorphologyElement", 320 | "SVGFEMergeNodeElement", 321 | "SVGFEMergeElement", 322 | "SVGFEImageElement", 323 | "SVGFEGaussianBlurElement", 324 | "SVGFEFuncRElement", 325 | "SVGFEFuncGElement", 326 | "SVGFEFuncBElement", 327 | "SVGFEFuncAElement", 328 | "SVGFEFloodElement", 329 | "SVGFEDropShadowElement", 330 | "SVGFEDistantLightElement", 331 | "SVGFEDisplacementMapElement", 332 | "SVGFEDiffuseLightingElement", 333 | "SVGFEConvolveMatrixElement", 334 | "SVGFECompositeElement", 335 | "SVGFEComponentTransferElement", 336 | "SVGFEColorMatrixElement", 337 | "SVGFEBlendElement", 338 | "SVGEllipseElement", 339 | "SVGElement", 340 | "SVGDescElement", 341 | "SVGDefsElement", 342 | "SVGComponentTransferFunctionElement", 343 | "SVGClipPathElement", 344 | "SVGCircleElement", 345 | "SVGAnimationElement", 346 | "SVGAnimatedTransformList", 347 | "SVGAnimatedString", 348 | "SVGAnimatedRect", 349 | "SVGAnimatedPreserveAspectRatio", 350 | "SVGAnimatedNumberList", 351 | "SVGAnimatedNumber", 352 | "SVGAnimatedLengthList", 353 | "SVGAnimatedLength", 354 | "SVGAnimatedInteger", 355 | "SVGAnimatedEnumeration", 356 | "SVGAnimatedBoolean", 357 | "SVGAnimatedAngle", 358 | "SVGAnimateTransformElement", 359 | "SVGAnimateMotionElement", 360 | "SVGAnimateElement", 361 | "SVGAngle", 362 | "SVGAElement", 363 | "Response", 364 | "ResizeObserverSize", 365 | "ResizeObserverEntry", 366 | "ResizeObserver", 367 | "Request", 368 | "ReportingObserver", 369 | "ReadableStreamDefaultReader", 370 | "ReadableStreamDefaultController", 371 | "ReadableStreamBYOBRequest", 372 | "ReadableStreamBYOBReader", 373 | "ReadableStream", 374 | "ReadableByteStreamController", 375 | "Range", 376 | "RadioNodeList", 377 | "RTCTrackEvent", 378 | "RTCStatsReport", 379 | "RTCSessionDescription", 380 | "RTCSctpTransport", 381 | "RTCRtpTransceiver", 382 | "RTCRtpSender", 383 | "RTCRtpReceiver", 384 | "RTCPeerConnectionIceEvent", 385 | "RTCPeerConnectionIceErrorEvent", 386 | "RTCPeerConnection", 387 | "RTCIceTransport", 388 | "RTCIceCandidate", 389 | "RTCErrorEvent", 390 | "RTCError", 391 | "RTCEncodedVideoFrame", 392 | "RTCEncodedAudioFrame", 393 | "RTCDtlsTransport", 394 | "RTCDataChannelEvent", 395 | "RTCDTMFToneChangeEvent", 396 | "RTCDTMFSender", 397 | "RTCCertificate", 398 | "PromiseRejectionEvent", 399 | "ProgressEvent", 400 | "Profiler", 401 | "ProcessingInstruction", 402 | "PopStateEvent", 403 | "PointerEvent", 404 | "PluginArray", 405 | "Plugin", 406 | "PictureInPictureWindow", 407 | "PictureInPictureEvent", 408 | "PeriodicWave", 409 | "PerformanceTiming", 410 | "PerformanceServerTiming", 411 | "PerformanceResourceTiming", 412 | "PerformancePaintTiming", 413 | "PerformanceObserverEntryList", 414 | "PerformanceObserver", 415 | "PerformanceNavigationTiming", 416 | "PerformanceNavigation", 417 | "PerformanceMeasure", 418 | "PerformanceMark", 419 | "PerformanceLongTaskTiming", 420 | "PerformanceEventTiming", 421 | "PerformanceEntry", 422 | "PerformanceElementTiming", 423 | "Performance", 424 | "Path2D", 425 | "PannerNode", 426 | "PageTransitionEvent", 427 | "OverconstrainedError", 428 | "OscillatorNode", 429 | "OffscreenCanvasRenderingContext2D", 430 | "OffscreenCanvas", 431 | "OfflineAudioContext", 432 | "OfflineAudioCompletionEvent", 433 | "NodeList", 434 | "NodeIterator", 435 | "NodeFilter", 436 | "Node", 437 | "NetworkInformation", 438 | "NavigatorUAData", 439 | "Navigator", 440 | "NavigationTransition", 441 | "NavigationHistoryEntry", 442 | "NavigationDestination", 443 | "NavigationCurrentEntryChangeEvent", 444 | "Navigation", 445 | "NavigateEvent", 446 | "NamedNodeMap", 447 | "MutationRecord", 448 | "MutationObserver", 449 | "MouseEvent", 450 | "MimeTypeArray", 451 | "MimeType", 452 | "MessagePort", 453 | "MessageEvent", 454 | "MessageChannel", 455 | "MediaStreamTrackVideoStats", 456 | "MediaStreamTrackProcessor", 457 | "MediaStreamTrackGenerator", 458 | "MediaStreamTrackEvent", 459 | "MediaStreamTrackAudioStats", 460 | "MediaStreamTrack", 461 | "MediaStreamEvent", 462 | "MediaStreamAudioSourceNode", 463 | "MediaStreamAudioDestinationNode", 464 | "MediaStream", 465 | "MediaSourceHandle", 466 | "MediaSource", 467 | "MediaRecorder", 468 | "MediaQueryListEvent", 469 | "MediaQueryList", 470 | "MediaList", 471 | "MediaError", 472 | "MediaEncryptedEvent", 473 | "MediaElementAudioSourceNode", 474 | "MediaCapabilities", 475 | "MathMLElement", 476 | "Location", 477 | "LayoutShiftAttribution", 478 | "LayoutShift", 479 | "LargestContentfulPaint", 480 | "KeyframeEffect", 481 | "KeyboardEvent", 482 | "IntersectionObserverEntry", 483 | "IntersectionObserver", 484 | "InputEvent", 485 | "InputDeviceInfo", 486 | "InputDeviceCapabilities", 487 | "Ink", 488 | "ImageData", 489 | "ImageCapture", 490 | "ImageBitmapRenderingContext", 491 | "ImageBitmap", 492 | "IdleDeadline", 493 | "IIRFilterNode", 494 | "IDBVersionChangeEvent", 495 | "IDBTransaction", 496 | "IDBRequest", 497 | "IDBOpenDBRequest", 498 | "IDBObjectStore", 499 | "IDBKeyRange", 500 | "IDBIndex", 501 | "IDBFactory", 502 | "IDBDatabase", 503 | "IDBCursorWithValue", 504 | "IDBCursor", 505 | "History", 506 | "HighlightRegistry", 507 | "Highlight", 508 | "Headers", 509 | "HashChangeEvent", 510 | "HTMLVideoElement", 511 | "HTMLUnknownElement", 512 | "HTMLUListElement", 513 | "HTMLTrackElement", 514 | "HTMLTitleElement", 515 | "HTMLTimeElement", 516 | "HTMLTextAreaElement", 517 | "HTMLTemplateElement", 518 | "HTMLTableSectionElement", 519 | "HTMLTableRowElement", 520 | "HTMLTableElement", 521 | "HTMLTableColElement", 522 | "HTMLTableCellElement", 523 | "HTMLTableCaptionElement", 524 | "HTMLStyleElement", 525 | "HTMLSpanElement", 526 | "HTMLSourceElement", 527 | "HTMLSlotElement", 528 | "HTMLSelectElement", 529 | "HTMLScriptElement", 530 | "HTMLQuoteElement", 531 | "HTMLProgressElement", 532 | "HTMLPreElement", 533 | "HTMLPictureElement", 534 | "HTMLParamElement", 535 | "HTMLParagraphElement", 536 | "HTMLOutputElement", 537 | "HTMLOptionsCollection", 538 | "HTMLOptionElement", 539 | "HTMLOptGroupElement", 540 | "HTMLObjectElement", 541 | "HTMLOListElement", 542 | "HTMLModElement", 543 | "HTMLMeterElement", 544 | "HTMLMetaElement", 545 | "HTMLMenuElement", 546 | "HTMLMediaElement", 547 | "HTMLMarqueeElement", 548 | "HTMLMapElement", 549 | "HTMLLinkElement", 550 | "HTMLLegendElement", 551 | "HTMLLabelElement", 552 | "HTMLLIElement", 553 | "HTMLInputElement", 554 | "HTMLImageElement", 555 | "HTMLIFrameElement", 556 | "HTMLHtmlElement", 557 | "HTMLHeadingElement", 558 | "HTMLHeadElement", 559 | "HTMLHRElement", 560 | "HTMLFrameSetElement", 561 | "HTMLFrameElement", 562 | "HTMLFormElement", 563 | "HTMLFormControlsCollection", 564 | "HTMLFontElement", 565 | "HTMLFieldSetElement", 566 | "HTMLEmbedElement", 567 | "HTMLElement", 568 | "HTMLDocument", 569 | "HTMLDivElement", 570 | "HTMLDirectoryElement", 571 | "HTMLDialogElement", 572 | "HTMLDetailsElement", 573 | "HTMLDataListElement", 574 | "HTMLDataElement", 575 | "HTMLDListElement", 576 | "HTMLCollection", 577 | "HTMLCanvasElement", 578 | "HTMLButtonElement", 579 | "HTMLBodyElement", 580 | "HTMLBaseElement", 581 | "HTMLBRElement", 582 | "HTMLAudioElement", 583 | "HTMLAreaElement", 584 | "HTMLAnchorElement", 585 | "HTMLAllCollection", 586 | "GeolocationPositionError", 587 | "GeolocationPosition", 588 | "GeolocationCoordinates", 589 | "Geolocation", 590 | "GamepadHapticActuator", 591 | "GamepadEvent", 592 | "GamepadButton", 593 | "Gamepad", 594 | "GainNode", 595 | "FormDataEvent", 596 | "FormData", 597 | "FontFaceSetLoadEvent", 598 | "FontFace", 599 | "FocusEvent", 600 | "FileReader", 601 | "FileList", 602 | "File", 603 | "FeaturePolicy", 604 | "External", 605 | "EventTarget", 606 | "EventSource", 607 | "EventCounts", 608 | "Event", 609 | "ErrorEvent", 610 | "EncodedVideoChunk", 611 | "EncodedAudioChunk", 612 | "ElementInternals", 613 | "Element", 614 | "EditContext", 615 | "DynamicsCompressorNode", 616 | "DragEvent", 617 | "DocumentType", 618 | "DocumentTimeline", 619 | "DocumentFragment", 620 | "Document", 621 | "DelegatedInkTrailPresenter", 622 | "DelayNode", 623 | "DecompressionStream", 624 | "DataTransferItemList", 625 | "DataTransferItem", 626 | "DataTransfer", 627 | "DOMTokenList", 628 | "DOMStringMap", 629 | "DOMStringList", 630 | "DOMRectReadOnly", 631 | "DOMRectList", 632 | "DOMRect", 633 | "DOMQuad", 634 | "DOMPointReadOnly", 635 | "DOMPoint", 636 | "DOMParser", 637 | "DOMMatrixReadOnly", 638 | "DOMMatrix", 639 | "DOMImplementation", 640 | "DOMException", 641 | "DOMError", 642 | "CustomStateSet", 643 | "CustomEvent", 644 | "CustomElementRegistry", 645 | "Crypto", 646 | "CountQueuingStrategy", 647 | "ConvolverNode", 648 | "ContentVisibilityAutoStateChangeEvent", 649 | "ConstantSourceNode", 650 | "CompressionStream", 651 | "CompositionEvent", 652 | "Comment", 653 | "CloseWatcher", 654 | "CloseEvent", 655 | "ClipboardEvent", 656 | "CharacterData", 657 | "CharacterBoundsUpdateEvent", 658 | "ChannelSplitterNode", 659 | "ChannelMergerNode", 660 | "CanvasRenderingContext2D", 661 | "CanvasPattern", 662 | "CanvasGradient", 663 | "CanvasCaptureMediaStreamTrack", 664 | "CSSVariableReferenceValue", 665 | "CSSUnparsedValue", 666 | "CSSUnitValue", 667 | "CSSTranslate", 668 | "CSSTransition", 669 | "CSSTransformValue", 670 | "CSSTransformComponent", 671 | "CSSSupportsRule", 672 | "CSSStyleValue", 673 | "CSSStyleSheet", 674 | "CSSStyleRule", 675 | "CSSStyleDeclaration", 676 | "CSSStartingStyleRule", 677 | "CSSSkewY", 678 | "CSSSkewX", 679 | "CSSSkew", 680 | "CSSScopeRule", 681 | "CSSScale", 682 | "CSSRuleList", 683 | "CSSRule", 684 | "CSSRotate", 685 | "CSSPropertyRule", 686 | "CSSPositionValue", 687 | "CSSPositionTryRule", 688 | "CSSPositionTryDescriptors", 689 | "CSSPerspective", 690 | "CSSPageRule", 691 | "CSSNumericValue", 692 | "CSSNumericArray", 693 | "CSSNamespaceRule", 694 | "CSSMediaRule", 695 | "CSSMatrixComponent", 696 | "CSSMathValue", 697 | "CSSMathSum", 698 | "CSSMathProduct", 699 | "CSSMathNegate", 700 | "CSSMathMin", 701 | "CSSMathMax", 702 | "CSSMathInvert", 703 | "CSSMathClamp", 704 | "CSSLayerStatementRule", 705 | "CSSLayerBlockRule", 706 | "CSSKeywordValue", 707 | "CSSKeyframesRule", 708 | "CSSKeyframeRule", 709 | "CSSImportRule", 710 | "CSSImageValue", 711 | "CSSGroupingRule", 712 | "CSSFontPaletteValuesRule", 713 | "CSSFontFaceRule", 714 | "CSSCounterStyleRule", 715 | "CSSContainerRule", 716 | "CSSConditionRule", 717 | "CSSAnimation", 718 | "CSS", 719 | "CDATASection", 720 | "ByteLengthQueuingStrategy", 721 | "BrowserCaptureMediaStreamTrack", 722 | "BroadcastChannel", 723 | "BlobEvent", 724 | "Blob", 725 | "BiquadFilterNode", 726 | "BeforeUnloadEvent", 727 | "BeforeInstallPromptEvent", 728 | "BaseAudioContext", 729 | "BarProp", 730 | "AudioWorkletNode", 731 | "AudioSinkInfo", 732 | "AudioScheduledSourceNode", 733 | "AudioProcessingEvent", 734 | "AudioParamMap", 735 | "AudioParam", 736 | "AudioNode", 737 | "AudioListener", 738 | "AudioDestinationNode", 739 | "AudioData", 740 | "AudioContext", 741 | "AudioBufferSourceNode", 742 | "AudioBuffer", 743 | "Attr", 744 | "AnimationTimeline", 745 | "AnimationPlaybackEvent", 746 | "AnimationEvent", 747 | "AnimationEffect", 748 | "Animation", 749 | "AnalyserNode", 750 | "AbstractRange", 751 | "AbortSignal", 752 | "AbortController", 753 | "AbsoluteOrientationSensor", 754 | "Accelerometer", 755 | "AudioDecoder", 756 | "AudioEncoder", 757 | "AudioWorklet", 758 | "BatteryManager", 759 | "Cache", 760 | "CacheStorage", 761 | "Clipboard", 762 | "ClipboardItem", 763 | "CookieChangeEvent", 764 | "CookieStore", 765 | "CookieStoreManager", 766 | "Credential", 767 | "CredentialsContainer", 768 | "CryptoKey", 769 | "DeviceMotionEvent", 770 | "DeviceMotionEventAcceleration", 771 | "DeviceMotionEventRotationRate", 772 | "DeviceOrientationEvent", 773 | "FederatedCredential", 774 | "GPU", 775 | "GPUAdapter", 776 | "GPUAdapterInfo", 777 | "GPUBindGroup", 778 | "GPUBindGroupLayout", 779 | "GPUBuffer", 780 | "GPUBufferUsage", 781 | "GPUCanvasContext", 782 | "GPUColorWrite", 783 | "GPUCommandBuffer", 784 | "GPUCommandEncoder", 785 | "GPUCompilationInfo", 786 | "GPUCompilationMessage", 787 | "GPUComputePassEncoder", 788 | "GPUComputePipeline", 789 | "GPUDevice", 790 | "GPUDeviceLostInfo", 791 | "GPUError", 792 | "GPUExternalTexture", 793 | "GPUInternalError", 794 | "GPUMapMode", 795 | "GPUOutOfMemoryError", 796 | "GPUPipelineError", 797 | "GPUPipelineLayout", 798 | "GPUQuerySet", 799 | "GPUQueue", 800 | "GPURenderBundle", 801 | "GPURenderBundleEncoder", 802 | "GPURenderPassEncoder", 803 | "GPURenderPipeline", 804 | "GPUSampler", 805 | "GPUShaderModule", 806 | "GPUShaderStage", 807 | "GPUSupportedFeatures", 808 | "GPUSupportedLimits", 809 | "GPUTexture", 810 | "GPUTextureUsage", 811 | "GPUTextureView", 812 | "GPUUncapturedErrorEvent", 813 | "GPUValidationError", 814 | "GravitySensor", 815 | "Gyroscope", 816 | "IdleDetector", 817 | "ImageDecoder", 818 | "ImageTrack", 819 | "ImageTrackList", 820 | "Keyboard", 821 | "KeyboardLayoutMap", 822 | "LinearAccelerationSensor", 823 | "Lock", 824 | "LockManager", 825 | "MIDIAccess", 826 | "MIDIConnectionEvent", 827 | "MIDIInput", 828 | "MIDIInputMap", 829 | "MIDIMessageEvent", 830 | "MIDIOutput", 831 | "MIDIOutputMap", 832 | "MIDIPort", 833 | "MediaDeviceInfo", 834 | "MediaDevices", 835 | "MediaKeyMessageEvent", 836 | "MediaKeySession", 837 | "MediaKeyStatusMap", 838 | "MediaKeySystemAccess", 839 | "MediaKeys", 840 | "NavigationPreloadManager", 841 | "NavigatorManagedData", 842 | "OrientationSensor", 843 | "PasswordCredential", 844 | "RelativeOrientationSensor", 845 | "ScreenDetailed", 846 | "ScreenDetails", 847 | "Sensor", 848 | "SensorErrorEvent", 849 | "ServiceWorker", 850 | "ServiceWorkerContainer", 851 | "ServiceWorkerRegistration", 852 | "StorageManager", 853 | "SubtleCrypto", 854 | "VideoDecoder", 855 | "VideoEncoder", 856 | "VirtualKeyboard", 857 | "WGSLLanguageFeatures", 858 | "WebTransport", 859 | "WebTransportBidirectionalStream", 860 | "WebTransportDatagramDuplexStream", 861 | "WebTransportError", 862 | "Worklet", 863 | "XRDOMOverlayState", 864 | "XRLayer", 865 | "XRWebGLBinding", 866 | "AuthenticatorAssertionResponse", 867 | "AuthenticatorAttestationResponse", 868 | "AuthenticatorResponse", 869 | "PublicKeyCredential", 870 | "Bluetooth", 871 | "BluetoothCharacteristicProperties", 872 | "BluetoothDevice", 873 | "BluetoothRemoteGATTCharacteristic", 874 | "BluetoothRemoteGATTDescriptor", 875 | "BluetoothRemoteGATTServer", 876 | "BluetoothRemoteGATTService", 877 | "CaptureController", 878 | "DocumentPictureInPicture", 879 | "EyeDropper", 880 | "FileSystemDirectoryHandle", 881 | "FileSystemFileHandle", 882 | "FileSystemHandle", 883 | "FileSystemWritableFileStream", 884 | "FontData", 885 | "FragmentDirective", 886 | "HID", 887 | "HIDConnectionEvent", 888 | "HIDDevice", 889 | "HIDInputReportEvent", 890 | "IdentityCredential", 891 | "IdentityProvider", 892 | "IdentityCredentialError", 893 | "LaunchParams", 894 | "LaunchQueue", 895 | "NavigatorLogin", 896 | "NotRestoredReasonDetails", 897 | "NotRestoredReasons", 898 | "OTPCredential", 899 | "PaymentAddress", 900 | "PaymentRequest", 901 | "PaymentRequestUpdateEvent", 902 | "PaymentResponse", 903 | "PaymentManager", 904 | "PaymentMethodChangeEvent", 905 | "Presentation", 906 | "PresentationAvailability", 907 | "PresentationConnection", 908 | "PresentationConnectionAvailableEvent", 909 | "PresentationConnectionCloseEvent", 910 | "PresentationConnectionList", 911 | "PresentationReceiver", 912 | "PresentationRequest", 913 | "PressureObserver", 914 | "PressureRecord", 915 | "ProtectedAudience", 916 | "Serial", 917 | "SerialPort", 918 | "StorageBucket", 919 | "StorageBucketManager", 920 | "USB", 921 | "USBAlternateInterface", 922 | "USBConfiguration", 923 | "USBConnectionEvent", 924 | "USBDevice", 925 | "USBEndpoint", 926 | "USBInTransferResult", 927 | "USBInterface", 928 | "USBIsochronousInTransferPacket", 929 | "USBIsochronousInTransferResult", 930 | "USBIsochronousOutTransferPacket", 931 | "USBIsochronousOutTransferResult", 932 | "USBOutTransferResult", 933 | "WakeLock", 934 | "WakeLockSentinel", 935 | "XRAnchor", 936 | "XRAnchorSet", 937 | "XRBoundedReferenceSpace", 938 | "XRCPUDepthInformation", 939 | "XRCamera", 940 | "XRDepthInformation", 941 | "XRFrame", 942 | "XRHitTestResult", 943 | "XRHitTestSource", 944 | "XRInputSource", 945 | "XRInputSourceArray", 946 | "XRInputSourceEvent", 947 | "XRInputSourcesChangeEvent", 948 | "XRLightEstimate", 949 | "XRLightProbe", 950 | "XRPose", 951 | "XRRay", 952 | "XRReferenceSpace", 953 | "XRReferenceSpaceEvent", 954 | "XRRenderState", 955 | "XRRigidTransform", 956 | "XRSession", 957 | "XRSessionEvent", 958 | "XRSpace", 959 | "XRSystem", 960 | "XRTransientInputHitTestResult", 961 | "XRTransientInputHitTestSource", 962 | "XRView", 963 | "XRViewerPose", 964 | "XRViewport", 965 | "XRWebGLDepthInformation", 966 | "XRWebGLLayer", 967 | "BackgroundFetchManager", 968 | "BackgroundFetchRecord", 969 | "BackgroundFetchRegistration", 970 | "BluetoothUUID", 971 | "CSSNestedDeclarations", 972 | "CSSViewTransitionRule", 973 | "CaretPosition", 974 | "ChapterInformation", 975 | "CropTarget", 976 | "DocumentPictureInPictureEvent", 977 | "Fence", 978 | "FencedFrameConfig", 979 | "HTMLFencedFrameElement", 980 | "MediaMetadata", 981 | "MediaSession", 982 | "NavigationActivation", 983 | "Notification", 984 | "PageRevealEvent", 985 | "PageSwapEvent", 986 | "PerformanceLongAnimationFrameTiming", 987 | "PerformanceScriptTiming", 988 | "PeriodicSyncManager", 989 | "PermissionStatus", 990 | "Permissions", 991 | "PushManager", 992 | "PushSubscription", 993 | "PushSubscriptionOptions", 994 | "RTCDataChannel", 995 | "RemotePlayback", 996 | "ScrollTimeline", 997 | "ViewTimeline", 998 | "SharedStorage", 999 | "SharedStorageWorklet", 1000 | "SharedWorker", 1001 | "SnapEvent", 1002 | "SpeechSynthesis", 1003 | "SpeechSynthesisErrorEvent", 1004 | "SpeechSynthesisEvent", 1005 | "SpeechSynthesisUtterance", 1006 | "SpeechSynthesisVoice", 1007 | "ViewTransitionTypeSet", 1008 | "WebSocketError", 1009 | "WebSocketStream", 1010 | ] 1011 | 1012 | 1013 | class ConstructorConfig: 1014 | def __init__( 1015 | self, 1016 | exposed=FlagExposed.kYes, 1017 | constructor=FlagConstructor.kDontAll, 1018 | length=0, 1019 | v8_array=0, # FlagArrayProto 1020 | immutable=0, 1021 | has_constructor=1, 1022 | hook=True, 1023 | ): 1024 | self.exposed = exposed 1025 | self.constructor = constructor 1026 | self.length = length 1027 | self.hook = hook 1028 | self.v8_array = v8_array 1029 | self.immutable = immutable 1030 | self.has_constructor = has_constructor 1031 | 1032 | def __call__(self, cls): 1033 | if self.exposed == FlagExposed.kYes: 1034 | exposed_constructs[cls.__name__] = cls 1035 | setattr(cls, "__v8_constructor__", self.constructor) 1036 | setattr(cls, "__v8_length__", self.length) 1037 | setattr(cls, "__v8_array__", self.v8_array) 1038 | setattr(cls, "__v8_immutable__", self.immutable) 1039 | setattr(cls, "__v8_has_constructor__", self.has_constructor) 1040 | if self.hook: 1041 | cls.__v8_get_hook__ = __v8_get_hook__ 1042 | cls.__v8_set_hook__ = __v8_set_hook__ 1043 | cls.__v8_method_hook__ = __v8_method_hook__ 1044 | cls.__v8_construct_hook__ = __v8_construct_hook__ 1045 | return cls 1046 | 1047 | def __str__(self): 1048 | return f'construct_{self.exposed}{self.constructor}{self.length}{int(self.v8_array)}{int(self.immutable)}{int(self.has_constructor)}' 1049 | 1050 | 1051 | def impl_warp(cls): 1052 | father = cls.__base__ 1053 | for name in cls.__dict__: 1054 | if name == '__module__': 1055 | continue 1056 | setattr(father, name, cls.__dict__[name]) 1057 | return father 1058 | 1059 | 1060 | def attr_warp(**attrs): 1061 | def decorator(func): 1062 | @wraps(func) 1063 | def wrapper(*args, **kwargs): 1064 | return func(*args, **kwargs) 1065 | for name, value in attrs.items(): 1066 | setattr(wrapper, name, value) 1067 | return wrapper 1068 | return decorator 1069 | 1070 | 1071 | class CtxTypeIndex: 1072 | count = 0 1073 | 1074 | @classmethod 1075 | def get(cls): 1076 | cls.count += 1 1077 | return cls.count 1078 | -------------------------------------------------------------------------------- /pyv8env/env/handler.py: -------------------------------------------------------------------------------- 1 | # import requests 2 | from curl_cffi import requests 3 | from .config import logger 4 | 5 | 6 | class Handler: 7 | 8 | def __init__(self, url=None, cookies=None, headers=None, proxies=None): 9 | self.s = None 10 | self.cookies = cookies or {} 11 | self.headers = headers or {} 12 | self.url = url 13 | self.proxies = proxies 14 | self.xhr = [] 15 | self.audio_event = [] # 存储AudioContext事件 方便触发 16 | self.offline_audio_context = [] # 存储OfflineAudioContext事件 方便触发 17 | self.rtc = [] # 存储RTCPeerConnection事件 方便触发 18 | 19 | self.setup() 20 | 21 | def setup(self): 22 | self.s = requests.Session() 23 | self.cookies and self.s.cookies.update(self.cookies) 24 | self.cookies = dict(self.s.cookies) 25 | 26 | def get_iframe_handler(self, src): 27 | return Handler(src, cookies=self.cookies, headers=self.headers, proxies=self.proxies) 28 | 29 | def update_document_cookie(self): 30 | self.cookies.update(dict(self.s.cookies)) 31 | 32 | def update_session_cookie(self): 33 | self.s.cookies.update(self.cookies) 34 | 35 | def on_html(self, url=None, headers=None): 36 | """ 处理html页面的下载 """ 37 | url = url or self.url 38 | if not url or url == 'http://127.0.0.1': 39 | return 40 | # raise Exception("参数错误,请设置url") 41 | headers = headers or self.headers 42 | res = self.s.get(url, headers=headers, proxies=self.proxies) 43 | return res.text 44 | 45 | def on_script_text(self, js_text): 46 | """ 拦截并处理判断是否执行该script内的js代码 """ 47 | return js_text 48 | 49 | def on_script_src(self, src, referer=None): 50 | """ 处理js的下载 """ 51 | headers = self.headers 52 | logger.debug(f"download js: {src}") 53 | if referer: 54 | headers = self.headers.copy() 55 | headers.update({'Referer': referer}) 56 | return self.s.get(src, headers=headers, proxies=self.proxies).text 57 | 58 | def on_fetch(self, *args): 59 | """ 处理fetch请求的下载 """ 60 | logger.debug(f"need fetch: {args}") 61 | 62 | def on_xhr_send(self, xhr): 63 | """ 处理xhr的send请求 """ 64 | pass 65 | 66 | def on_xhr_new(self, xhr): 67 | """ 处理xhr的send请求 """ 68 | self.xhr.append(xhr) 69 | 70 | def on_done(self, win): 71 | """ 当所有js代码执行完后 处理一些setTimeout事件及触发鼠标点击等事件 """ 72 | pass 73 | 74 | def on_performance_observer_observe(self, performance_obj, types): 75 | """处理PerformanceObserver.observe函数, 根据types的类型向window.performance._items中增加对应的值""" 76 | pass 77 | -------------------------------------------------------------------------------- /pyv8env/env/impl/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | # error 3 | from .error import * 4 | from .window_properties import WindowProperties 5 | 6 | # # plugins 7 | # from .plugins.mime_type_array import MimeTypeArray 8 | # from .plugins.plugin_array import PluginArray 9 | 10 | # element 11 | # from .element import * 12 | 13 | # # Event 14 | # from .event import * 15 | 16 | # # window depen 17 | # from .window_depen.custom_element_registry import CustomElementRegistry 18 | # from .window_depen.bar_prop import BarProp 19 | # from .window_depen.external import External 20 | # from .window_depen.visual_viewport import VisualViewport 21 | # from .window_depen.style_media import StyleMedia 22 | # from .window_depen.trusted_type_policy_factory import TrustedTypePolicyFactory 23 | # from .window_depen.scheduler import Scheduler 24 | # from .window_depen.media_query_list import MediaQueryList 25 | # from .window_depen.cache_storage import CacheStorage 26 | # from .window_depen.cookie_store import CookieStore 27 | # from .window_depen.document_picture_in_picture import DocumentPictureInPicture 28 | # from .window_depen.launch_queue import LaunchQueue 29 | # from .window_depen.shared_storage import SharedStorage 30 | # from .window_depen.speech_synthesis import SpeechSynthesis 31 | # from .window_depen.blob import Blob 32 | # from .window_depen.text_encoder import TextEncoder 33 | # from .window_depen.text_decoder import TextDecoder 34 | # from .window_depen.notification import Notification 35 | # 36 | # from .websocket import WebSocket 37 | # from .worker.worker import Worker 38 | # from .http.url import URL 39 | # from .http.response import Response 40 | # from .http.xml_http_request import XMLHttpRequest 41 | 42 | # from .performance import * 43 | # from .crypto import Crypto 44 | # from .web_rtc.rtc_peer_connection import RTCPeerConnection 45 | # from .audio_context import AudioContext 46 | # 47 | # from .message_channel import MessageChannel 48 | # from .broadcast_channel import BroadcastChannel 49 | # 50 | # from .dom.dom_rect_read_only import DOMRectReadOnly 51 | # from .dom_string_list import DOMStringList 52 | from .event_target import EventTarget 53 | # from .dom.node import Node 54 | # from .dom.document_fragment import DocumentFragment 55 | # from .mutation_observer import MutationObserver 56 | # 57 | # from .history import History 58 | # from .location import Location 59 | # from .navigator import Navigator 60 | # from .navigation import Navigation 61 | # from .storage import Storage 62 | # from .indexedDB import IDBFactory 63 | # from .screen import Screen 64 | # from .chrome_impl import chrome as v8chrome 65 | # 66 | # from .dom.css.css_style_declaration import CSSStyleDeclaration 67 | # from .dom.css.css import CSS 68 | # from .dom.element import Element 69 | # from .dom.html_element import HTMLElement 70 | # from .dom.document import Document 71 | # from .dom.html_document import HTMLDocument 72 | # # from .dom.tags.html_image_element import Image 73 | from .window import Window 74 | -------------------------------------------------------------------------------- /pyv8env/env/impl/error.py: -------------------------------------------------------------------------------- 1 | from pyv8env.env.chrome.flags import * 2 | from pyv8env.env.chrome.v8_dom_error import DOMError as V8DOMError 3 | from pyv8env.env.chrome.v8_dom_exception import DOMException as V8DOMException 4 | 5 | 6 | class V8Error(Exception): 7 | __v8_error__ = True 8 | 9 | 10 | class V8TypeError(TypeError): 11 | __v8_error__ = True 12 | 13 | 14 | class V8RangeError(Exception): 15 | __v8_error__ = True 16 | 17 | 18 | class V8ReferenceError(ReferenceError): 19 | __v8_error__ = True 20 | 21 | 22 | class V8SyntaxError(SyntaxError): 23 | __v8_error__ = True 24 | 25 | 26 | @impl_warp 27 | class DOMError(V8DOMError): 28 | __v8_error__ = True 29 | 30 | def get_name(self): 31 | return self._name 32 | 33 | def get_message(self): 34 | return self._message 35 | 36 | def __init__(self, name=None, message=None): 37 | if name is None: 38 | raise V8TypeError("Failed to construct 'DOMError': 1 argument required, but only 0 present") 39 | 40 | self._name = name 41 | self._message = message or '' 42 | super().__init__(message) 43 | self._attr = {} 44 | 45 | 46 | @impl_warp 47 | class DOMException(V8DOMException): 48 | __v8_error__ = True 49 | 50 | def get_code(self): 51 | return self._code 52 | 53 | def get_name(self): 54 | return self._name 55 | 56 | def get_message(self): 57 | return self._message 58 | 59 | def __call__(self, message, code=None): 60 | if code is not None: 61 | self._code = code 62 | return DOMException(message=message, name=self._name, code=self._code) 63 | 64 | def __init__(self, message=None, name=None, code=0, *args, **kw): 65 | self._name = name or "Error" 66 | self._message = message or '' 67 | self._code = code 68 | super(DOMException, self).__init__(message) 69 | self._attr = {} 70 | 71 | 72 | IndexSizeError = DOMException(name="IndexSizeError", code=1) 73 | InvalidCharacterError = DOMException(name="InvalidCharacterError", code=5) 74 | NotFoundError = DOMException(name="NotFoundError", code=8) 75 | NotSupportedError = DOMException(name="NotSupportedError", code=9) 76 | InvalidStateError = DOMException(name="InvalidStateError", code=11) 77 | InvalidAccessError = DOMException(name="InvalidAccessError", code=15) 78 | SecurityError = DOMException(name="SecurityError", code=18) 79 | -------------------------------------------------------------------------------- /pyv8env/env/impl/event_target.py: -------------------------------------------------------------------------------- 1 | from pyv8env.env.impl.error import V8TypeError 2 | from ..chrome.flags import * 3 | from ..chrome.v8_event_target import EventTarget as V8EventTarget 4 | 5 | 6 | @impl_warp 7 | class EventTarget(V8EventTarget): 8 | 9 | __v8_method__ = ( 10 | ("addEventListener", "fn_addEventListener", 2, 0, 1, 0, 0, 0, 0), 11 | ("dispatchEvent", "fn_dispatchEvent", 1, 0, 1, 0, 0, 0, 0), 12 | ("removeEventListener", "fn_removeEventListener", 2, 0, 1, 0, 0, 0, 0), 13 | ) 14 | 15 | def fn_addEventListener(self, *args): 16 | # logger.debug(f'{self}.addEventListener{tuple(args)}') 17 | 18 | if len(args) < 2: 19 | raise V8TypeError( 20 | f"Failed to execute 'addEventListener' on 'EventTarget': 2 arguments required, but only {len(args)} present." 21 | ) 22 | option = {"capture": False, "once": False, "passive": False} 23 | if len(args) >= 3: 24 | if isinstance(args[2], dict): 25 | option.update(args[2]) 26 | else: 27 | option["capture"] = bool(args[2]) 28 | type_ = args[0] 29 | listener = args[1] 30 | 31 | this_type_events = self._events.get(type_, []) 32 | if not this_type_events: 33 | self._events[type_] = this_type_events 34 | 35 | e = (listener, option) 36 | if e not in this_type_events: 37 | this_type_events.append(e) 38 | 39 | def fn_dispatchEvent(self, *args, capture=None): 40 | # logger.debug(f'start {self}.dispatchEvent{tuple(args)}') 41 | 42 | if len(args) == 0: 43 | raise V8TypeError( 44 | f"Failed to execute 'dispatchEvent' on 'EventTarget': 2 arguments required, but only 0 present." 45 | ) 46 | 47 | event = args[0] 48 | type_ = event.get_type() 49 | this_type_events = self._events.get(type_, []) 50 | for listener, option in this_type_events: 51 | if option["capture"] != capture and capture is not None: 52 | continue 53 | # logger.info(f"xxxx {self.__class__.__name__}") 54 | if self.__class__.__name__ == "Window": 55 | listener(event) 56 | else: 57 | logger.info(listener) 58 | if isinstance(listener, dict): 59 | if "handleEvent" not in listener: 60 | continue 61 | handle_event_func = listener["handleEvent"] 62 | handle_event_func.call(listener, event) 63 | else: 64 | listener.call(self, event) 65 | # logger.info(f"listener.call(self, event) 2") 66 | logger.debug(f'{self}.dispatchEvent{tuple(args)} -> {listener}') 67 | 68 | def fn_removeEventListener(self, *args): 69 | # logger.debug(f'{self}.removeEventListener{tuple(args)}') 70 | 71 | if len(args) < 2: 72 | raise V8TypeError( 73 | f"Failed to execute 'removeEventListener' on 'EventTarget': 2 arguments required, but only {len(args)} present." 74 | ) 75 | type_ = args[0] 76 | listener = args[1] 77 | this_type_events = self._events.get(type_) 78 | if not this_type_events: 79 | return 80 | for listener_, option in this_type_events: 81 | if listener == listener_: 82 | this_type_events.remove((listener_, option)) 83 | break 84 | 85 | def __init__(self, *args, **kw): 86 | self._attr = dict(kw) 87 | self._events = {} 88 | -------------------------------------------------------------------------------- /pyv8env/env/impl/window.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import binascii 3 | import time 4 | from copy import deepcopy 5 | from inspect import isclass 6 | 7 | import pyv8env 8 | from pyv8env import Null, Undefined 9 | from pyv8env.env.impl import * 10 | from pyv8env.env.impl.error import V8TypeError 11 | from pyv8env.env.impl.error import DOMException 12 | # from .window_depen.dom_file_system import DOMFileSystem 13 | from ..chrome.flags import * 14 | # from ..chrome.v8_message_event import MessageEvent 15 | from ..chrome.v8_window import Window as V8Window 16 | from ..handler import Handler 17 | from ..priority_queue import MemoryPriorityQueue 18 | 19 | 20 | @impl_warp 21 | class Window(V8Window): 22 | __v8_global_this__ = True 23 | 24 | def __v8__cross_origin_check__(self, interviewee): 25 | # origin = interviewee.origin 26 | # if origin == "about://": 27 | # return True 28 | # 29 | # if origin == self.get_origin(): 30 | # return True 31 | # 32 | # return False 33 | return True 34 | 35 | def __v8_name_get__(self, name): 36 | if name in exposed_constructs and name not in self._modify_exposed_constructs: 37 | return exposed_constructs[name] 38 | 39 | def __v8_name_set__(self, name, val): 40 | if name in exposed_constructs and name not in self._modify_exposed_constructs: 41 | self._modify_exposed_constructs.add(name) 42 | 43 | def __v8_name_enum__(self, *args): 44 | return exposed_names 45 | 46 | def __v8_name_query__(self, name): 47 | if name in exposed_names: 48 | return 2 49 | 50 | def __v8_index_get__(self, *args): 51 | pass 52 | 53 | def __v8_index_set__(self, *args): 54 | return pyv8env.Undefined 55 | 56 | def __v8_index_del__(self, *args): 57 | pass 58 | 59 | def __v8_index_enum__(self, *args): 60 | return 0 61 | 62 | def fn_structuredClone(self, *args): 63 | if len(args) == 0: 64 | raise V8TypeError( 65 | "Failed to execute 'structuredClone' on 'Window': 1 arguments required, but only 0 present.") 66 | raw = args[0] 67 | logger.warning("patch window.structuredClone") 68 | return raw 69 | 70 | def fn_postMessage(self, *args, win=None, delay=True): 71 | if len(args) == 0: 72 | raise V8TypeError("Failed to execute 'postMessage' on 'Window': 1 arguments required, but only 0 present.") 73 | 74 | logger.debug(f'v8_window.py -> Window.postMessage{tuple(args)} -> method') 75 | 76 | # if delay: 77 | # priority = getattr(self, "_message_priority", 0) 78 | # setattr(self, '_message_priority', priority + 1) 79 | # 80 | # self._on_finish_tasks.push(self.fn_postMessage, *args, priority=priority, win=win) 81 | # return 82 | # else: 83 | # logger.debug(f"target: {self.get_origin()}") 84 | # logger.debug(f"source: {win.get_origin()}") 85 | # data = args[0] 86 | # # if data.get('event') != 'extraParams': 87 | # e = MessageEvent("message", isTrusted=True, data=data, source=win, target=self, origin=win.get_origin()) 88 | # if on_message := self.get_onmessage(): 89 | # on_message(e) 90 | # 91 | # self.fn_dispatchEvent(e) 92 | # win._on_finish_tasks.exec() 93 | 94 | def fn_requestAnimationFrame(self, *args, delay=False): 95 | if len(args) == 0: 96 | raise V8TypeError( 97 | "Failed to execute 'requestAnimationFrame' on 'Window': 1 arguments required, but only 0 present.") 98 | i = getattr(self, '_requestAnimationFrame', 1) 99 | setattr(self, '_requestAnimationFrame', i + 1) 100 | if delay: 101 | self._on_finish_tasks.push(self.fn_requestAnimationFrame, args) 102 | else: 103 | args[0]() 104 | return i 105 | 106 | def fn_matchMedia(self, *args): 107 | if len(args) == 0: 108 | raise V8TypeError("Failed to execute 'matchMedia' on 'Window': 1 arguments required, but only 0 present.") 109 | # return MediaQueryList(args[0]) 110 | 111 | def fn_fetch(self, *args): 112 | if len(args) == 0: 113 | raise V8TypeError("Failed to execute 'fetch' on 'Window': 1 argument required, but only 0 present.") 114 | 115 | # url = self.get_document().deal_url(args[0]) 116 | # with self.get_performance().add_resource_entry() as item: 117 | # item['name'] = url 118 | # item['initiatorType'] = 'fetch' 119 | # ret = self.handler.on_fetch(url) 120 | # 121 | # status = (ret and ret.status_code) or 200 122 | # ok = status < 300 123 | # logger.debug(f'v8_window.py -> Window.fetch{tuple(args)} -> method {url}') 124 | # kw_response = dict(ok=ok, status=status) 125 | # if ret: 126 | # kw_response.update(dict(content=ret.content, kw_headers=dict(ret.headers))) 127 | # return self._ctx.Promise.resolve(Response(**kw_response)) 128 | 129 | def fn_atob(self, *args): 130 | if len(args) == 0: 131 | raise V8TypeError("Failed to execute 'atob' on 'Window': 1 argument required, but only 0 present.") 132 | # logger.debug(f'window.py -> Window.atob{tuple(args)} -> method') 133 | s = str(args[0]) 134 | try: 135 | return base64.b64decode(s + '=' * (4 - len(s) % 4)).decode('latin-1') 136 | except binascii.Error: 137 | raise InvalidCharacterError( 138 | "Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.") 139 | 140 | def fn_btoa(self, *args): 141 | if len(args) == 0: 142 | raise V8TypeError("Failed to execute 'btoa' on 'Window': 1 argument required, but only 0 present.") 143 | # logger.debug(f'v8_window.py -> Window.btoa{tuple(args)} -> method') 144 | return base64.b64encode(str(args[0]).encode('latin-1')).decode('latin-1') 145 | 146 | def fn_webkitRequestFileSystem(self, *args, delay=True): 147 | # 文件存储系统 类似缓存 非标准接口 148 | if len(args) < 3: 149 | raise V8TypeError( 150 | f"Failed to execute 'webkitRequestFileSystem' on 'Window': 3 arguments required, but only {len(args)} present.") 151 | if args[0] not in (0, 1): 152 | if len(args) >= 3: 153 | failed_cb = args[3] 154 | failed_cb(DOMException( 155 | "It was determined that certain files are unsafe for access within a Web application, or that " 156 | "too many calls are being made on file resources.", "SecurityError", 18)) 157 | # logger.debug(args) 158 | 159 | success_cb = args[3] 160 | # success_cb( 161 | # DOMFileSystem()) 162 | # logger.debug(f"fn_webkitRequestFileSystem {success_cb}") 163 | 164 | def fn_getComputedStyle(self, *args): 165 | if len(args) == 0: 166 | raise V8TypeError( 167 | "Failed to execute 'getComputedStyle' on 'Window': 1 argument required, but only 0 present.") 168 | # ele = args[0] 169 | # if not isinstance(ele, HTMLElement): 170 | # raise V8TypeError("Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.") 171 | # background_color = GetComputedStyle_Mapper.get(ele._bs_tag.get("style"), "") 172 | # if not background_color: 173 | # logger.debug( 174 | # f'patch -> 请hook获取具体的CSSStyleDeclaration值 -> Window.getComputedStyle{tuple(args)} -> method') 175 | # logger.debug(f'Window.getComputedStyle{tuple(args)} -> {ele._bs_tag.get("style")} -> {background_color}') 176 | # return CSSStyleDeclaration(backgroundColor=background_color) 177 | 178 | def fn_clearTimeout(self, *args): 179 | if len(args) >= 1 and args[0] in self._timers: 180 | del self._timers[args[0]] 181 | 182 | def fn_clearInterval(self, *args): 183 | if len(args) >= 1 and args[0] in self._timers: 184 | del self._timers[args[0]] 185 | 186 | def fn_setTimeout(self, *args, worker=False): 187 | if len(args) == 0: 188 | raise V8TypeError("Failed to execute 'setTimeout' on 'Window': 1 argument required, but only 0 present.") 189 | self._timer_index += 1 190 | delay = 0 191 | arguments = [] 192 | if len(args) >= 2: 193 | delay = args[1] 194 | if str(delay) == 'nan': 195 | delay = 0 196 | if len(args) >= 3: 197 | arguments = args[2:] 198 | self._timers[self._timer_index] = { 199 | "delay": delay, "type": 'Timeout', "start": int(time.time() * 1000), "func": args[0], 200 | "arguments": arguments, "worker": worker 201 | } 202 | # logger.debug(f"setTimeout: {self._timer_index} {self.get_origin()} {self._timers[self._timer_index]}") 203 | return self._timer_index 204 | 205 | def fn_setInterval(self, *args): 206 | if len(args) == 0: 207 | raise V8TypeError("Failed to execute 'setInterval' on 'Window': 1 argument required, but only 0 present.") 208 | self._timer_index += 1 209 | delay = 0 210 | arguments = [] 211 | if len(args) >= 2: 212 | delay = args[1] 213 | if len(args) >= 3: 214 | arguments = args[2:] 215 | self._timers[self._timer_index] = { 216 | "delay": delay, "type": 'Interval', "start": int(time.time() * 1000), "func": args[0], 217 | "arguments": arguments 218 | } 219 | logger.debug(f"setInterval: {self._timer_index} {self._timers[self._timer_index]}") 220 | return self._timer_index 221 | 222 | def debugger(self): 223 | self._ctx.exec_js('debugger;') 224 | 225 | @property 226 | def ctx(self): 227 | return self._ctx 228 | 229 | def start(self, devtool=False, callback=None): 230 | code = """ 231 | faker.log = console.log; 232 | delete SharedArrayBuffer; 233 | """ 234 | if self._wasm: 235 | code += """ 236 | WebAssembly.compile = function compile(bufferSource) { 237 | try { 238 | let module = new WebAssembly.Module(bufferSource); 239 | return Promise.resolve(module); 240 | } catch (err) { 241 | return Promise.reject(err); 242 | } 243 | } 244 | 245 | WebAssembly.instantiate= function instantiate(buffer_or_module, importObject){ 246 | try { 247 | if (ArrayBuffer.isView(buffer_or_module) || buffer_or_module instanceof ArrayBuffer ) { 248 | let module = new WebAssembly.Module(buffer_or_module); 249 | let instance = new WebAssembly.Instance(module, importObject); 250 | return Promise.resolve({module:module, instance:instance}); 251 | }else if (buffer_or_module instanceof WebAssembly.Module) { 252 | let instance = new WebAssembly.Instance(buffer_or_module, importObject); 253 | return Promise.resolve(instance); 254 | } else { 255 | throw TypeError("WebAssembly.instantiate(): Argument 0 must be a buffer source"); 256 | } 257 | } catch (err) { 258 | return Promise.reject(err); 259 | } 260 | }; 261 | """ 262 | if self._hook: 263 | code += "faker.hook=true;" 264 | self._ctx.exec_js(code) 265 | 266 | if devtool: 267 | from pyv8env import start_devtools 268 | # start_devtools(self._ctx, self, callback=callback if callback else self.get_document().parse_html) 269 | start_devtools(self._ctx, self, callback=callback) 270 | else: 271 | if callback: 272 | # for _ in self.get_document()._bs_tag.iter_tags(): 273 | # pass 274 | callback(self._ctx, self) 275 | else: 276 | # self.get_document().parse_html(self._ctx) 277 | pass 278 | 279 | def exec_timeout(self, timeout=True, interval=True, worker=False, skip_time=0, delay=float('inf')): 280 | flag = True 281 | while flag: 282 | flag = False 283 | for index, _ in sorted(self._timers.items(), key=lambda item: item[1]['delay'] + item[1]['start']): 284 | now = int(time.time() * 1000) + skip_time 285 | task = self._timers.get(index) 286 | 287 | if task["delay"] > delay: 288 | logger.debug(f"----{index} pass -> {task}") 289 | continue 290 | 291 | if task["start"] + task["delay"] > now: 292 | logger.debug(f"----{index} pass -> {task}") 293 | continue 294 | 295 | if timeout and task["type"] == "Timeout" and task["worker"] == worker: 296 | logger.debug(f"----{index} do -> {task}") 297 | flag = True 298 | if isinstance(task["func"], str): 299 | self._ctx.exec_js(task["func"]) 300 | else: 301 | logger.info(task["func"]) 302 | logger.info(task["arguments"]) 303 | task["func"].call(task["func"], *task["arguments"]) 304 | if index in self._timers: 305 | del self._timers[index] 306 | break 307 | elif interval and task["type"] == "Interval" and task["worker"] == worker: 308 | logger.debug(f"----{index} do -> {task}") 309 | flag = True 310 | if isinstance(task["func"], str): 311 | self._ctx.exec_js(task["func"]) 312 | else: 313 | task["func"](*task["arguments"]) 314 | task["start"] = now 315 | task["times"] = task.get("times", 0) + 1 316 | break 317 | else: 318 | logger.debug(f"----{index} pass -> {task}") 319 | 320 | def exec_timer_one(self, timeout=True, interval=True, worker=False, delay=float('inf')): 321 | for index in list(self._timers.keys()): 322 | task = self._timers[index] 323 | 324 | if task["delay"] != delay: 325 | logger.debug(f"----{index} pass -> {task}") 326 | continue 327 | 328 | if timeout and task["type"] == "Timeout" and task["worker"] == worker: 329 | logger.debug(f"----{index} do -> {task}") 330 | if isinstance(task["func"], str): 331 | self._ctx.exec_js(task["func"]) 332 | else: 333 | logger.info(task["func"]) 334 | logger.info(task["arguments"]) 335 | task["func"].call(task["func"], *task["arguments"]) 336 | if index in self._timers: 337 | del self._timers[index] 338 | elif interval and task["type"] == "Interval" and task["worker"] == worker: 339 | logger.debug(f"----{index} do -> {task}") 340 | if isinstance(task["func"], str): 341 | self._ctx.exec_js(task["func"]) 342 | else: 343 | task["func"](*task["arguments"]) 344 | task["start"] = int(time.time() * 1000) 345 | task["times"] = task.get("times", 0) + 1 346 | else: 347 | logger.debug(f"----{index} pass -> {task}") 348 | 349 | def dispatch_event(self, target, ev): 350 | nodes = [] 351 | ev._attr['bubbles'] = True 352 | ev._attr['cancelable'] = True 353 | ev._attr['isTrusted'] = True 354 | ev._attr['target'] = target 355 | ev._attr['srcElement'] = target 356 | ev._attr['view'] = self 357 | ev._attr['which'] = 1 358 | 359 | self._attr['event'] = ev 360 | 361 | # 找出所有element对象 362 | point = target 363 | while point and point != self: 364 | nodes.append(point) 365 | point = point.get_parentNode() 366 | nodes.append(self) 367 | 368 | # 触发捕获事件 369 | for node in nodes[::-1]: 370 | if ev._attr.get("cancelBubble"): 371 | break 372 | ev._attr['eventPhase'] = 1 373 | if node == target: 374 | ev._attr['eventPhase'] = 2 375 | ev._attr['currentTarget'] = node 376 | onevent = node._attr.get('on' + ev.get_type()) 377 | if onevent: 378 | onevent.call(node, ev) 379 | node.fn_dispatchEvent(ev, capture=True) 380 | 381 | # 触发冒泡事件 382 | ev._attr["cancelBubble"] = False 383 | for node in nodes: 384 | if ev._attr.get("cancelBubble"): 385 | break 386 | ev._attr['eventPhase'] = 3 387 | if node == target: 388 | ev._attr['eventPhase'] = 2 389 | ev._attr['currentTarget'] = node 390 | onevent = node._attr.get('on' + ev.get_type()) 391 | if onevent: 392 | onevent.call(node, ev) 393 | node.fn_dispatchEvent(ev, capture=False) 394 | 395 | self._attr['event'] = Undefined 396 | 397 | def done(self): 398 | if self.handler: 399 | self.handler.on_done(self) 400 | 401 | def release(self): 402 | self._ctx = None 403 | 404 | def __init__(self, hook: bool = False, url: str = None, cookies: dict = None, headers: dict = None, 405 | handler: Handler = None, wasm: bool = False, proxies=None, top=None, parent=None, origin=None, 406 | run_worker_now=True, ctx_type="[Top]", **kw): 407 | self._hook = hook 408 | self._wasm = wasm 409 | if not url: 410 | url = "http://127.0.0.1" # raise Exception("Set url Please!") 411 | 412 | if handler is None: 413 | handler = Handler(url=url, cookies=cookies or {}, headers=headers, proxies=proxies) 414 | self.handler = handler 415 | 416 | self._kw = deepcopy(kw) 417 | 418 | # self._location = Location(url, **kw.pop('kw_location', {})) 419 | # self._navigator = Navigator(window=self, **kw.pop('kw_navigator', {})) 420 | default = { 421 | # "location": self._location, "origin": origin or self._location.get_origin(), 422 | # "document": HTMLDocument(location=self._location, win=self, **kw.pop('kw_document', {})), 423 | # "navigator": self._navigator, "customElements": CustomElementRegistry(), 424 | # "history": History(location=self._location, **kw.pop('kw_history', {})), 425 | # "navigation": Navigation(**kw.pop('kw_navigation', {})), 426 | # "indexedDB": IDBFactory(self, **kw.pop('kw_indexedDB', {})), 427 | # "sessionStorage": Storage(**kw.pop('kw_sessionStorage', {})), 428 | # "localStorage": Storage(**kw.pop('kw_localStorage', {})), "screen": Screen(**kw.pop('kw_screen', {})), 429 | 430 | "outerWidth": 2560, "outerHeight": 1040, "innerWidth": 2560, "innerHeight": 919, "scrollX": 0, 431 | "pageXOffset": 0, "scrollY": 0, "pageYOffset": 0, "length": 0, "screenX": 0, "screenY": 0, "screenLeft": 0, 432 | # "screenTop": 0, "devicePixelRatio": 1, "locationbar": BarProp(), "menubar": BarProp(), 433 | # "personalbar": BarProp(), "scrollbars": BarProp(), "statusbar": BarProp(), "toolbar": BarProp(), 434 | # "status": "", "name": "", "closed": False, "opener": Null, "frameElement": Null, "external": External(), 435 | # "visualViewport": VisualViewport(), "clientInformation": self._navigator, "styleMedia": StyleMedia(), 436 | # "isSecureContext": True, "trustedTypes": TrustedTypePolicyFactory(), 437 | # "performance": Performance(self._location.get_href(), **kw.pop('kw_performance', {})), 438 | # "crypto": Crypto(win=self), "launchQueue": LaunchQueue(), "sharedStorage": SharedStorage(), 439 | # "documentPictureInPicture": DocumentPictureInPicture(), "originAgentCluster": True, 440 | # "offscreenBuffering": True, "credentialless": False, "speechSynthesis": SpeechSynthesis(), 441 | # "crossOriginIsolated": False, "scheduler": Scheduler(), "caches": CacheStorage(), 442 | # "cookieStore": CookieStore(), "onbeforeinstallprompt": Null, "onbeforexrselect": Null, "onabort": Null, 443 | "onbeforeinput": Null, "onbeforetoggle": Null, "onblur": Null, "oncancel": Null, "oncanplay": Null, 444 | "oncanplaythrough": Null, "onchange": Null, "onclick": Null, "onclose": Null, "oncontextlost": Null, 445 | "oncontextmenu": Null, "ondblclick": Null, "ondrag": Null, "ondragend": Null, "ondragenter": Null, 446 | "ondragleave": Null, "ondragover": Null, "ondragstart": Null, "ondrop": Null, "ondurationchange": Null, 447 | "onemptied": Null, "onended": Null, "onerror": Null, "onfocus": Null, "onformdata": Null, "oninput": Null, 448 | "oninvalid": Null, "onkeydown": Null, "onkeypress": Null, "onkeyup": Null, "onload": Null, 449 | "onloadeddata": Null, "onloadedmetadata": Null, "onloadstart": Null, "onmousedown": Null, 450 | "onmouseenter": Null, "onsearch": Null, "onmouseleave": Null, "onmousemove": Null, "onmouseout": Null, 451 | "onmouseover": Null, "onmouseup": Null, "onmousewheel": Null, "onpause": Null, "onplay": Null, 452 | "onplaying": Null, "onprogress": Null, "onratechange": Null, "onreset": Null, "onresize": Null, 453 | "onscroll": Null, "onappinstalled": Null, "onsecuritypolicyviolation": Null, "onseeked": Null, 454 | "onseeking": Null, "onselect": Null, "onslotchange": Null, "onstalled": Null, "onsubmit": Null, 455 | "onsuspend": Null, "ontimeupdate": Null, "ontoggle": Null, "onvolumechange": Null, "onwaiting": Null, 456 | "onwebkitanimationend": Null, "onwebkitanimationiteration": Null, "onwebkitanimationstart": Null, 457 | "onwebkittransitionend": Null, "onwheel": Null, "onauxclick": Null, "ongotpointercapture": Null, 458 | "onlostpointercapture": Null, "onpointerdown": Null, "onpointermove": Null, "onpointerrawupdate": Null, 459 | "onpointerup": Null, "onpointercancel": Null, "onpointerover": Null, "onpointerout": Null, 460 | "onpointerenter": Null, "onpointerleave": Null, "onselectstart": Null, "onselectionchange": Null, 461 | "onanimationend": Null, "onanimationiteration": Null, "onanimationstart": Null, "ontransitionrun": Null, 462 | "ontransitionstart": Null, "ontransitionend": Null, "ontransitioncancel": Null, "onafterprint": Null, 463 | "onbeforeprint": Null, "onbeforeunload": Null, "onhashchange": Null, "onlanguagechange": Null, 464 | "onmessage": Null, "onmessageerror": Null, "onoffline": Null, "onpagehide": Null, "onpageshow": Null, 465 | "onscrollend": Null, "onpopstate": Null, "onrejectionhandled": Null, "onstorage": Null, 466 | "onunhandledrejection": Null, "onunload": Null, "onpageswap": Null, "onpagereveal": Null, "fence": Null, 467 | "onbeforematch": Null, "ondevicemotion": Null, "ondeviceorientation": Null, 468 | "ondeviceorientationabsolute": Null, "ononline": Null, "oncontentvisibilityautostatechange": Null, 469 | "oncuechange": Null, "oncontextrestored": Null, "onscrollsnapchange": Null, "onscrollsnapchanging": Null, 470 | "event": Undefined, 471 | } 472 | for key, val in default.items(): 473 | kw.setdefault(key, val) 474 | super(Window, self).__init__(**kw) 475 | self._attr.update({ 476 | "window": self, "frames": self, "self": self, "top": self if top is None else top, 477 | "parent": self if parent is None else parent 478 | }) 479 | 480 | self._timers = {} 481 | self._timer_index = 0 482 | self._timer_index_worker = 0 483 | 484 | self._blob_cache = {} 485 | self._run_worker_now = run_worker_now 486 | 487 | self._on_finish_tasks = MemoryPriorityQueue() 488 | self._modify_exposed_constructs = set() 489 | self._ctx = pyv8env.Context(global_this=self, hook=hook, ctx_type=ctx_type) 490 | -------------------------------------------------------------------------------- /pyv8env/env/impl/window_properties.py: -------------------------------------------------------------------------------- 1 | from pyv8env import Null 2 | from pyv8env.env.chrome.flags import * 3 | from pyv8env.env.chrome.v8_window_properties import WindowProperties as V8WindowProperties 4 | 5 | 6 | @impl_warp 7 | class WindowProperties(V8WindowProperties): 8 | 9 | def __v8_property_name_get__(self, name): 10 | # try: 11 | # ret = self.get_document().get_all().fn_namedItem(name) 12 | # if ret is not Null: 13 | # return ret 14 | # except: 15 | # pass 16 | pass 17 | -------------------------------------------------------------------------------- /pyv8env/env/priority_queue.py: -------------------------------------------------------------------------------- 1 | from queue import PriorityQueue, Empty 2 | 3 | from loguru import logger 4 | 5 | 6 | class Task: 7 | def __init__(self, fn, args=None, kw=None): 8 | self._fn = fn 9 | self._args = args or () 10 | self._kw = kw or {} 11 | 12 | def exec(self): 13 | self._fn(*self._args, **self._kw, delay=False) 14 | 15 | def __lt__(self, o): 16 | return True 17 | 18 | 19 | class MemoryPriorityQueue: 20 | 21 | def __init__(self, max_size: int = 0) -> None: 22 | self.queue = PriorityQueue(max_size) 23 | 24 | def len(self) -> int: 25 | return self.queue.qsize() 26 | 27 | def push_batch(self, tasks) -> None: 28 | for task in tasks: 29 | self.push_task(task) 30 | 31 | def push_task(self, task: tuple, priority: int = 0) -> None: 32 | self.queue.put((priority, task)) 33 | 34 | def push(self, fn: callable, *args, priority: int = 0, **kw) -> None: 35 | self.queue.put((priority, Task(fn, args, kw))) 36 | 37 | def pop(self): 38 | try: 39 | score, task = self.queue.get_nowait() 40 | return task 41 | except Empty: 42 | pass 43 | 44 | def exec(self): 45 | for _ in range(len(self)): 46 | logger.info("---start-queue-task---") 47 | try: 48 | score, task = self.queue.get_nowait() 49 | task.exec() 50 | except Empty: 51 | pass 52 | 53 | def exec_one(self): 54 | for _ in range(len(self)): 55 | logger.info("---start-queue-task---") 56 | try: 57 | score, task = self.queue.get_nowait() 58 | task.exec() 59 | break 60 | except Empty: 61 | pass 62 | 63 | def __len__(self): 64 | return self.queue.qsize() 65 | 66 | def __iter__(self): 67 | return self 68 | 69 | def __next__(self): 70 | try: 71 | score, task = self.queue.get_nowait() 72 | return task 73 | except Empty: 74 | raise StopIteration 75 | 76 | 77 | if __name__ == '__main__': 78 | def test(*args, delay=True): 79 | print(args) 80 | 81 | 82 | q = MemoryPriorityQueue() 83 | q.push(test, (111, 111), priority=0) 84 | q.push(test, (222, 222), priority=-1) 85 | q.exec() 86 | -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | sys.path.append(os.path.dirname(os.getcwd())) 5 | 6 | import pyv8env 7 | from pyv8env.env.impl import * 8 | 9 | 10 | def callback(ctx, *arg): 11 | print(ctx.exec_js('''debugger; 1+1;''')) 12 | 13 | print(ctx.exec_js('''debugger; window.outerWidth;''')) 14 | 15 | try: 16 | print(ctx.exec_js('''debugger; xxx; ''', 'VM1')) 17 | except pyv8env.JSException as e: 18 | print(e) 19 | 20 | 21 | def test(): 22 | win = Window(hook=True, ) 23 | win.start(devtool=False, callback=callback) 24 | # win.start(devtool=True, callback=callback) 25 | 26 | 27 | if __name__ == '__main__': 28 | test() 29 | --------------------------------------------------------------------------------