美文网首页
pyppeteer最为核心类Page的接口方法

pyppeteer最为核心类Page的接口方法

作者: Python之战 | 来源:发表于2019-04-29 09:42 被阅读0次

    Page类是pyppeteer的核心,其价值就犹如selenium的driver,具体的页面操作都在Page类上;Page与driver比较最具优势的是和js的交互,可以修改本地js、css,也可以给页面添加js函数,甚至添加自定义函数到浏览器的windows属性中,也有js拦截相关的设置,更有终端模拟设置,这些功能是比driver更为强大的功能,但是也有一些劣势如页面超时方面比driver弱、选择器不简洁等问题。

    页面类:Page 基类:pyee.EventEmitter

    此类提供了与单个chrome选项卡进行交互的方法。一个 Browser对象可能有多个Page对象。

    选择器
    Page类选择器相关方法有5个,并且这五个都有别名,分别是:

    J()别名querySelector()

    JJ()别名querySelectorAll()

    JJeval()别名querySelectorAllEval()

    Jeval()别名querySelectorEval()

    Jx()别名xpath()

    协程函数 querySelector(selector:str)

    获取匹配的元素的selector

    参数:搜索元素的选择器字符串。

    返回[ElementHandle]或者None。

    协程函数 querySelectorAll(selector:str)

    获取匹配的所有元素selector作为列表。

    参数:搜索元素的选择器

    返回列表或返回空列表。

    协程函数 querySelectorAllEval(selector:str,pageFunction:str,*args)

    对所有匹配元素执行js

    参数:

    selector(str)-选择器。

    pageFunction(str)-要在浏览器上运行的JavaScript函数的字符串,此函数将匹配元素的数组作为第一个参数。

    args(Any)-传递给pageFunction的其他参数。

    协程函数 querySelectorEval(selector:str,pageFunction:str,*args)

    对匹配的元素执行js函数

    参数:

    selector(str)-定位的选择器字符串。

    pageFunction(str)-要在浏览器上计算的JavaScript函数的字符串,此函数采用与选择器匹配的元素作为第一个参数。

    args(Any)-传递给pageFunction的参数。

    如果没有元素匹配,则此方法会引发错误selector

    协程函数 addScriptTag(options: Dict[KT, VT] = None,**kwargs)

    将脚本标记添加到此页面

    其中需要一个必须参数url,path或content

    url (字符串):要添加的脚本的URL。

    path (字符串):要添加的本地JavaScript文件的路径。

    content (字符串):要添加的JavaScript字符串。

    type(字符串):脚本类型,使用module以加载一个JavaScript ES6模块。

    返回ElementHandle对象

    协程函数 addStyleTag(options: Dict[KT, VT] = None, **kwargs)

    将样式或链接标记添加到此页面

    需要一个必须参数url,path或content

    url (字符串):要添加的链接标记的URL。

    path (字符串):要添加的本地CSS文件的路径。

    content (字符串):要添加的CSS字符串。

    返回添加标签后的ElementHandle

    协程函数 authenticate(credentials: Dict[str, str])

    提供http身份验证的凭据

    credentials为None或dict含有有username和 password的字段字典

    协程函数 bringToFront()

    将页面置于前面(激活选项卡)

    browser

    获取该页面所属的浏览器对象

    协程函数 click(selector: str, options: dict = None, **kwargs)

    单击匹配selector的元素

    将先获取selector元素,在视图底部,将滚动到视图中,然后使用mouse单击元素的中心,如果没有匹配selector,则该方法会引发 PageError

    可用选项包括:

    button(STR):,left,right或middle,默认为 left。

    clickCount (int):默认为1。

    delay(int | float):等待时间mousedown和 mouseup以毫秒为单位默认为0。

    注意

    如果此方法触发元素并且存在其他的的点击事件,则容易产生混乱的判断,单击并等待的正确模式如下:

    await asyncio.gather(
    page.waitForNavigation(waitOptions),
    page.click(selector, clickOptions),
    )

    协程函数 close(options: Dict[KT, VT] = None, **kwargs)

    作用是关闭此页面。

    可用选项:

    runBeforeUnload(bool):默认为False,是否运行页面的处理函数

    注意

    如果runBeforeUnload传递为True,则beforeunload 可以执行弹出对话框,可以通过页面的dialog事件手动处理 。

    协程函数 content()

    获取页面的完整HTML源码

    协程函数 cookies(* urls )

    获取cookie,如果未指定URL,则此方法返回当前页面URL的cookie,如果指定了URL,则仅返回这些URL的cookie。

    返回的cookie是包含以下字段的字典列表:

    name (STR)

    value (STR)

    url (STR)

    domain (STR)

    path (STR)

    expires (数字):Unix时间,以秒为单位

    httpOnly (布尔)

    secure (布尔)

    session (布尔)

    sameSite(str):'Strict'或'Lax'

    coverage

    返回Coverage

    协程函数 deleteCookie(* cookies )

    删除cookie,cookies 应该是包含这些字段的字典:

    name(str):必填

    url (STR)

    domain (STR)

    path (STR)

    secure (布尔)

    协程函数 emulate(options: dict = None, **kwargs)

    模拟给定的设备信息和用户代理,此方法是调用两个方法的快捷方式:

    setUserAgent()

    setViewport()

    options 是包含以下字段的字典:

    viewport(dict)含下列字段

    width (int):页面宽度(以像素为单位)。

    height (int):页面宽度(以像素为单位)。

    deviceScaleFactor(float):指定设备比例(可以认为是dpr),默认为1。

    isMobile(bool):是否考虑标签。默认为。meta viewportFalse

    hasTouch(bool):指定viewport是否支持触摸事件。默认为False。

    isLandscape(bool):指定视口是否处于横向模式。默认为False。

    userAgent (str):用户代理字符串

    协程函数 emulateMedia(mediaType: str = None)

    模拟页面的css媒体类型。

    参数:

    mediaType(str) - 更改页面的CSS媒体类型,允许值'screen','print'和 None,传入None禁用模拟媒体

    协程函数 evaluate(pageFunction:str,* args,force_expr:bool = False )

    在浏览器上执行js-function或js-expression并获取结果。

    参数:

    pageFunction(str) - 要在浏览器上执行的js-function / expression的字符串

    force_expr(bool) - 如果为True,则计算pageFunction为表达式。如果为False(默认值),请尝试自动检测函数或表达式。

    注意:force_exproption是仅关键字参数。

    协程函数 evaluateHandle(pageFunction:str,* args )

    执行此页面上的功能

    evaluateHandle()和evaluate()之间的区别是 evaluateHandle返回JSHandle对象(不是值)。

    参数:

    pageFunction(str) - 要执行的JavaScript函数。

    协程函数 evaluateOnNewDocument(pageFunction:str,* args )

    在文档中添加JavaScript函数。

    将在以下情况发生时调用此函数:

    每当页面被导航时

    每当子框架被附加或导航时。在这种情况下,在新附加的帧的上下文中调用该函数。

    协程函数 exposeFunction(name:str,pyppeteerFunction:Callable [[...],Any] )

    将python函数添加到浏览器的window对象中,可以从chrome进程调用已注册的函数。

    参数:

    name(string) - 窗口对象上函数的名称。

    pyppeteerFunction(Callable) - 将在python进程上调用的函数。此函数不应该是异步函数。

    协程函数 focus(selector:str )

    聚焦匹配的元素,如果没有元素匹配selector,抛出PageError

    frames

    获取此页面的所有frame

    协程函数 goBack(options: dict = None, **kwargs)

    导航到历史记录中的上一页,如果不能回去,返回None。

    协程函数 goForward(options: dict = None, **kwargs)

    导航到历史记录中的下一页,可用选项与goto()方法相同,如果不能前进,返回None。

    协程函数 goto(url:str,options:dict = None,** kwargs )

    打开url地址

    参数:

    url(str) - 将页面导航到的URL,网址应包括类型https://。

    可用选项包括:

    timeout(int):最大导航时间(以毫秒为单位),默认为30秒,传递0给禁用超时。可以使用该setDefaultNavigationTimeout()方法更改默认值。

    waitUntil(str | List [str]):何时考虑导航成功,默认为load。给定事件字符串列表,在所有事件被触发后,导航被认为是成功的。活动可以是:

    load:当load事件被触发时。

    domcontentloaded:当DOMContentLoaded事件被触发时。

    networkidle0:当网络连接数不超过0时,至少500毫秒。

    networkidle2:当网络连接不超过2个,至少500毫秒。

    该Page.goto会引发错误:

    存在SSL错误(例如,在自签名证书的情况下)

    目标网址无效

    在timeout导航期间超过

    然后主资源无法加载

    注意

    goto()要么引发错误,要么返回主要资源响应。唯一的例外是导航到about:blank或导航到具有不同散列的相同URL,这将成功并返回None。

    无头模式不支持导航到PDF文档。

    协程函数 hover(selector:str )

    鼠标悬停在匹配元素上,如果没有元素则抛出PageError。

    协程函数 injectFile(filePath:str )

    [已弃用]将文件注入此页面,不推荐使用此方法,请addScriptTag()改用。

    isClosed()

    判断页面是否关闭

    keyboard

    获取Keyboard对象

    mainFrame

    获取此页面Frame的主要内容

    协程函数 metrics()

    获取页面属性,返回包含指标作为键/值对的字典:

    Timestamp (number):获取度量标准样本的时间戳。

    Documents (int):页面中的文档数。

    Frames (int):页面中的帧数。

    JSEventListeners (int):页面中的事件数。

    Nodes (int):页面中DOM节点的数量。

    LayoutCount (int):完整部分页面布局的总数。

    RecalcStyleCount (int):页面样式重新计算的总数。

    LayoutDuration (int):页面持续时间的组合持续时间。

    RecalcStyleDuration (int):所有页面样式重新计算的组合持续时间。

    ScriptDuration (int):JavaScript执行的组合持续时间。

    TaskDuration (int):浏览器执行的所有任务的组合持续时间。

    JSHeapUsedSize (float):使用的JavaScript堆大小。

    JSHeapTotalSize (float):JavaScript堆总大小。

    mouse

    获取Mouse对象

    协程函数 pdf(options: dict = None, **kwargs)

    生成页面的pdf

    选项:

    path (str):保存PDF的文件路径。

    scale(float):网页渲染的比例,默认为1。

    displayHeaderFooter(bool):显示页眉和页脚。默认为False。

    headerTemplate(str):打印标题的HTML模板。应该是有效的HTML标记与以下类。

    date:格式化的打印日期

    title:文件名

    url:文件位置

    pageNumber:当前页码

    totalPages:文档中的总页数

    footerTemplate(str):打印页脚的HTML模板。应该使用相同的模板headerTemplate。

    printBackground(bool):打印背景图形。默认为 False。

    landscape(bool):纸张方向。默认为False。

    pageRanges(字符串):要打印的纸张范围,例如“1-5,8,11-13”。默认为空字符串,表示所有页面。

    format(str):纸张格式。如果设置,优先于 width或height。默认为Letter。

    width (str):纸张宽度,接受标有单位的值。

    height (str):纸张高度,接受标有单位的值。

    margin(字典):纸张边距,默认为None。

    top (str):上边距,接受标有单位的值。

    right (str):右边距,接受标有单位的值。

    bottom (str):底部边距,接受标有单位的值。

    left (str):左边距,接受标有单位的值。

    返回: 返回生成的PDF bytes对象。

    注意

    目前仅在无头模式下支持生成pdf。

    pdf()使用printcss media 生成页面的pdf,要生成带screen媒体的pdf ,请设置page.emulateMedia('screen')。

    默认情况下,pdf()生成带有修改颜色的pdf以进行打印。使用该--webkit-print-color-adjust属性强制渲染精确颜色。

    await page.emulateMedia('screen')await page.pdf({'path': 'page.pdf'})的width,height和margin选项接受标记单位值,未标记的值被视为像素。

    几个例子:

    page.pdf({'width': 100}):打印宽度设置为100像素。

    page.pdf({'width': '100px'}):打印宽度设置为100像素。

    page.pdf({'width': '10cm'}):打印宽度设置为100厘米。

    所有可用的单位是:

    px:像素

    in:英寸

    cm:厘米

    mm:毫米

    格式选项包括:

    Letter:8.5英寸x 11英寸

    Legal:8.5英寸x 14英寸

    Tabloid:11英寸x 17英寸

    Ledger:17英寸x 11英寸

    A0:33.1英寸x 46.8英寸

    A1:23.4英寸x 33.1英寸

    A2:16.5英寸x 23.4英寸

    A3:11.7英寸x 16.5英寸

    A4:8.27英寸x 11.7英寸

    A5:5.83英寸x 8.27英寸

    A6:4.13英寸x 5.83英寸

    注意

    headerTemplate和footerTemplate标记有以下限制:

    不在模板内的脚本标记。

    页面样式在模板中不可见。

    协程函数 plainText()

    [已弃用]以纯文本格式获取页面内容。

    协程函数queryObjects(prototypeHandle:pyppeteer.execution_context.JSHandle )

    迭代js堆并查找具有句柄的所有对象。

    参数:

    prototypeHandle(JSHandle) - 原型对象的JSHandle。

    协程函数 reload()

    刷新本页

    协程函数 screenshot(options: dict = None, **kwargs)

    屏幕截屏

    可以使用以下选项:

    path(str):保存图像的文件路径。屏幕截图类型将从文件扩展名中推断出来。

    type(str):指定屏幕截图类型,可以是jpeg或 png。默认为png。

    quality(int):图像的质量,在0-100之间。不适用于png图像。

    fullPage(bool):如果为true,请截取完整的可滚动页面。默认为False。

    clip(字典):指定页面剪切区域的对象。此选项应包含以下字段:

    x (int):剪辑区域左上角的x坐标。

    y (int):剪辑区域左上角的y坐标。

    width (int):剪切区域的宽度。

    height (int):剪切区域的高度。

    omitBackground (bool):隐藏默认的白色背景并允许捕获具有透明度的屏幕截图。

    encoding(str):图像的编码可以是 'base64'或'binary'。默认为'binary'。

    协程函数 select(selector:str,* values )

    选择选项并返回所选值,如果没有元素匹配selector,请加注ElementHandleError。

    协程函数 setBypassCSP(enabled:bool )

    切换绕过页面的Content-Security-Policy。

    注意

    CSP绕过在CSP初始化而不是评估时发生,通常这意味着page.setBypassCSP 应该在导航到域之前调用它。

    协程函数 setCacheEnabled(enabled:bool = True )

    为每个请求启用/禁用缓存,默认情况下,启用缓存

    协程函数 setContent(html:str )

    将内容设置为此页面

    参数:

    html(str) - 要分配给页面的HTML标记。

    协程函数 setCookie(* cookies )

    设置cookie

    cookies 应该是包含这些字段的字典:

    name(str):必填

    value(str):必填

    url (STR)

    domain (STR)

    path (STR)

    expires (数字):Unix时间,以秒为单位

    httpOnly (布尔)

    secure (布尔)

    sameSite(str):'Strict'或'Lax'

    setDefaultNavigationTimeout(timeout:int )

    更改默认的最大导航超时,此方法更改以下方法的默认超时30秒:

    goto()

    goBack()

    goForward()

    reload()

    waitForNavigation()

    参数:

    timeout(int) - 最大导航时间(以毫秒为单位),设置为零0 禁用超时。

    协程函数 setExtraHTTPHeaders(title:Dict [str,str] )

    设置额外的HTTP标头,将在页面启动的每个请求中发送额外的HTTP标头

    注意

    page.setExtraHTTPHeaders 不保证传出请求中的标头顺序。

    参数:

    headers(Dict) - 包含要与每个请求一起发送的其他http标头的字典。所有标头值必须是字符串。

    本篇文章整理了三分之二还有三分之一明天继续,来不及了。

    重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味!

    相关文章

      网友评论

          本文标题:pyppeteer最为核心类Page的接口方法

          本文链接:https://www.haomeiwen.com/subject/jtpenqtx.html