2374 lines
69 KiB
Python
Executable File
2374 lines
69 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: Page
|
|
from __future__ import annotations
|
|
from .util import event_class, T_JSON_DICT
|
|
from dataclasses import dataclass
|
|
import enum
|
|
import typing
|
|
from . import debugger
|
|
from . import dom
|
|
from . import emulation
|
|
from . import io
|
|
from . import network
|
|
from . import runtime
|
|
|
|
|
|
class FrameId(str):
|
|
'''
|
|
Unique frame identifier.
|
|
'''
|
|
def to_json(self) -> str:
|
|
return self
|
|
|
|
@classmethod
|
|
def from_json(cls, json: str) -> FrameId:
|
|
return cls(json)
|
|
|
|
def __repr__(self):
|
|
return 'FrameId({})'.format(super().__repr__())
|
|
|
|
|
|
@dataclass
|
|
class Frame:
|
|
'''
|
|
Information about the Frame on the page.
|
|
'''
|
|
#: Frame unique identifier.
|
|
id_: FrameId
|
|
|
|
#: Identifier of the loader associated with this frame.
|
|
loader_id: network.LoaderId
|
|
|
|
#: Frame document's URL without fragment.
|
|
url: str
|
|
|
|
#: Frame document's security origin.
|
|
security_origin: str
|
|
|
|
#: Frame document's mimeType as determined by the browser.
|
|
mime_type: str
|
|
|
|
#: Parent frame identifier.
|
|
parent_id: typing.Optional[str] = None
|
|
|
|
#: Frame's name as specified in the tag.
|
|
name: typing.Optional[str] = None
|
|
|
|
#: Frame document's URL fragment including the '#'.
|
|
url_fragment: typing.Optional[str] = None
|
|
|
|
#: If the frame failed to load, this contains the URL that could not be loaded. Note that unlike url above, this URL may contain a fragment.
|
|
unreachable_url: typing.Optional[str] = None
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['id'] = self.id_.to_json()
|
|
json['loaderId'] = self.loader_id.to_json()
|
|
json['url'] = self.url
|
|
json['securityOrigin'] = self.security_origin
|
|
json['mimeType'] = self.mime_type
|
|
if self.parent_id is not None:
|
|
json['parentId'] = self.parent_id
|
|
if self.name is not None:
|
|
json['name'] = self.name
|
|
if self.url_fragment is not None:
|
|
json['urlFragment'] = self.url_fragment
|
|
if self.unreachable_url is not None:
|
|
json['unreachableUrl'] = self.unreachable_url
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
id_=FrameId.from_json(json['id']),
|
|
loader_id=network.LoaderId.from_json(json['loaderId']),
|
|
url=str(json['url']),
|
|
security_origin=str(json['securityOrigin']),
|
|
mime_type=str(json['mimeType']),
|
|
parent_id=str(json['parentId']) if 'parentId' in json else None,
|
|
name=str(json['name']) if 'name' in json else None,
|
|
url_fragment=str(json['urlFragment']) if 'urlFragment' in json else None,
|
|
unreachable_url=str(json['unreachableUrl']) if 'unreachableUrl' in json else None,
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class FrameResource:
|
|
'''
|
|
Information about the Resource on the page.
|
|
'''
|
|
#: Resource URL.
|
|
url: str
|
|
|
|
#: Type of this resource.
|
|
type_: network.ResourceType
|
|
|
|
#: Resource mimeType as determined by the browser.
|
|
mime_type: str
|
|
|
|
#: last-modified timestamp as reported by server.
|
|
last_modified: typing.Optional[network.TimeSinceEpoch] = None
|
|
|
|
#: Resource content size.
|
|
content_size: typing.Optional[float] = None
|
|
|
|
#: True if the resource failed to load.
|
|
failed: typing.Optional[bool] = None
|
|
|
|
#: True if the resource was canceled during loading.
|
|
canceled: typing.Optional[bool] = None
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['url'] = self.url
|
|
json['type'] = self.type_.to_json()
|
|
json['mimeType'] = self.mime_type
|
|
if self.last_modified is not None:
|
|
json['lastModified'] = self.last_modified.to_json()
|
|
if self.content_size is not None:
|
|
json['contentSize'] = self.content_size
|
|
if self.failed is not None:
|
|
json['failed'] = self.failed
|
|
if self.canceled is not None:
|
|
json['canceled'] = self.canceled
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
url=str(json['url']),
|
|
type_=network.ResourceType.from_json(json['type']),
|
|
mime_type=str(json['mimeType']),
|
|
last_modified=network.TimeSinceEpoch.from_json(json['lastModified']) if 'lastModified' in json else None,
|
|
content_size=float(json['contentSize']) if 'contentSize' in json else None,
|
|
failed=bool(json['failed']) if 'failed' in json else None,
|
|
canceled=bool(json['canceled']) if 'canceled' in json else None,
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class FrameResourceTree:
|
|
'''
|
|
Information about the Frame hierarchy along with their cached resources.
|
|
'''
|
|
#: Frame information for this tree item.
|
|
frame: Frame
|
|
|
|
#: Information about frame resources.
|
|
resources: typing.List[FrameResource]
|
|
|
|
#: Child frames.
|
|
child_frames: typing.Optional[typing.List[FrameResourceTree]] = None
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['frame'] = self.frame.to_json()
|
|
json['resources'] = [i.to_json() for i in self.resources]
|
|
if self.child_frames is not None:
|
|
json['childFrames'] = [i.to_json() for i in self.child_frames]
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
frame=Frame.from_json(json['frame']),
|
|
resources=[FrameResource.from_json(i) for i in json['resources']],
|
|
child_frames=[FrameResourceTree.from_json(i) for i in json['childFrames']] if 'childFrames' in json else None,
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class FrameTree:
|
|
'''
|
|
Information about the Frame hierarchy.
|
|
'''
|
|
#: Frame information for this tree item.
|
|
frame: Frame
|
|
|
|
#: Child frames.
|
|
child_frames: typing.Optional[typing.List[FrameTree]] = None
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['frame'] = self.frame.to_json()
|
|
if self.child_frames is not None:
|
|
json['childFrames'] = [i.to_json() for i in self.child_frames]
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
frame=Frame.from_json(json['frame']),
|
|
child_frames=[FrameTree.from_json(i) for i in json['childFrames']] if 'childFrames' in json else None,
|
|
)
|
|
|
|
|
|
class ScriptIdentifier(str):
|
|
'''
|
|
Unique script identifier.
|
|
'''
|
|
def to_json(self) -> str:
|
|
return self
|
|
|
|
@classmethod
|
|
def from_json(cls, json: str) -> ScriptIdentifier:
|
|
return cls(json)
|
|
|
|
def __repr__(self):
|
|
return 'ScriptIdentifier({})'.format(super().__repr__())
|
|
|
|
|
|
class TransitionType(enum.Enum):
|
|
'''
|
|
Transition type.
|
|
'''
|
|
LINK = "link"
|
|
TYPED = "typed"
|
|
ADDRESS_BAR = "address_bar"
|
|
AUTO_BOOKMARK = "auto_bookmark"
|
|
AUTO_SUBFRAME = "auto_subframe"
|
|
MANUAL_SUBFRAME = "manual_subframe"
|
|
GENERATED = "generated"
|
|
AUTO_TOPLEVEL = "auto_toplevel"
|
|
FORM_SUBMIT = "form_submit"
|
|
RELOAD = "reload"
|
|
KEYWORD = "keyword"
|
|
KEYWORD_GENERATED = "keyword_generated"
|
|
OTHER = "other"
|
|
|
|
def to_json(self):
|
|
return self.value
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(json)
|
|
|
|
|
|
@dataclass
|
|
class NavigationEntry:
|
|
'''
|
|
Navigation history entry.
|
|
'''
|
|
#: Unique id of the navigation history entry.
|
|
id_: int
|
|
|
|
#: URL of the navigation history entry.
|
|
url: str
|
|
|
|
#: URL that the user typed in the url bar.
|
|
user_typed_url: str
|
|
|
|
#: Title of the navigation history entry.
|
|
title: str
|
|
|
|
#: Transition type.
|
|
transition_type: TransitionType
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['id'] = self.id_
|
|
json['url'] = self.url
|
|
json['userTypedURL'] = self.user_typed_url
|
|
json['title'] = self.title
|
|
json['transitionType'] = self.transition_type.to_json()
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
id_=int(json['id']),
|
|
url=str(json['url']),
|
|
user_typed_url=str(json['userTypedURL']),
|
|
title=str(json['title']),
|
|
transition_type=TransitionType.from_json(json['transitionType']),
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class ScreencastFrameMetadata:
|
|
'''
|
|
Screencast frame metadata.
|
|
'''
|
|
#: Top offset in DIP.
|
|
offset_top: float
|
|
|
|
#: Page scale factor.
|
|
page_scale_factor: float
|
|
|
|
#: Device screen width in DIP.
|
|
device_width: float
|
|
|
|
#: Device screen height in DIP.
|
|
device_height: float
|
|
|
|
#: Position of horizontal scroll in CSS pixels.
|
|
scroll_offset_x: float
|
|
|
|
#: Position of vertical scroll in CSS pixels.
|
|
scroll_offset_y: float
|
|
|
|
#: Frame swap timestamp.
|
|
timestamp: typing.Optional[network.TimeSinceEpoch] = None
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['offsetTop'] = self.offset_top
|
|
json['pageScaleFactor'] = self.page_scale_factor
|
|
json['deviceWidth'] = self.device_width
|
|
json['deviceHeight'] = self.device_height
|
|
json['scrollOffsetX'] = self.scroll_offset_x
|
|
json['scrollOffsetY'] = self.scroll_offset_y
|
|
if self.timestamp is not None:
|
|
json['timestamp'] = self.timestamp.to_json()
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
offset_top=float(json['offsetTop']),
|
|
page_scale_factor=float(json['pageScaleFactor']),
|
|
device_width=float(json['deviceWidth']),
|
|
device_height=float(json['deviceHeight']),
|
|
scroll_offset_x=float(json['scrollOffsetX']),
|
|
scroll_offset_y=float(json['scrollOffsetY']),
|
|
timestamp=network.TimeSinceEpoch.from_json(json['timestamp']) if 'timestamp' in json else None,
|
|
)
|
|
|
|
|
|
class DialogType(enum.Enum):
|
|
'''
|
|
Javascript dialog type.
|
|
'''
|
|
ALERT = "alert"
|
|
CONFIRM = "confirm"
|
|
PROMPT = "prompt"
|
|
BEFOREUNLOAD = "beforeunload"
|
|
|
|
def to_json(self):
|
|
return self.value
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(json)
|
|
|
|
|
|
@dataclass
|
|
class AppManifestError:
|
|
'''
|
|
Error while paring app manifest.
|
|
'''
|
|
#: Error message.
|
|
message: str
|
|
|
|
#: If criticial, this is a non-recoverable parse error.
|
|
critical: int
|
|
|
|
#: Error line.
|
|
line: int
|
|
|
|
#: Error column.
|
|
column: int
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['message'] = self.message
|
|
json['critical'] = self.critical
|
|
json['line'] = self.line
|
|
json['column'] = self.column
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
message=str(json['message']),
|
|
critical=int(json['critical']),
|
|
line=int(json['line']),
|
|
column=int(json['column']),
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class AppManifestParsedProperties:
|
|
'''
|
|
Parsed app manifest properties.
|
|
'''
|
|
#: Computed scope value
|
|
scope: str
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['scope'] = self.scope
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
scope=str(json['scope']),
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class LayoutViewport:
|
|
'''
|
|
Layout viewport position and dimensions.
|
|
'''
|
|
#: Horizontal offset relative to the document (CSS pixels).
|
|
page_x: int
|
|
|
|
#: Vertical offset relative to the document (CSS pixels).
|
|
page_y: int
|
|
|
|
#: Width (CSS pixels), excludes scrollbar if present.
|
|
client_width: int
|
|
|
|
#: Height (CSS pixels), excludes scrollbar if present.
|
|
client_height: int
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['pageX'] = self.page_x
|
|
json['pageY'] = self.page_y
|
|
json['clientWidth'] = self.client_width
|
|
json['clientHeight'] = self.client_height
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
page_x=int(json['pageX']),
|
|
page_y=int(json['pageY']),
|
|
client_width=int(json['clientWidth']),
|
|
client_height=int(json['clientHeight']),
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class VisualViewport:
|
|
'''
|
|
Visual viewport position, dimensions, and scale.
|
|
'''
|
|
#: Horizontal offset relative to the layout viewport (CSS pixels).
|
|
offset_x: float
|
|
|
|
#: Vertical offset relative to the layout viewport (CSS pixels).
|
|
offset_y: float
|
|
|
|
#: Horizontal offset relative to the document (CSS pixels).
|
|
page_x: float
|
|
|
|
#: Vertical offset relative to the document (CSS pixels).
|
|
page_y: float
|
|
|
|
#: Width (CSS pixels), excludes scrollbar if present.
|
|
client_width: float
|
|
|
|
#: Height (CSS pixels), excludes scrollbar if present.
|
|
client_height: float
|
|
|
|
#: Scale relative to the ideal viewport (size at width=device-width).
|
|
scale: float
|
|
|
|
#: Page zoom factor (CSS to device independent pixels ratio).
|
|
zoom: typing.Optional[float] = None
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['offsetX'] = self.offset_x
|
|
json['offsetY'] = self.offset_y
|
|
json['pageX'] = self.page_x
|
|
json['pageY'] = self.page_y
|
|
json['clientWidth'] = self.client_width
|
|
json['clientHeight'] = self.client_height
|
|
json['scale'] = self.scale
|
|
if self.zoom is not None:
|
|
json['zoom'] = self.zoom
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
offset_x=float(json['offsetX']),
|
|
offset_y=float(json['offsetY']),
|
|
page_x=float(json['pageX']),
|
|
page_y=float(json['pageY']),
|
|
client_width=float(json['clientWidth']),
|
|
client_height=float(json['clientHeight']),
|
|
scale=float(json['scale']),
|
|
zoom=float(json['zoom']) if 'zoom' in json else None,
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class Viewport:
|
|
'''
|
|
Viewport for capturing screenshot.
|
|
'''
|
|
#: X offset in device independent pixels (dip).
|
|
x: float
|
|
|
|
#: Y offset in device independent pixels (dip).
|
|
y: float
|
|
|
|
#: Rectangle width in device independent pixels (dip).
|
|
width: float
|
|
|
|
#: Rectangle height in device independent pixels (dip).
|
|
height: float
|
|
|
|
#: Page scale factor.
|
|
scale: float
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['x'] = self.x
|
|
json['y'] = self.y
|
|
json['width'] = self.width
|
|
json['height'] = self.height
|
|
json['scale'] = self.scale
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
x=float(json['x']),
|
|
y=float(json['y']),
|
|
width=float(json['width']),
|
|
height=float(json['height']),
|
|
scale=float(json['scale']),
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class FontFamilies:
|
|
'''
|
|
Generic font families collection.
|
|
'''
|
|
#: The standard font-family.
|
|
standard: typing.Optional[str] = None
|
|
|
|
#: The fixed font-family.
|
|
fixed: typing.Optional[str] = None
|
|
|
|
#: The serif font-family.
|
|
serif: typing.Optional[str] = None
|
|
|
|
#: The sansSerif font-family.
|
|
sans_serif: typing.Optional[str] = None
|
|
|
|
#: The cursive font-family.
|
|
cursive: typing.Optional[str] = None
|
|
|
|
#: The fantasy font-family.
|
|
fantasy: typing.Optional[str] = None
|
|
|
|
#: The pictograph font-family.
|
|
pictograph: typing.Optional[str] = None
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
if self.standard is not None:
|
|
json['standard'] = self.standard
|
|
if self.fixed is not None:
|
|
json['fixed'] = self.fixed
|
|
if self.serif is not None:
|
|
json['serif'] = self.serif
|
|
if self.sans_serif is not None:
|
|
json['sansSerif'] = self.sans_serif
|
|
if self.cursive is not None:
|
|
json['cursive'] = self.cursive
|
|
if self.fantasy is not None:
|
|
json['fantasy'] = self.fantasy
|
|
if self.pictograph is not None:
|
|
json['pictograph'] = self.pictograph
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
standard=str(json['standard']) if 'standard' in json else None,
|
|
fixed=str(json['fixed']) if 'fixed' in json else None,
|
|
serif=str(json['serif']) if 'serif' in json else None,
|
|
sans_serif=str(json['sansSerif']) if 'sansSerif' in json else None,
|
|
cursive=str(json['cursive']) if 'cursive' in json else None,
|
|
fantasy=str(json['fantasy']) if 'fantasy' in json else None,
|
|
pictograph=str(json['pictograph']) if 'pictograph' in json else None,
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class FontSizes:
|
|
'''
|
|
Default font sizes.
|
|
'''
|
|
#: Default standard font size.
|
|
standard: typing.Optional[int] = None
|
|
|
|
#: Default fixed font size.
|
|
fixed: typing.Optional[int] = None
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
if self.standard is not None:
|
|
json['standard'] = self.standard
|
|
if self.fixed is not None:
|
|
json['fixed'] = self.fixed
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
standard=int(json['standard']) if 'standard' in json else None,
|
|
fixed=int(json['fixed']) if 'fixed' in json else None,
|
|
)
|
|
|
|
|
|
class ClientNavigationReason(enum.Enum):
|
|
FORM_SUBMISSION_GET = "formSubmissionGet"
|
|
FORM_SUBMISSION_POST = "formSubmissionPost"
|
|
HTTP_HEADER_REFRESH = "httpHeaderRefresh"
|
|
SCRIPT_INITIATED = "scriptInitiated"
|
|
META_TAG_REFRESH = "metaTagRefresh"
|
|
PAGE_BLOCK_INTERSTITIAL = "pageBlockInterstitial"
|
|
RELOAD = "reload"
|
|
ANCHOR_CLICK = "anchorClick"
|
|
|
|
def to_json(self):
|
|
return self.value
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(json)
|
|
|
|
|
|
class ClientNavigationDisposition(enum.Enum):
|
|
CURRENT_TAB = "currentTab"
|
|
NEW_TAB = "newTab"
|
|
NEW_WINDOW = "newWindow"
|
|
DOWNLOAD = "download"
|
|
|
|
def to_json(self):
|
|
return self.value
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(json)
|
|
|
|
|
|
@dataclass
|
|
class InstallabilityErrorArgument:
|
|
#: Argument name (e.g. name:'minimum-icon-size-in-pixels').
|
|
name: str
|
|
|
|
#: Argument value (e.g. value:'64').
|
|
value: str
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['name'] = self.name
|
|
json['value'] = self.value
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
name=str(json['name']),
|
|
value=str(json['value']),
|
|
)
|
|
|
|
|
|
@dataclass
|
|
class InstallabilityError:
|
|
'''
|
|
The installability error
|
|
'''
|
|
#: The error id (e.g. 'manifest-missing-suitable-icon').
|
|
error_id: str
|
|
|
|
#: The list of error arguments (e.g. {name:'minimum-icon-size-in-pixels', value:'64'}).
|
|
error_arguments: typing.List[InstallabilityErrorArgument]
|
|
|
|
def to_json(self):
|
|
json = dict()
|
|
json['errorId'] = self.error_id
|
|
json['errorArguments'] = [i.to_json() for i in self.error_arguments]
|
|
return json
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(
|
|
error_id=str(json['errorId']),
|
|
error_arguments=[InstallabilityErrorArgument.from_json(i) for i in json['errorArguments']],
|
|
)
|
|
|
|
|
|
class ReferrerPolicy(enum.Enum):
|
|
'''
|
|
The referring-policy used for the navigation.
|
|
'''
|
|
NO_REFERRER = "noReferrer"
|
|
NO_REFERRER_WHEN_DOWNGRADE = "noReferrerWhenDowngrade"
|
|
ORIGIN = "origin"
|
|
ORIGIN_WHEN_CROSS_ORIGIN = "originWhenCrossOrigin"
|
|
SAME_ORIGIN = "sameOrigin"
|
|
STRICT_ORIGIN = "strictOrigin"
|
|
STRICT_ORIGIN_WHEN_CROSS_ORIGIN = "strictOriginWhenCrossOrigin"
|
|
UNSAFE_URL = "unsafeUrl"
|
|
|
|
def to_json(self):
|
|
return self.value
|
|
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
return cls(json)
|
|
|
|
|
|
def add_script_to_evaluate_on_load(
|
|
script_source: str
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,ScriptIdentifier]:
|
|
'''
|
|
Deprecated, please use addScriptToEvaluateOnNewDocument instead.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param script_source:
|
|
:returns: Identifier of the added script.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['scriptSource'] = script_source
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.addScriptToEvaluateOnLoad',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return ScriptIdentifier.from_json(json['identifier'])
|
|
|
|
|
|
def add_script_to_evaluate_on_new_document(
|
|
source: str,
|
|
world_name: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,ScriptIdentifier]:
|
|
'''
|
|
Evaluates given script in every frame upon creation (before loading frame's scripts).
|
|
|
|
:param source:
|
|
:param world_name: **(EXPERIMENTAL)** *(Optional)* If specified, creates an isolated world with the given name and evaluates given script in it. This world name will be used as the ExecutionContextDescription::name when the corresponding event is emitted.
|
|
:returns: Identifier of the added script.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['source'] = source
|
|
if world_name is not None:
|
|
params['worldName'] = world_name
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.addScriptToEvaluateOnNewDocument',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return ScriptIdentifier.from_json(json['identifier'])
|
|
|
|
|
|
def bring_to_front() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Brings page to front (activates tab).
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.bringToFront',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def capture_screenshot(
|
|
format_: typing.Optional[str] = None,
|
|
quality: typing.Optional[int] = None,
|
|
clip: typing.Optional[Viewport] = None,
|
|
from_surface: typing.Optional[bool] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,str]:
|
|
'''
|
|
Capture page screenshot.
|
|
|
|
:param format_: *(Optional)* Image compression format (defaults to png).
|
|
:param quality: *(Optional)* Compression quality from range [0..100] (jpeg only).
|
|
:param clip: *(Optional)* Capture the screenshot of a given region only.
|
|
:param from_surface: **(EXPERIMENTAL)** *(Optional)* Capture the screenshot from the surface, rather than the view. Defaults to true.
|
|
:returns: Base64-encoded image data.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
if format_ is not None:
|
|
params['format'] = format_
|
|
if quality is not None:
|
|
params['quality'] = quality
|
|
if clip is not None:
|
|
params['clip'] = clip.to_json()
|
|
if from_surface is not None:
|
|
params['fromSurface'] = from_surface
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.captureScreenshot',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return str(json['data'])
|
|
|
|
|
|
def capture_snapshot(
|
|
format_: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,str]:
|
|
'''
|
|
Returns a snapshot of the page as a string. For MHTML format, the serialization includes
|
|
iframes, shadow DOM, external resources, and element-inline styles.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param format_: *(Optional)* Format (defaults to mhtml).
|
|
:returns: Serialized page data.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
if format_ is not None:
|
|
params['format'] = format_
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.captureSnapshot',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return str(json['data'])
|
|
|
|
|
|
def clear_device_metrics_override() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Clears the overridden device metrics.
|
|
|
|
**EXPERIMENTAL**
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.clearDeviceMetricsOverride',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def clear_device_orientation_override() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Clears the overridden Device Orientation.
|
|
|
|
**EXPERIMENTAL**
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.clearDeviceOrientationOverride',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def clear_geolocation_override() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Clears the overridden Geolocation Position and Error.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.clearGeolocationOverride',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def create_isolated_world(
|
|
frame_id: FrameId,
|
|
world_name: typing.Optional[str] = None,
|
|
grant_univeral_access: typing.Optional[bool] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,runtime.ExecutionContextId]:
|
|
'''
|
|
Creates an isolated world for the given frame.
|
|
|
|
:param frame_id: Id of the frame in which the isolated world should be created.
|
|
:param world_name: *(Optional)* An optional name which is reported in the Execution Context.
|
|
:param grant_univeral_access: *(Optional)* Whether or not universal access should be granted to the isolated world. This is a powerful option, use with caution.
|
|
:returns: Execution context of the isolated world.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['frameId'] = frame_id.to_json()
|
|
if world_name is not None:
|
|
params['worldName'] = world_name
|
|
if grant_univeral_access is not None:
|
|
params['grantUniveralAccess'] = grant_univeral_access
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.createIsolatedWorld',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return runtime.ExecutionContextId.from_json(json['executionContextId'])
|
|
|
|
|
|
def delete_cookie(
|
|
cookie_name: str,
|
|
url: str
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Deletes browser cookie with given name, domain and path.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param cookie_name: Name of the cookie to remove.
|
|
:param url: URL to match cooke domain and path.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['cookieName'] = cookie_name
|
|
params['url'] = url
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.deleteCookie',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def disable() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Disables page domain notifications.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.disable',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def enable() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Enables page domain notifications.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.enable',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def get_app_manifest() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.Tuple[str, typing.List[AppManifestError], typing.Optional[str], typing.Optional[AppManifestParsedProperties]]]:
|
|
'''
|
|
|
|
|
|
:returns: A tuple with the following items:
|
|
|
|
0. **url** - Manifest location.
|
|
1. **errors** -
|
|
2. **data** - *(Optional)* Manifest content.
|
|
3. **parsed** - *(Optional)* Parsed manifest properties
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.getAppManifest',
|
|
}
|
|
json = yield cmd_dict
|
|
return (
|
|
str(json['url']),
|
|
[AppManifestError.from_json(i) for i in json['errors']],
|
|
str(json['data']) if 'data' in json else None,
|
|
AppManifestParsedProperties.from_json(json['parsed']) if 'parsed' in json else None
|
|
)
|
|
|
|
|
|
def get_installability_errors() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.List[InstallabilityError]]:
|
|
'''
|
|
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:returns:
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.getInstallabilityErrors',
|
|
}
|
|
json = yield cmd_dict
|
|
return [InstallabilityError.from_json(i) for i in json['installabilityErrors']]
|
|
|
|
|
|
def get_manifest_icons() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.Optional[str]]:
|
|
'''
|
|
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:returns:
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.getManifestIcons',
|
|
}
|
|
json = yield cmd_dict
|
|
return str(json['primaryIcon']) if 'primaryIcon' in json else None
|
|
|
|
|
|
def get_cookies() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.List[network.Cookie]]:
|
|
'''
|
|
Returns all browser cookies. Depending on the backend support, will return detailed cookie
|
|
information in the ``cookies`` field.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:returns: Array of cookie objects.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.getCookies',
|
|
}
|
|
json = yield cmd_dict
|
|
return [network.Cookie.from_json(i) for i in json['cookies']]
|
|
|
|
|
|
def get_frame_tree() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,FrameTree]:
|
|
'''
|
|
Returns present frame tree structure.
|
|
|
|
:returns: Present frame tree structure.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.getFrameTree',
|
|
}
|
|
json = yield cmd_dict
|
|
return FrameTree.from_json(json['frameTree'])
|
|
|
|
|
|
def get_layout_metrics() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.Tuple[LayoutViewport, VisualViewport, dom.Rect]]:
|
|
'''
|
|
Returns metrics relating to the layouting of the page, such as viewport bounds/scale.
|
|
|
|
:returns: A tuple with the following items:
|
|
|
|
0. **layoutViewport** - Metrics relating to the layout viewport.
|
|
1. **visualViewport** - Metrics relating to the visual viewport.
|
|
2. **contentSize** - Size of scrollable area.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.getLayoutMetrics',
|
|
}
|
|
json = yield cmd_dict
|
|
return (
|
|
LayoutViewport.from_json(json['layoutViewport']),
|
|
VisualViewport.from_json(json['visualViewport']),
|
|
dom.Rect.from_json(json['contentSize'])
|
|
)
|
|
|
|
|
|
def get_navigation_history() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.Tuple[int, typing.List[NavigationEntry]]]:
|
|
'''
|
|
Returns navigation history for the current page.
|
|
|
|
:returns: A tuple with the following items:
|
|
|
|
0. **currentIndex** - Index of the current navigation history entry.
|
|
1. **entries** - Array of navigation history entries.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.getNavigationHistory',
|
|
}
|
|
json = yield cmd_dict
|
|
return (
|
|
int(json['currentIndex']),
|
|
[NavigationEntry.from_json(i) for i in json['entries']]
|
|
)
|
|
|
|
|
|
def reset_navigation_history() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Resets navigation history for the current page.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.resetNavigationHistory',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def get_resource_content(
|
|
frame_id: FrameId,
|
|
url: str
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.Tuple[str, bool]]:
|
|
'''
|
|
Returns content of the given resource.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param frame_id: Frame id to get resource for.
|
|
:param url: URL of the resource to get content for.
|
|
:returns: A tuple with the following items:
|
|
|
|
0. **content** - Resource content.
|
|
1. **base64Encoded** - True, if content was served as base64.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['frameId'] = frame_id.to_json()
|
|
params['url'] = url
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.getResourceContent',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return (
|
|
str(json['content']),
|
|
bool(json['base64Encoded'])
|
|
)
|
|
|
|
|
|
def get_resource_tree() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,FrameResourceTree]:
|
|
'''
|
|
Returns present frame / resource tree structure.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:returns: Present frame / resource tree structure.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.getResourceTree',
|
|
}
|
|
json = yield cmd_dict
|
|
return FrameResourceTree.from_json(json['frameTree'])
|
|
|
|
|
|
def handle_java_script_dialog(
|
|
accept: bool,
|
|
prompt_text: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Accepts or dismisses a JavaScript initiated dialog (alert, confirm, prompt, or onbeforeunload).
|
|
|
|
:param accept: Whether to accept or dismiss the dialog.
|
|
:param prompt_text: *(Optional)* The text to enter into the dialog prompt before accepting. Used only if this is a prompt dialog.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['accept'] = accept
|
|
if prompt_text is not None:
|
|
params['promptText'] = prompt_text
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.handleJavaScriptDialog',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def navigate(
|
|
url: str,
|
|
referrer: typing.Optional[str] = None,
|
|
transition_type: typing.Optional[TransitionType] = None,
|
|
frame_id: typing.Optional[FrameId] = None,
|
|
referrer_policy: typing.Optional[ReferrerPolicy] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.Tuple[FrameId, typing.Optional[network.LoaderId], typing.Optional[str]]]:
|
|
'''
|
|
Navigates current page to the given URL.
|
|
|
|
:param url: URL to navigate the page to.
|
|
:param referrer: *(Optional)* Referrer URL.
|
|
:param transition_type: *(Optional)* Intended transition type.
|
|
:param frame_id: *(Optional)* Frame id to navigate, if not specified navigates the top frame.
|
|
:param referrer_policy: **(EXPERIMENTAL)** *(Optional)* Referrer-policy used for the navigation.
|
|
:returns: A tuple with the following items:
|
|
|
|
0. **frameId** - Frame id that has navigated (or failed to navigate)
|
|
1. **loaderId** - *(Optional)* Loader identifier.
|
|
2. **errorText** - *(Optional)* User friendly error message, present if and only if navigation has failed.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['url'] = url
|
|
if referrer is not None:
|
|
params['referrer'] = referrer
|
|
if transition_type is not None:
|
|
params['transitionType'] = transition_type.to_json()
|
|
if frame_id is not None:
|
|
params['frameId'] = frame_id.to_json()
|
|
if referrer_policy is not None:
|
|
params['referrerPolicy'] = referrer_policy.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.navigate',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return (
|
|
FrameId.from_json(json['frameId']),
|
|
network.LoaderId.from_json(json['loaderId']) if 'loaderId' in json else None,
|
|
str(json['errorText']) if 'errorText' in json else None
|
|
)
|
|
|
|
|
|
def navigate_to_history_entry(
|
|
entry_id: int
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Navigates current page to the given history entry.
|
|
|
|
:param entry_id: Unique id of the entry to navigate to.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['entryId'] = entry_id
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.navigateToHistoryEntry',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def print_to_pdf(
|
|
landscape: typing.Optional[bool] = None,
|
|
display_header_footer: typing.Optional[bool] = None,
|
|
print_background: typing.Optional[bool] = None,
|
|
scale: typing.Optional[float] = None,
|
|
paper_width: typing.Optional[float] = None,
|
|
paper_height: typing.Optional[float] = None,
|
|
margin_top: typing.Optional[float] = None,
|
|
margin_bottom: typing.Optional[float] = None,
|
|
margin_left: typing.Optional[float] = None,
|
|
margin_right: typing.Optional[float] = None,
|
|
page_ranges: typing.Optional[str] = None,
|
|
ignore_invalid_page_ranges: typing.Optional[bool] = None,
|
|
header_template: typing.Optional[str] = None,
|
|
footer_template: typing.Optional[str] = None,
|
|
prefer_css_page_size: typing.Optional[bool] = None,
|
|
transfer_mode: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.Tuple[str, typing.Optional[io.StreamHandle]]]:
|
|
'''
|
|
Print page as PDF.
|
|
|
|
:param landscape: *(Optional)* Paper orientation. Defaults to false.
|
|
:param display_header_footer: *(Optional)* Display header and footer. Defaults to false.
|
|
:param print_background: *(Optional)* Print background graphics. Defaults to false.
|
|
:param scale: *(Optional)* Scale of the webpage rendering. Defaults to 1.
|
|
:param paper_width: *(Optional)* Paper width in inches. Defaults to 8.5 inches.
|
|
:param paper_height: *(Optional)* Paper height in inches. Defaults to 11 inches.
|
|
:param margin_top: *(Optional)* Top margin in inches. Defaults to 1cm (~0.4 inches).
|
|
:param margin_bottom: *(Optional)* Bottom margin in inches. Defaults to 1cm (~0.4 inches).
|
|
:param margin_left: *(Optional)* Left margin in inches. Defaults to 1cm (~0.4 inches).
|
|
:param margin_right: *(Optional)* Right margin in inches. Defaults to 1cm (~0.4 inches).
|
|
:param page_ranges: *(Optional)* Paper ranges to print, e.g., '1-5, 8, 11-13'. Defaults to the empty string, which means print all pages.
|
|
:param ignore_invalid_page_ranges: *(Optional)* Whether to silently ignore invalid but successfully parsed page ranges, such as '3-2'. Defaults to false.
|
|
:param header_template: *(Optional)* HTML template for the print header. Should be valid HTML markup with following classes used to inject printing values into them: - ```date````: formatted print date - ````title````: document title - ````url````: document location - ````pageNumber````: current page number - ````totalPages````: total pages in the document For example, ````<span class=title></span>```` would generate span containing the title.
|
|
:param footer_template: *(Optional)* HTML template for the print footer. Should use the same format as the ````headerTemplate````.
|
|
:param prefer_css_page_size: *(Optional)* Whether or not to prefer page size as defined by css. Defaults to false, in which case the content will be scaled to fit the paper size.
|
|
:param transfer_mode: **(EXPERIMENTAL)** *(Optional)* return as stream
|
|
:returns: A tuple with the following items:
|
|
|
|
0. **data** - Base64-encoded pdf data. Empty if `` returnAsStream` is specified.
|
|
1. **stream** - *(Optional)* A handle of the stream that holds resulting PDF data.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
if landscape is not None:
|
|
params['landscape'] = landscape
|
|
if display_header_footer is not None:
|
|
params['displayHeaderFooter'] = display_header_footer
|
|
if print_background is not None:
|
|
params['printBackground'] = print_background
|
|
if scale is not None:
|
|
params['scale'] = scale
|
|
if paper_width is not None:
|
|
params['paperWidth'] = paper_width
|
|
if paper_height is not None:
|
|
params['paperHeight'] = paper_height
|
|
if margin_top is not None:
|
|
params['marginTop'] = margin_top
|
|
if margin_bottom is not None:
|
|
params['marginBottom'] = margin_bottom
|
|
if margin_left is not None:
|
|
params['marginLeft'] = margin_left
|
|
if margin_right is not None:
|
|
params['marginRight'] = margin_right
|
|
if page_ranges is not None:
|
|
params['pageRanges'] = page_ranges
|
|
if ignore_invalid_page_ranges is not None:
|
|
params['ignoreInvalidPageRanges'] = ignore_invalid_page_ranges
|
|
if header_template is not None:
|
|
params['headerTemplate'] = header_template
|
|
if footer_template is not None:
|
|
params['footerTemplate'] = footer_template
|
|
if prefer_css_page_size is not None:
|
|
params['preferCSSPageSize'] = prefer_css_page_size
|
|
if transfer_mode is not None:
|
|
params['transferMode'] = transfer_mode
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.printToPDF',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return (
|
|
str(json['data']),
|
|
io.StreamHandle.from_json(json['stream']) if 'stream' in json else None
|
|
)
|
|
|
|
|
|
def reload(
|
|
ignore_cache: typing.Optional[bool] = None,
|
|
script_to_evaluate_on_load: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Reloads given page optionally ignoring the cache.
|
|
|
|
:param ignore_cache: *(Optional)* If true, browser cache is ignored (as if the user pressed Shift+refresh).
|
|
:param script_to_evaluate_on_load: *(Optional)* If set, the script will be injected into all frames of the inspected page after reload. Argument will be ignored if reloading dataURL origin.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
if ignore_cache is not None:
|
|
params['ignoreCache'] = ignore_cache
|
|
if script_to_evaluate_on_load is not None:
|
|
params['scriptToEvaluateOnLoad'] = script_to_evaluate_on_load
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.reload',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def remove_script_to_evaluate_on_load(
|
|
identifier: ScriptIdentifier
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Deprecated, please use removeScriptToEvaluateOnNewDocument instead.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param identifier:
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['identifier'] = identifier.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.removeScriptToEvaluateOnLoad',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def remove_script_to_evaluate_on_new_document(
|
|
identifier: ScriptIdentifier
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Removes given script from the list.
|
|
|
|
:param identifier:
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['identifier'] = identifier.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.removeScriptToEvaluateOnNewDocument',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def screencast_frame_ack(
|
|
session_id: int
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Acknowledges that a screencast frame has been received by the frontend.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param session_id: Frame number.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['sessionId'] = session_id
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.screencastFrameAck',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def search_in_resource(
|
|
frame_id: FrameId,
|
|
url: str,
|
|
query: str,
|
|
case_sensitive: typing.Optional[bool] = None,
|
|
is_regex: typing.Optional[bool] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.List[debugger.SearchMatch]]:
|
|
'''
|
|
Searches for given string in resource content.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param frame_id: Frame id for resource to search in.
|
|
:param url: URL of the resource to search in.
|
|
:param query: String to search for.
|
|
:param case_sensitive: *(Optional)* If true, search is case sensitive.
|
|
:param is_regex: *(Optional)* If true, treats string parameter as regex.
|
|
:returns: List of search matches.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['frameId'] = frame_id.to_json()
|
|
params['url'] = url
|
|
params['query'] = query
|
|
if case_sensitive is not None:
|
|
params['caseSensitive'] = case_sensitive
|
|
if is_regex is not None:
|
|
params['isRegex'] = is_regex
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.searchInResource',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
return [debugger.SearchMatch.from_json(i) for i in json['result']]
|
|
|
|
|
|
def set_ad_blocking_enabled(
|
|
enabled: bool
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Enable Chrome's experimental ad filter on all sites.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param enabled: Whether to block ads.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['enabled'] = enabled
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setAdBlockingEnabled',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_bypass_csp(
|
|
enabled: bool
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Enable page Content Security Policy by-passing.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param enabled: Whether to bypass page CSP.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['enabled'] = enabled
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setBypassCSP',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_device_metrics_override(
|
|
width: int,
|
|
height: int,
|
|
device_scale_factor: float,
|
|
mobile: bool,
|
|
scale: typing.Optional[float] = None,
|
|
screen_width: typing.Optional[int] = None,
|
|
screen_height: typing.Optional[int] = None,
|
|
position_x: typing.Optional[int] = None,
|
|
position_y: typing.Optional[int] = None,
|
|
dont_set_visible_size: typing.Optional[bool] = None,
|
|
screen_orientation: typing.Optional[emulation.ScreenOrientation] = None,
|
|
viewport: typing.Optional[Viewport] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Overrides the values of device screen dimensions (window.screen.width, window.screen.height,
|
|
window.innerWidth, window.innerHeight, and "device-width"/"device-height"-related CSS media
|
|
query results).
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param width: Overriding width value in pixels (minimum 0, maximum 10000000). 0 disables the override.
|
|
:param height: Overriding height value in pixels (minimum 0, maximum 10000000). 0 disables the override.
|
|
:param device_scale_factor: Overriding device scale factor value. 0 disables the override.
|
|
:param mobile: Whether to emulate mobile device. This includes viewport meta tag, overlay scrollbars, text autosizing and more.
|
|
:param scale: *(Optional)* Scale to apply to resulting view image.
|
|
:param screen_width: *(Optional)* Overriding screen width value in pixels (minimum 0, maximum 10000000).
|
|
:param screen_height: *(Optional)* Overriding screen height value in pixels (minimum 0, maximum 10000000).
|
|
:param position_x: *(Optional)* Overriding view X position on screen in pixels (minimum 0, maximum 10000000).
|
|
:param position_y: *(Optional)* Overriding view Y position on screen in pixels (minimum 0, maximum 10000000).
|
|
:param dont_set_visible_size: *(Optional)* Do not set visible view size, rely upon explicit setVisibleSize call.
|
|
:param screen_orientation: *(Optional)* Screen orientation override.
|
|
:param viewport: *(Optional)* The viewport dimensions and scale. If not set, the override is cleared.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['width'] = width
|
|
params['height'] = height
|
|
params['deviceScaleFactor'] = device_scale_factor
|
|
params['mobile'] = mobile
|
|
if scale is not None:
|
|
params['scale'] = scale
|
|
if screen_width is not None:
|
|
params['screenWidth'] = screen_width
|
|
if screen_height is not None:
|
|
params['screenHeight'] = screen_height
|
|
if position_x is not None:
|
|
params['positionX'] = position_x
|
|
if position_y is not None:
|
|
params['positionY'] = position_y
|
|
if dont_set_visible_size is not None:
|
|
params['dontSetVisibleSize'] = dont_set_visible_size
|
|
if screen_orientation is not None:
|
|
params['screenOrientation'] = screen_orientation.to_json()
|
|
if viewport is not None:
|
|
params['viewport'] = viewport.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setDeviceMetricsOverride',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_device_orientation_override(
|
|
alpha: float,
|
|
beta: float,
|
|
gamma: float
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Overrides the Device Orientation.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param alpha: Mock alpha
|
|
:param beta: Mock beta
|
|
:param gamma: Mock gamma
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['alpha'] = alpha
|
|
params['beta'] = beta
|
|
params['gamma'] = gamma
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setDeviceOrientationOverride',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_font_families(
|
|
font_families: FontFamilies
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Set generic font families.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param font_families: Specifies font families to set. If a font family is not specified, it won't be changed.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['fontFamilies'] = font_families.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setFontFamilies',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_font_sizes(
|
|
font_sizes: FontSizes
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Set default font sizes.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param font_sizes: Specifies font sizes to set. If a font size is not specified, it won't be changed.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['fontSizes'] = font_sizes.to_json()
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setFontSizes',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_document_content(
|
|
frame_id: FrameId,
|
|
html: str
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Sets given markup as the document's HTML.
|
|
|
|
:param frame_id: Frame id to set HTML for.
|
|
:param html: HTML content to set.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['frameId'] = frame_id.to_json()
|
|
params['html'] = html
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setDocumentContent',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_download_behavior(
|
|
behavior: str,
|
|
download_path: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Set the behavior when downloading a file.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param behavior: Whether to allow all or deny all download requests, or use default Chrome behavior if available (otherwise deny).
|
|
:param download_path: *(Optional)* The default path to save downloaded files to. This is requred if behavior is set to 'allow'
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['behavior'] = behavior
|
|
if download_path is not None:
|
|
params['downloadPath'] = download_path
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setDownloadBehavior',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_geolocation_override(
|
|
latitude: typing.Optional[float] = None,
|
|
longitude: typing.Optional[float] = None,
|
|
accuracy: typing.Optional[float] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Overrides the Geolocation Position or Error. Omitting any of the parameters emulates position
|
|
unavailable.
|
|
|
|
:param latitude: *(Optional)* Mock latitude
|
|
:param longitude: *(Optional)* Mock longitude
|
|
:param accuracy: *(Optional)* Mock accuracy
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
if latitude is not None:
|
|
params['latitude'] = latitude
|
|
if longitude is not None:
|
|
params['longitude'] = longitude
|
|
if accuracy is not None:
|
|
params['accuracy'] = accuracy
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setGeolocationOverride',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_lifecycle_events_enabled(
|
|
enabled: bool
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Controls whether page will emit lifecycle events.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param enabled: If true, starts emitting lifecycle events.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['enabled'] = enabled
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setLifecycleEventsEnabled',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_touch_emulation_enabled(
|
|
enabled: bool,
|
|
configuration: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Toggles mouse event-based touch event emulation.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param enabled: Whether the touch event emulation should be enabled.
|
|
:param configuration: *(Optional)* Touch/gesture events configuration. Default: current platform.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['enabled'] = enabled
|
|
if configuration is not None:
|
|
params['configuration'] = configuration
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setTouchEmulationEnabled',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def start_screencast(
|
|
format_: typing.Optional[str] = None,
|
|
quality: typing.Optional[int] = None,
|
|
max_width: typing.Optional[int] = None,
|
|
max_height: typing.Optional[int] = None,
|
|
every_nth_frame: typing.Optional[int] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Starts sending each frame using the ``screencastFrame`` event.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param format_: *(Optional)* Image compression format.
|
|
:param quality: *(Optional)* Compression quality from range [0..100].
|
|
:param max_width: *(Optional)* Maximum screenshot width.
|
|
:param max_height: *(Optional)* Maximum screenshot height.
|
|
:param every_nth_frame: *(Optional)* Send every n-th frame.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
if format_ is not None:
|
|
params['format'] = format_
|
|
if quality is not None:
|
|
params['quality'] = quality
|
|
if max_width is not None:
|
|
params['maxWidth'] = max_width
|
|
if max_height is not None:
|
|
params['maxHeight'] = max_height
|
|
if every_nth_frame is not None:
|
|
params['everyNthFrame'] = every_nth_frame
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.startScreencast',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def stop_loading() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Force the page stop all navigations and pending resource fetches.
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.stopLoading',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def crash() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Crashes renderer on the IO thread, generates minidumps.
|
|
|
|
**EXPERIMENTAL**
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.crash',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def close() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Tries to close page, running its beforeunload hooks, if any.
|
|
|
|
**EXPERIMENTAL**
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.close',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_web_lifecycle_state(
|
|
state: str
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Tries to update the web lifecycle state of the page.
|
|
It will transition the page to the given state according to:
|
|
https://github.com/WICG/web-lifecycle/
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param state: Target lifecycle state
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['state'] = state
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setWebLifecycleState',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def stop_screencast() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Stops sending each frame in the ``screencastFrame``.
|
|
|
|
**EXPERIMENTAL**
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.stopScreencast',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_produce_compilation_cache(
|
|
enabled: bool
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Forces compilation cache to be generated for every subresource script.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param enabled:
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['enabled'] = enabled
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setProduceCompilationCache',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def add_compilation_cache(
|
|
url: str,
|
|
data: str
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Seeds compilation cache for given url. Compilation cache does not survive
|
|
cross-process navigation.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param url:
|
|
:param data: Base64-encoded data
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['url'] = url
|
|
params['data'] = data
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.addCompilationCache',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def clear_compilation_cache() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Clears seeded compilation cache.
|
|
|
|
**EXPERIMENTAL**
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.clearCompilationCache',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def generate_test_report(
|
|
message: str,
|
|
group: typing.Optional[str] = None
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Generates a report for testing.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param message: Message to be displayed in the report.
|
|
:param group: *(Optional)* Specifies the endpoint group to deliver the report to.
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['message'] = message
|
|
if group is not None:
|
|
params['group'] = group
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.generateTestReport',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def wait_for_debugger() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Pauses page execution. Can be resumed using generic Runtime.runIfWaitingForDebugger.
|
|
|
|
**EXPERIMENTAL**
|
|
'''
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.waitForDebugger',
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
def set_intercept_file_chooser_dialog(
|
|
enabled: bool
|
|
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
|
|
'''
|
|
Intercept file chooser requests and transfer control to protocol clients.
|
|
When file chooser interception is enabled, native file chooser dialog is not shown.
|
|
Instead, a protocol event ``Page.fileChooserOpened`` is emitted.
|
|
|
|
**EXPERIMENTAL**
|
|
|
|
:param enabled:
|
|
'''
|
|
params: T_JSON_DICT = dict()
|
|
params['enabled'] = enabled
|
|
cmd_dict: T_JSON_DICT = {
|
|
'method': 'Page.setInterceptFileChooserDialog',
|
|
'params': params,
|
|
}
|
|
json = yield cmd_dict
|
|
|
|
|
|
@event_class('Page.domContentEventFired')
|
|
@dataclass
|
|
class DomContentEventFired:
|
|
timestamp: network.MonotonicTime
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> DomContentEventFired:
|
|
return cls(
|
|
timestamp=network.MonotonicTime.from_json(json['timestamp'])
|
|
)
|
|
|
|
|
|
@event_class('Page.fileChooserOpened')
|
|
@dataclass
|
|
class FileChooserOpened:
|
|
'''
|
|
Emitted only when ``page.interceptFileChooser`` is enabled.
|
|
'''
|
|
#: Id of the frame containing input node.
|
|
frame_id: FrameId
|
|
#: Input node id.
|
|
backend_node_id: dom.BackendNodeId
|
|
#: Input mode.
|
|
mode: str
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FileChooserOpened:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId']),
|
|
backend_node_id=dom.BackendNodeId.from_json(json['backendNodeId']),
|
|
mode=str(json['mode'])
|
|
)
|
|
|
|
|
|
@event_class('Page.frameAttached')
|
|
@dataclass
|
|
class FrameAttached:
|
|
'''
|
|
Fired when frame has been attached to its parent.
|
|
'''
|
|
#: Id of the frame that has been attached.
|
|
frame_id: FrameId
|
|
#: Parent frame identifier.
|
|
parent_frame_id: FrameId
|
|
#: JavaScript stack trace of when frame was attached, only set if frame initiated from script.
|
|
stack: typing.Optional[runtime.StackTrace]
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FrameAttached:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId']),
|
|
parent_frame_id=FrameId.from_json(json['parentFrameId']),
|
|
stack=runtime.StackTrace.from_json(json['stack']) if 'stack' in json else None
|
|
)
|
|
|
|
|
|
@event_class('Page.frameClearedScheduledNavigation')
|
|
@dataclass
|
|
class FrameClearedScheduledNavigation:
|
|
'''
|
|
Fired when frame no longer has a scheduled navigation.
|
|
'''
|
|
#: Id of the frame that has cleared its scheduled navigation.
|
|
frame_id: FrameId
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FrameClearedScheduledNavigation:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId'])
|
|
)
|
|
|
|
|
|
@event_class('Page.frameDetached')
|
|
@dataclass
|
|
class FrameDetached:
|
|
'''
|
|
Fired when frame has been detached from its parent.
|
|
'''
|
|
#: Id of the frame that has been detached.
|
|
frame_id: FrameId
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FrameDetached:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId'])
|
|
)
|
|
|
|
|
|
@event_class('Page.frameNavigated')
|
|
@dataclass
|
|
class FrameNavigated:
|
|
'''
|
|
Fired once navigation of the frame has completed. Frame is now associated with the new loader.
|
|
'''
|
|
#: Frame object.
|
|
frame: Frame
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FrameNavigated:
|
|
return cls(
|
|
frame=Frame.from_json(json['frame'])
|
|
)
|
|
|
|
|
|
@event_class('Page.frameResized')
|
|
@dataclass
|
|
class FrameResized:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
|
|
'''
|
|
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FrameResized:
|
|
return cls(
|
|
|
|
)
|
|
|
|
|
|
@event_class('Page.frameRequestedNavigation')
|
|
@dataclass
|
|
class FrameRequestedNavigation:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Fired when a renderer-initiated navigation is requested.
|
|
Navigation may still be cancelled after the event is issued.
|
|
'''
|
|
#: Id of the frame that is being navigated.
|
|
frame_id: FrameId
|
|
#: The reason for the navigation.
|
|
reason: ClientNavigationReason
|
|
#: The destination URL for the requested navigation.
|
|
url: str
|
|
#: The disposition for the navigation.
|
|
disposition: ClientNavigationDisposition
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FrameRequestedNavigation:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId']),
|
|
reason=ClientNavigationReason.from_json(json['reason']),
|
|
url=str(json['url']),
|
|
disposition=ClientNavigationDisposition.from_json(json['disposition'])
|
|
)
|
|
|
|
|
|
@event_class('Page.frameScheduledNavigation')
|
|
@dataclass
|
|
class FrameScheduledNavigation:
|
|
'''
|
|
Fired when frame schedules a potential navigation.
|
|
'''
|
|
#: Id of the frame that has scheduled a navigation.
|
|
frame_id: FrameId
|
|
#: Delay (in seconds) until the navigation is scheduled to begin. The navigation is not
|
|
#: guaranteed to start.
|
|
delay: float
|
|
#: The reason for the navigation.
|
|
reason: ClientNavigationReason
|
|
#: The destination URL for the scheduled navigation.
|
|
url: str
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FrameScheduledNavigation:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId']),
|
|
delay=float(json['delay']),
|
|
reason=ClientNavigationReason.from_json(json['reason']),
|
|
url=str(json['url'])
|
|
)
|
|
|
|
|
|
@event_class('Page.frameStartedLoading')
|
|
@dataclass
|
|
class FrameStartedLoading:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Fired when frame has started loading.
|
|
'''
|
|
#: Id of the frame that has started loading.
|
|
frame_id: FrameId
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FrameStartedLoading:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId'])
|
|
)
|
|
|
|
|
|
@event_class('Page.frameStoppedLoading')
|
|
@dataclass
|
|
class FrameStoppedLoading:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Fired when frame has stopped loading.
|
|
'''
|
|
#: Id of the frame that has stopped loading.
|
|
frame_id: FrameId
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> FrameStoppedLoading:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId'])
|
|
)
|
|
|
|
|
|
@event_class('Page.downloadWillBegin')
|
|
@dataclass
|
|
class DownloadWillBegin:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Fired when page is about to start a download.
|
|
'''
|
|
#: Id of the frame that caused download to begin.
|
|
frame_id: FrameId
|
|
#: Global unique identifier of the download.
|
|
guid: str
|
|
#: URL of the resource being downloaded.
|
|
url: str
|
|
#: Suggested file name of the resource (the actual name of the file saved on disk may differ).
|
|
suggested_filename: str
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> DownloadWillBegin:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId']),
|
|
guid=str(json['guid']),
|
|
url=str(json['url']),
|
|
suggested_filename=str(json['suggestedFilename'])
|
|
)
|
|
|
|
|
|
@event_class('Page.downloadProgress')
|
|
@dataclass
|
|
class DownloadProgress:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Fired when download makes progress. Last call has ``done`` == true.
|
|
'''
|
|
#: Global unique identifier of the download.
|
|
guid: str
|
|
#: Total expected bytes to download.
|
|
total_bytes: float
|
|
#: Total bytes received.
|
|
received_bytes: float
|
|
#: Download status.
|
|
state: str
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> DownloadProgress:
|
|
return cls(
|
|
guid=str(json['guid']),
|
|
total_bytes=float(json['totalBytes']),
|
|
received_bytes=float(json['receivedBytes']),
|
|
state=str(json['state'])
|
|
)
|
|
|
|
|
|
@event_class('Page.interstitialHidden')
|
|
@dataclass
|
|
class InterstitialHidden:
|
|
'''
|
|
Fired when interstitial page was hidden
|
|
'''
|
|
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> InterstitialHidden:
|
|
return cls(
|
|
|
|
)
|
|
|
|
|
|
@event_class('Page.interstitialShown')
|
|
@dataclass
|
|
class InterstitialShown:
|
|
'''
|
|
Fired when interstitial page was shown
|
|
'''
|
|
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> InterstitialShown:
|
|
return cls(
|
|
|
|
)
|
|
|
|
|
|
@event_class('Page.javascriptDialogClosed')
|
|
@dataclass
|
|
class JavascriptDialogClosed:
|
|
'''
|
|
Fired when a JavaScript initiated dialog (alert, confirm, prompt, or onbeforeunload) has been
|
|
closed.
|
|
'''
|
|
#: Whether dialog was confirmed.
|
|
result: bool
|
|
#: User input in case of prompt.
|
|
user_input: str
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> JavascriptDialogClosed:
|
|
return cls(
|
|
result=bool(json['result']),
|
|
user_input=str(json['userInput'])
|
|
)
|
|
|
|
|
|
@event_class('Page.javascriptDialogOpening')
|
|
@dataclass
|
|
class JavascriptDialogOpening:
|
|
'''
|
|
Fired when a JavaScript initiated dialog (alert, confirm, prompt, or onbeforeunload) is about to
|
|
open.
|
|
'''
|
|
#: Frame url.
|
|
url: str
|
|
#: Message that will be displayed by the dialog.
|
|
message: str
|
|
#: Dialog type.
|
|
type_: DialogType
|
|
#: True iff browser is capable showing or acting on the given dialog. When browser has no
|
|
#: dialog handler for given target, calling alert while Page domain is engaged will stall
|
|
#: the page execution. Execution can be resumed via calling Page.handleJavaScriptDialog.
|
|
has_browser_handler: bool
|
|
#: Default dialog prompt.
|
|
default_prompt: typing.Optional[str]
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> JavascriptDialogOpening:
|
|
return cls(
|
|
url=str(json['url']),
|
|
message=str(json['message']),
|
|
type_=DialogType.from_json(json['type']),
|
|
has_browser_handler=bool(json['hasBrowserHandler']),
|
|
default_prompt=str(json['defaultPrompt']) if 'defaultPrompt' in json else None
|
|
)
|
|
|
|
|
|
@event_class('Page.lifecycleEvent')
|
|
@dataclass
|
|
class LifecycleEvent:
|
|
'''
|
|
Fired for top level page lifecycle events such as navigation, load, paint, etc.
|
|
'''
|
|
#: Id of the frame.
|
|
frame_id: FrameId
|
|
#: Loader identifier. Empty string if the request is fetched from worker.
|
|
loader_id: network.LoaderId
|
|
name: str
|
|
timestamp: network.MonotonicTime
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> LifecycleEvent:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId']),
|
|
loader_id=network.LoaderId.from_json(json['loaderId']),
|
|
name=str(json['name']),
|
|
timestamp=network.MonotonicTime.from_json(json['timestamp'])
|
|
)
|
|
|
|
|
|
@event_class('Page.loadEventFired')
|
|
@dataclass
|
|
class LoadEventFired:
|
|
timestamp: network.MonotonicTime
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> LoadEventFired:
|
|
return cls(
|
|
timestamp=network.MonotonicTime.from_json(json['timestamp'])
|
|
)
|
|
|
|
|
|
@event_class('Page.navigatedWithinDocument')
|
|
@dataclass
|
|
class NavigatedWithinDocument:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Fired when same-document navigation happens, e.g. due to history API usage or anchor navigation.
|
|
'''
|
|
#: Id of the frame.
|
|
frame_id: FrameId
|
|
#: Frame's new url.
|
|
url: str
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> NavigatedWithinDocument:
|
|
return cls(
|
|
frame_id=FrameId.from_json(json['frameId']),
|
|
url=str(json['url'])
|
|
)
|
|
|
|
|
|
@event_class('Page.screencastFrame')
|
|
@dataclass
|
|
class ScreencastFrame:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Compressed image data requested by the ``startScreencast``.
|
|
'''
|
|
#: Base64-encoded compressed image.
|
|
data: str
|
|
#: Screencast frame metadata.
|
|
metadata: ScreencastFrameMetadata
|
|
#: Frame number.
|
|
session_id: int
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> ScreencastFrame:
|
|
return cls(
|
|
data=str(json['data']),
|
|
metadata=ScreencastFrameMetadata.from_json(json['metadata']),
|
|
session_id=int(json['sessionId'])
|
|
)
|
|
|
|
|
|
@event_class('Page.screencastVisibilityChanged')
|
|
@dataclass
|
|
class ScreencastVisibilityChanged:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Fired when the page with currently enabled screencast was shown or hidden .
|
|
'''
|
|
#: True if the page is visible.
|
|
visible: bool
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> ScreencastVisibilityChanged:
|
|
return cls(
|
|
visible=bool(json['visible'])
|
|
)
|
|
|
|
|
|
@event_class('Page.windowOpen')
|
|
@dataclass
|
|
class WindowOpen:
|
|
'''
|
|
Fired when a new window is going to be opened, via window.open(), link click, form submission,
|
|
etc.
|
|
'''
|
|
#: The URL for the new window.
|
|
url: str
|
|
#: Window name.
|
|
window_name: str
|
|
#: An array of enabled window features.
|
|
window_features: typing.List[str]
|
|
#: Whether or not it was triggered by user gesture.
|
|
user_gesture: bool
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> WindowOpen:
|
|
return cls(
|
|
url=str(json['url']),
|
|
window_name=str(json['windowName']),
|
|
window_features=[str(i) for i in json['windowFeatures']],
|
|
user_gesture=bool(json['userGesture'])
|
|
)
|
|
|
|
|
|
@event_class('Page.compilationCacheProduced')
|
|
@dataclass
|
|
class CompilationCacheProduced:
|
|
'''
|
|
**EXPERIMENTAL**
|
|
|
|
Issued for every compilation cache generated. Is only available
|
|
if Page.setGenerateCompilationCache is enabled.
|
|
'''
|
|
url: str
|
|
#: Base64-encoded data
|
|
data: str
|
|
|
|
@classmethod
|
|
def from_json(cls, json: T_JSON_DICT) -> CompilationCacheProduced:
|
|
return cls(
|
|
url=str(json['url']),
|
|
data=str(json['data'])
|
|
)
|