600 lines
18 KiB
Python
Executable File
600 lines
18 KiB
Python
Executable File
# DO NOT EDIT THIS FILE!
|
|
#
|
|
# This file is generated from the CDP specification. If you need to make
|
|
# changes, edit the generator and regenerate all of the modules.
|
|
#
|
|
# CDP domain: Target
|
|
from __future__ import annotations
|
|
from .util import event_class, T_JSON_DICT
|
|
from dataclasses import dataclass
|
|
import enum
|
|
import typing
|
|
from . import browser
|
|
|
|
|
|
class TargetID(str):
|
|
def to_json(self) -> str:
|
|
return self
|
|
|
|
@classmethod
|
|
def from_json(cls, json: str) -> TargetID:
|
|
return cls(json)
|
|
|
|
def __repr__(self):
|
|
return 'TargetID({})'.format(super().__repr__())
|
|
|
|
|
|
class SessionID(str):
|
|
'''
|
|
Unique identifier of attached debugging session.
|
|
'''
|
|
def to_json(self) -> str:
|
|
return self
|
|
|
|
@classmethod
|
|
def from_json(cls, json: str) -> SessionID:
|
|
return cls(json)
|
|
|
|
def __repr__(self):
|
|
return 'SessionID({})'.format(super().__repr__())
|
|
|
|
|
|
@dataclass
|
|
class TargetInfo:
|
|
target_id: TargetID
|
|
|
|
type_: str
|
|
|
|
title: str
|
|
|
|
url: str
|
|
|
|
#: Whether the target has an attached client.
|
|
attached: bool
|
|
|
|
#: Opener target Id
|
|
opener_id: typing.Optional[TargetID] = None
|
|
|
|
browser_context_id: typing.Optional[browser.BrowserContextID] = None
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['targetId'] = self.target_id.to_json()
|
|
json['type'] = self.type_
|
|
json['title'] = self.title
|
|
json['url'] = self.url
|
|
json['attached'] = self.attached
|
|
if self.opener_id is not None:
|
|
json['openerId'] = self.opener_id.to_json()
|
|
if self.browser_context_id is not None:
|
|
json['browserContextId'] = self.browser_context_id.to_json()
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
target_id=TargetID.from_json(json['targetId']),
|
|
type_=str(json['type']),
|
|
title=str(json['title']),
|
|
url=str(json['url']),
|
|
attached=bool(json['attached']),
|
|
opener_id=TargetID.from_json(json['openerId']) if 'openerId' in json else None,
|
|
browser_context_id=browser.BrowserContextID.from_json(json['browserContextId']) if 'browserContextId' in json else None,
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class RemoteLocation:
|
|
host: str
|
|
|
|
port: int
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['host'] = self.host
|
|
json['port'] = self.port
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
host=str(json['host']),
|
|
port=int(json['port']),
|
|
)
|
|
|
|
|
|
def activate_target(
|
|
target_id: TargetID
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Activates (focuses) the target.
|
|
|
|
:param target_id:
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['targetId'] = target_id.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.activateTarget',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def attach_to_target(
|
|
target_id: TargetID,
|
|
flatten: typing.Optional[bool] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,SessionID]:
|
|
'''
|
|
Attaches to the target with given id.
|
|
|
|
:param target_id:
|
|
:param flatten: *(Optional)* Enables "flat" access to the session via specifying sessionId attribute in the commands. We plan to make this the default, deprecate non-flattened mode, and eventually retire it. See crbug.com/991325.
|
|
:returns: Id assigned to the session.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['targetId'] = target_id.to_json()
|
|
if flatten is not None:
|
|
params['flatten'] = flatten
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.attachToTarget',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return SessionID.from_json(json['sessionId'])
|
|
|
|
|
|
def attach_to_browser_target() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,SessionID]:
|
|
'''
|
|
Attaches to the browser target, only uses flat sessionId mode.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:returns: Id assigned to the session.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.attachToBrowserTarget',
|
|
}
|
|
json = yield cmd_dict
|
|
return SessionID.from_json(json['sessionId'])
|
|
|
|
|
|
def close_target(
|
|
target_id: TargetID
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,bool]:
|
|
'''
|
|
Closes the target. If the target is a page that gets closed too.
|
|
|
|
:param target_id:
|
|
:returns:
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['targetId'] = target_id.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.closeTarget',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return bool(json['success'])
|
|
|
|
|
|
def expose_dev_tools_protocol(
|
|
target_id: TargetID,
|
|
binding_name: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Inject object to the target's main frame that provides a communication
|
|
channel with browser target.
|
|
|
|
Injected object will be available as ``window[bindingName]``.
|
|
|
|
The object has the follwing API:
|
|
- ``binding.send(json)`` - a method to send messages over the remote debugging protocol
|
|
- ``binding.onmessage = json => handleMessage(json)`` - a callback that will be called for the protocol notifications and command responses.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param target_id:
|
|
:param binding_name: *(Optional)* Binding name, 'cdp' if not specified.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['targetId'] = target_id.to_json()
|
|
if binding_name is not None:
|
|
params['bindingName'] = binding_name
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.exposeDevToolsProtocol',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def create_browser_context(
|
|
dispose_on_detach: typing.Optional[bool] = None,
|
|
proxy_server: typing.Optional[str] = None,
|
|
proxy_bypass_list: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,browser.BrowserContextID]:
|
|
'''
|
|
Creates a new empty BrowserContext. Similar to an incognito profile but you can have more than
|
|
one.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param dispose_on_detach: *(Optional)* If specified, disposes this context when debugging session disconnects.
|
|
:param proxy_server: *(Optional)* Proxy server, similar to the one passed to --proxy-server
|
|
:param proxy_bypass_list: *(Optional)* Proxy bypass list, similar to the one passed to --proxy-bypass-list
|
|
:returns: The id of the context created.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
if dispose_on_detach is not None:
|
|
params['disposeOnDetach'] = dispose_on_detach
|
|
if proxy_server is not None:
|
|
params['proxyServer'] = proxy_server
|
|
if proxy_bypass_list is not None:
|
|
params['proxyBypassList'] = proxy_bypass_list
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.createBrowserContext',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return browser.BrowserContextID.from_json(json['browserContextId'])
|
|
|
|
|
|
def get_browser_contexts() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.List[browser.BrowserContextID]]:
|
|
'''
|
|
Returns all browser contexts created with ``Target.createBrowserContext`` method.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:returns: An array of browser context ids.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.getBrowserContexts',
|
|
}
|
|
json = yield cmd_dict
|
|
return [browser.BrowserContextID.from_json(i) for i in json['browserContextIds']]
|
|
|
|
|
|
def create_target(
|
|
url: str,
|
|
width: typing.Optional[int] = None,
|
|
height: typing.Optional[int] = None,
|
|
browser_context_id: typing.Optional[browser.BrowserContextID] = None,
|
|
enable_begin_frame_control: typing.Optional[bool] = None,
|
|
new_window: typing.Optional[bool] = None,
|
|
background: typing.Optional[bool] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,TargetID]:
|
|
'''
|
|
Creates a new page.
|
|
|
|
:param url: The initial URL the page will be navigated to.
|
|
:param width: *(Optional)* Frame width in DIP (headless chrome only).
|
|
:param height: *(Optional)* Frame height in DIP (headless chrome only).
|
|
:param browser_context_id: *(Optional)* The browser context to create the page in.
|
|
:param enable_begin_frame_control: **(EXPERIMENTAL)** *(Optional)* Whether BeginFrames for this target will be controlled via DevTools (headless chrome only, not supported on MacOS yet, false by default).
|
|
:param new_window: *(Optional)* Whether to create a new Window or Tab (chrome-only, false by default).
|
|
:param background: *(Optional)* Whether to create the target in background or foreground (chrome-only, false by default).
|
|
:returns: The id of the page opened.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['url'] = url
|
|
if width is not None:
|
|
params['width'] = width
|
|
if height is not None:
|
|
params['height'] = height
|
|
if browser_context_id is not None:
|
|
params['browserContextId'] = browser_context_id.to_json()
|
|
if enable_begin_frame_control is not None:
|
|
params['enableBeginFrameControl'] = enable_begin_frame_control
|
|
if new_window is not None:
|
|
params['newWindow'] = new_window
|
|
if background is not None:
|
|
params['background'] = background
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.createTarget',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return TargetID.from_json(json['targetId'])
|
|
|
|
|
|
def detach_from_target(
|
|
session_id: typing.Optional[SessionID] = None,
|
|
target_id: typing.Optional[TargetID] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Detaches session with given id.
|
|
|
|
:param session_id: *(Optional)* Session to detach.
|
|
:param target_id: *(Optional)* Deprecated.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
if session_id is not None:
|
|
params['sessionId'] = session_id.to_json()
|
|
if target_id is not None:
|
|
params['targetId'] = target_id.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.detachFromTarget',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def dispose_browser_context(
|
|
browser_context_id: browser.BrowserContextID
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Deletes a BrowserContext. All the belonging pages will be closed without calling their
|
|
beforeunload hooks.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param browser_context_id:
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['browserContextId'] = browser_context_id.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.disposeBrowserContext',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def get_target_info(
|
|
target_id: typing.Optional[TargetID] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,TargetInfo]:
|
|
'''
|
|
Returns information about a target.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param target_id: *(Optional)*
|
|
:returns:
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
if target_id is not None:
|
|
params['targetId'] = target_id.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.getTargetInfo',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return TargetInfo.from_json(json['targetInfo'])
|
|
|
|
|
|
def get_targets() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.List[TargetInfo]]:
|
|
'''
|
|
Retrieves a list of available targets.
|
|
|
|
:returns: The list of targets.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.getTargets',
|
|
}
|
|
json = yield cmd_dict
|
|
return [TargetInfo.from_json(i) for i in json['targetInfos']]
|
|
|
|
|
|
def send_message_to_target(
|
|
message: str,
|
|
session_id: typing.Optional[SessionID] = None,
|
|
target_id: typing.Optional[TargetID] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Sends protocol message over session with given id.
|
|
Consider using flat mode instead; see commands attachToTarget, setAutoAttach,
|
|
and crbug.com/991325.
|
|
|
|
:param message:
|
|
:param session_id: *(Optional)* Identifier of the session.
|
|
:param target_id: *(Optional)* Deprecated.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['message'] = message
|
|
if session_id is not None:
|
|
params['sessionId'] = session_id.to_json()
|
|
if target_id is not None:
|
|
params['targetId'] = target_id.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.sendMessageToTarget',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_auto_attach(
|
|
auto_attach: bool,
|
|
wait_for_debugger_on_start: bool,
|
|
flatten: typing.Optional[bool] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Controls whether to automatically attach to new targets which are considered to be related to
|
|
this one. When turned on, attaches to all existing related targets as well. When turned off,
|
|
automatically detaches from all currently attached targets.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param auto_attach: Whether to auto-attach to related targets.
|
|
:param wait_for_debugger_on_start: Whether to pause new targets when attaching to them. Use ```Runtime.runIfWaitingForDebugger``` to run paused targets.
|
|
:param flatten: *(Optional)* Enables "flat" access to the session via specifying sessionId attribute in the commands. We plan to make this the default, deprecate non-flattened mode, and eventually retire it. See crbug.com/991325.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['autoAttach'] = auto_attach
|
|
params['waitForDebuggerOnStart'] = wait_for_debugger_on_start
|
|
if flatten is not None:
|
|
params['flatten'] = flatten
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.setAutoAttach',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_discover_targets(
|
|
discover: bool
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Controls whether to discover available targets and notify via
|
|
``targetCreated/targetInfoChanged/targetDestroyed`` events.
|
|
|
|
:param discover: Whether to discover available targets.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['discover'] = discover
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.setDiscoverTargets',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_remote_locations(
|
|
locations: typing.List[RemoteLocation]
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Enables target discovery for the specified locations, when ``setDiscoverTargets`` was set to
|
|
``true``.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param locations: List of remote locations.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['locations'] = [i.to_json() for i in locations]
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Target.setRemoteLocations',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
@event_class('Target.attachedToTarget')
|
|
@dataclass
|
|
class AttachedToTarget:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Issued when attached to target because of auto-attach or ``attachToTarget`` command.
|
|
'''
|
|
#: Identifier assigned to the session used to send/receive messages.
|
|
session_id: SessionID
|
|
target_info: TargetInfo
|
|
waiting_for_debugger: bool
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> AttachedToTarget:
|
|
return cls(
|
|
session_id=SessionID.from_json(json['sessionId']),
|
|
target_info=TargetInfo.from_json(json['targetInfo']),
|
|
waiting_for_debugger=bool(json['waitingForDebugger'])
|
|
)
|
|
|
|
|
|
@event_class('Target.detachedFromTarget')
|
|
@dataclass
|
|
class DetachedFromTarget:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Issued when detached from target for any reason (including ``detachFromTarget`` command). Can be
|
|
issued multiple times per target if multiple sessions have been attached to it.
|
|
'''
|
|
#: Detached session identifier.
|
|
session_id: SessionID
|
|
#: Deprecated.
|
|
target_id: typing.Optional[TargetID]
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> DetachedFromTarget:
|
|
return cls(
|
|
session_id=SessionID.from_json(json['sessionId']),
|
|
target_id=TargetID.from_json(json['targetId']) if 'targetId' in json else None
|
|
)
|
|
|
|
|
|
@event_class('Target.receivedMessageFromTarget')
|
|
@dataclass
|
|
class ReceivedMessageFromTarget:
|
|
'''
|
|
Notifies about a new protocol message received from the session (as reported in
|
|
``attachedToTarget`` event).
|
|
'''
|
|
#: Identifier of a session which sends a message.
|
|
session_id: SessionID
|
|
message: str
|
|
#: Deprecated.
|
|
target_id: typing.Optional[TargetID]
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> ReceivedMessageFromTarget:
|
|
return cls(
|
|
session_id=SessionID.from_json(json['sessionId']),
|
|
message=str(json['message']),
|
|
target_id=TargetID.from_json(json['targetId']) if 'targetId' in json else None
|
|
)
|
|
|
|
|
|
@event_class('Target.targetCreated')
|
|
@dataclass
|
|
class TargetCreated:
|
|
'''
|
|
Issued when a possible inspection target is created.
|
|
'''
|
|
target_info: TargetInfo
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> TargetCreated:
|
|
return cls(
|
|
target_info=TargetInfo.from_json(json['targetInfo'])
|
|
)
|
|
|
|
|
|
@event_class('Target.targetDestroyed')
|
|
@dataclass
|
|
class TargetDestroyed:
|
|
'''
|
|
Issued when a target is destroyed.
|
|
'''
|
|
target_id: TargetID
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> TargetDestroyed:
|
|
return cls(
|
|
target_id=TargetID.from_json(json['targetId'])
|
|
)
|
|
|
|
|
|
@event_class('Target.targetCrashed')
|
|
@dataclass
|
|
class TargetCrashed:
|
|
'''
|
|
Issued when a target has crashed.
|
|
'''
|
|
target_id: TargetID
|
|
#: Termination status type.
|
|
status: str
|
|
#: Termination error code.
|
|
error_code: int
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> TargetCrashed:
|
|
return cls(
|
|
target_id=TargetID.from_json(json['targetId']),
|
|
status=str(json['status']),
|
|
error_code=int(json['errorCode'])
|
|
)
|
|
|
|
|
|
@event_class('Target.targetInfoChanged')
|
|
@dataclass
|
|
class TargetInfoChanged:
|
|
'''
|
|
Issued when some information about a target has changed. This only happens between
|
|
``targetCreated`` and ``targetDestroyed``.
|
|
'''
|
|
target_info: TargetInfo
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> TargetInfoChanged:
|
|
return cls(
|
|
target_info=TargetInfo.from_json(json['targetInfo'])
|
|
)
|