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

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之战),每日更新原汁原味!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容