Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
async def click(self, x: float, y: float, options: dict = None,
**kwargs: Any) -> None:
"""Click button at (``x``, ``y``).
Shortcut to :meth:`move`, :meth:`down`, and :meth:`up`.
This method accepts the following options:
* ``button`` (str): ``left``, ``right``, or ``middle``, defaults to
``left``.
* ``clickCount`` (int): defaults to 1.
* ``delay`` (int|float): Time to wait between ``mousedown`` and
``mouseup`` in milliseconds. Defaults to 0.
"""
options = merge_dict(options, kwargs)
await self.move(x, y)
await self.down(options)
if options and options.get('delay'):
await asyncio.sleep(options.get('delay', 0) / 1000)
await self.up(options)
def __init__(self, frameManager: FrameManager, frame: Frame, timeout: int,
options: Dict = None, **kwargs: Any) -> None:
"""Make new navigator watcher."""
options = merge_dict(options, kwargs)
self._validate_options(options)
self._frameManager = frameManager
self._frame = frame
self._initialLoaderId = frame._loaderId
self._timeout = timeout
self._hasSameDocumentNavigation = False
self._eventListeners = [
helper.addEventListener(
self._frameManager,
FrameManager.Events.LifecycleEvent,
self._checkLifecycleComplete,
),
helper.addEventListener(
self._frameManager,
FrameManager.Events.FrameNavigatedWithinDocument,
self._navigatedWithinDocument,
async def start(self, options: Dict = None, **kwargs: Any) -> None:
"""Start coverage measurement."""
options = merge_dict(options, kwargs)
if self._enabled:
raise PageError('JSCoverage is always enabled.')
self._resetOnNavigation = (True if 'resetOnNavigation' not in options
else bool(options['resetOnNavigation']))
self._reportAnonymousScript = bool(options.get('reportAnonymousScript')) # noqa: E501
self._enabled = True
self._scriptURLs.clear()
self._scriptSources.clear()
self._eventListeners = [
helper.addEventListener(
self._client, 'Debugger.scriptParsed',
lambda e: self._client._loop.create_task(
self._onScriptParsed(e))),
helper.addEventListener(
self._client, 'Runtime.executionContextsCleared',
self._onExecutionContextsCleared),
async def addStyleTag(self, options: Dict = None, **kwargs: str
) -> ElementHandle:
"""Add style or link tag to this page.
One of ``url``, ``path`` or ``content`` option is necessary.
* ``url`` (string): URL of the link tag to add.
* ``path`` (string): Path to the local CSS file to add.
* ``content`` (string): CSS string to add.
:return ElementHandle: :class:`~pyppeteer.element_handle.ElementHandle`
of added tag.
"""
frame = self.mainFrame
if not frame:
raise PageError('no main frame.')
options = merge_dict(options, kwargs)
return await frame.addStyleTag(options)
async def click(self, selector: str, options: dict = None, **kwargs: Any
) -> None:
"""Click element which matches ``selector``.
Details see :meth:`pyppeteer.page.Page.click`.
"""
options = merge_dict(options, kwargs)
handle = await self.J(selector)
if not handle:
raise PageError('No node found for selector: ' + selector)
await handle.click(options)
await handle.dispose()
def waitForFunction(self, pageFunction: str, options: dict = None,
*args: Any, **kwargs: Any) -> 'WaitTask':
"""Wait until the function completes.
Details see :meth:`pyppeteer.page.Page.waitForFunction`.
"""
options = merge_dict(options, kwargs)
timeout = options.get('timeout', 30000) # msec
polling = options.get('polling', 'raf')
return WaitTask(self, pageFunction, 'function', polling, timeout,
self._client._loop, *args)
to be generated.
:arg str key: Name of key to press, such as ``ArrowLeft``.
This method accepts the following options:
* ``text`` (str): If specified, generates an input event with this
text.
* ``delay`` (int|float): Time to wait between ``keydown`` and
``keyup``. Defaults to 0.
.. note::
Modifier keys DO effect :meth:`press`. Holding down ``Shift`` will
type the text in upper case.
"""
options = merge_dict(options, kwargs)
await self.down(key, options)
if 'delay' in options:
await asyncio.sleep(options['delay'] / 1000)
await self.up(key)
async def up(self, options: dict = None, **kwargs: Any) -> None:
"""Release pressed button (dispatches ``mouseup`` event).
This method accepts the following options:
* ``button`` (str): ``left``, ``right``, or ``middle``, defaults to
``left``.
* ``clickCount`` (int): defaults to 1.
"""
options = merge_dict(options, kwargs)
self._button = 'none'
await self._client.send('Input.dispatchMouseEvent', {
'type': 'mouseReleased',
'button': options.get('button', 'left'),
'x': self._x,
'y': self._y,
'modifiers': self._keyboard._modifiers,
'clickCount': options.get('clickCount') or 1,
})
def defaultArgs(options: Dict = None, **kwargs: Any) -> List[str]: # noqa: C901,E501
"""Get the default flags the chromium will be launched with.
``options`` or keyword arguments are set of configurable options to set on
the browser. Can have the following fields:
* ``headless`` (bool): Whether to run browser in headless mode. Defaults to
``True`` unless the ``devtools`` option is ``True``.
* ``args`` (List[str]): Additional arguments to pass to the browser
instance. The list of chromium flags can be found
`here `__.
* ``userDataDir`` (str): Path to a User Data Directory.
* ``devtools`` (bool): Whether to auto-open DevTools panel for each tab. If
this option is ``True``, the ``headless`` option will be set ``False``.
"""
options = merge_dict(options, kwargs)
devtools = options.get('devtools', False)
headless = options.get('headless', not devtools)
args = options.get('args', list())
userDataDir = options.get('userDataDir')
chromeArguments = copy(DEFAULT_ARGS)
if userDataDir:
chromeArguments.append(f'--user-data-dir={userDataDir}')
if devtools:
chromeArguments.append('--auto-open-devtools-for-tabs')
if headless:
chromeArguments.extend((
'--headless',
'--hide-scrollbars',
'--mute-audio',
))
def __init__(self, options: Dict[str, Any] = None, # noqa: C901
**kwargs: Any) -> None:
"""Make new launcher."""
options = merge_dict(options, kwargs)
self.port = get_free_port()
self.url = f'http://127.0.0.1:{self.port}'
self._loop = options.get('loop', asyncio.get_event_loop())
self.chromeClosed = True
ignoreDefaultArgs = options.get('ignoreDefaultArgs', False)
args: List[str] = options.get('args', list())
self.dumpio = options.get('dumpio', False)
executablePath = options.get('executablePath')
self.env = options.get('env')
self.handleSIGINT = options.get('handleSIGINT', True)
self.handleSIGTERM = options.get('handleSIGTERM', True)
self.handleSIGHUP = options.get('handleSIGHUP', True)
self.ignoreHTTPSErrors = options.get('ignoreHTTPSErrors', False)
self.defaultViewport = options.get('defaultViewport', {'width': 800, 'height': 600}) # noqa: E501