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

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

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


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


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标头的字典。所有标头值必须是字符串。


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

相关文章
|
6月前
|
JavaScript
js开发:请解释什么是ES6的类(class),并说明它与传统构造函数的区别。
ES6的类提供了一种更简洁的面向对象编程方式,对比传统的构造函数,具有更好的可读性和可维护性。类使用`class`定义,`constructor`定义构造方法,`extends`实现继承,并可直接定义静态方法。示例展示了如何创建`Person`类、`Student`子类以及它们的方法调用。
60 2
|
5月前
|
安全 Java 数据安全/隐私保护
Java 封装:对象的“面纱”下,隐藏着怎样的世界?
【6月更文挑战第15天】Java封装是对象的隐私保护,它隐藏类的内部细节并设定访问接口。`Person`类展示了如何用`private`字段和公共getter/setter方法实现封装,确保数据安全性和代码可维护性。例如,`BankAccount`类封装了余额,只允许通过`deposit`、`withdraw`和`getBalance`方法操作。封装减少了外部干扰,增强安全性,提高可扩展性,是Java面向对象编程的核心原则之一。
298 0
|
6月前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
47 0
Java Package用法:组织与管理类的利器
Java Package用法:组织与管理类的利器
|
Java 程序员 编译器
探索Java中的方法和函数:优雅的代码组织与调用
探索Java中的方法和函数:优雅的代码组织与调用
78 0
|
jenkins 测试技术 持续交付
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
上一篇已经给大家都介绍过了流程类接口关联,但是由于博客的登录机制改变,所以没有办法给小伙伴们实战演练一下,那么这篇就按照上一篇计划的用jenkins来给小伙伴们演示一下流程类接口的封装和调用,其实很简单,就是用上一篇和前边这篇传送门的代码稍稍修改即可。不知道你自己练习了么,如果练习了,可以看看和我有什么不同,没练习的看看自己思路和我有啥不一样。好了废话少说进入主题
201 0
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
|
Java
终极Java反序列化Payload缩小技术
终极Java反序列化Payload缩小技术
562 0
|
JavaScript 前端开发 Ruby
前端培训-初级阶段(13)-类,模块,继承
前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。 该文为前端培训-初级阶段(13、18)的补充内容 (介绍了 ECMAScript 历史,ES6 常用点)。 本文介绍ECMAScript基础知识。 前端培训-初级阶段(13) - ECMAScript (语法、变量、值、类型、运算符、语句) 前端培训-初级阶段(13) - ECMAScript (内置对象、函数) 基础内容知识我们会用到。默认已读。
169 0
前端培训-初级阶段(13)-类,模块,继承