重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(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标头的字典。所有标头值必须是字符串。
本篇文章整理了三分之二还有三分之一明天继续,来不及了。