Page類是pyppeteer的核心心赶,其價(jià)值就猶如selenium的driver,具體的頁(yè)面操作都在Page類上;Page與driver比較最具優(yōu)勢(shì)的是和js的交互秦踪,可以修改本地js机错、css爬范,也可以給頁(yè)面添加js函數(shù),甚至添加自定義函數(shù)到瀏覽器的windows屬性中弱匪,也有js攔截相關(guān)的設(shè)置青瀑,更有終端模擬設(shè)置,這些功能是比driver更為強(qiáng)大的功能,但是也有一些劣勢(shì)如頁(yè)面超時(shí)方面比driver弱斥难、選擇器不簡(jiǎn)潔等問(wèn)題枝嘶。
頁(yè)面類:Page 基類:pyee.EventEmitter
此類提供了與單個(gè)chrome選項(xiàng)卡進(jìn)行交互的方法。一個(gè) Browser對(duì)象可能有多個(gè)Page對(duì)象哑诊。
選擇器
Page類選擇器相關(guān)方法有5個(gè)躬络,并且這五個(gè)都有別名,分別是:
J()別名querySelector()
JJ()別名querySelectorAll()
JJeval()別名querySelectorAllEval()
Jeval()別名querySelectorEval()
Jx()別名xpath()
協(xié)程函數(shù) querySelector(selector:str)
獲取匹配的元素的selector
參數(shù):搜索元素的選擇器字符串搭儒。
返回[ElementHandle]或者None穷当。
協(xié)程函數(shù) querySelectorAll(selector:str)
獲取匹配的所有元素selector作為列表。
參數(shù):搜索元素的選擇器
返回列表或返回空列表淹禾。
協(xié)程函數(shù) querySelectorAllEval(selector:str馁菜,pageFunction:str,*args)
對(duì)所有匹配元素執(zhí)行js
參數(shù):
selector(str)-選擇器铃岔。
pageFunction(str)-要在瀏覽器上運(yùn)行的JavaScript函數(shù)的字符串汪疮,此函數(shù)將匹配元素的數(shù)組作為第一個(gè)參數(shù)。
args(Any)-傳遞給pageFunction的其他參數(shù)毁习。
協(xié)程函數(shù) querySelectorEval(selector:str智嚷,pageFunction:str,*args)
對(duì)匹配的元素執(zhí)行js函數(shù)
參數(shù):
selector(str)-定位的選擇器字符串纺且。
pageFunction(str)-要在瀏覽器上計(jì)算的JavaScript函數(shù)的字符串盏道,此函數(shù)采用與選擇器匹配的元素作為第一個(gè)參數(shù)。
args(Any)-傳遞給pageFunction的參數(shù)载碌。
如果沒(méi)有元素匹配猜嘱,則此方法會(huì)引發(fā)錯(cuò)誤selector
協(xié)程函數(shù) addScriptTag(options: Dict[KT, VT] = None,**kwargs)
將腳本標(biāo)記添加到此頁(yè)面
其中需要一個(gè)必須參數(shù)url,path或content
url (字符串):要添加的腳本的URL嫁艇。
path (字符串):要添加的本地JavaScript文件的路徑朗伶。
content (字符串):要添加的JavaScript字符串。
type(字符串):腳本類型步咪,使用module以加載一個(gè)JavaScript ES6模塊论皆。
返回ElementHandle對(duì)象
協(xié)程函數(shù) addStyleTag(options: Dict[KT, VT] = None, **kwargs)
將樣式或鏈接標(biāo)記添加到此頁(yè)面
需要一個(gè)必須參數(shù)url,path或content
url (字符串):要添加的鏈接標(biāo)記的URL猾漫。
path (字符串):要添加的本地CSS文件的路徑点晴。
content (字符串):要添加的CSS字符串。
返回添加標(biāo)簽后的ElementHandle
協(xié)程函數(shù) authenticate(credentials: Dict[str, str])
提供http身份驗(yàn)證的憑據(jù)
credentials為None或dict含有有username和 password的字段字典
協(xié)程函數(shù) bringToFront()
將頁(yè)面置于前面(激活選項(xiàng)卡)
browser
獲取該頁(yè)面所屬的瀏覽器對(duì)象
協(xié)程函數(shù) click(selector: str, options: dict = None, **kwargs)
單擊匹配selector的元素
將先獲取selector元素静袖,在視圖底部觉鼻,將滾動(dòng)到視圖中,然后使用mouse單擊元素的中心队橙,如果沒(méi)有匹配selector坠陈,則該方法會(huì)引發(fā) PageError
可用選項(xiàng)包括:
button(STR):萨惑,left,right或middle仇矾,默認(rèn)為 left庸蔼。
clickCount (int):默認(rèn)為1。
delay(int | float):等待時(shí)間mousedown和 mouseup以毫秒為單位默認(rèn)為0贮匕。
注意
如果此方法觸發(fā)元素并且存在其他的的點(diǎn)擊事件姐仅,則容易產(chǎn)生混亂的判斷,單擊并等待的正確模式如下:
await asyncio.gather(
page.waitForNavigation(waitOptions),
page.click(selector, clickOptions),
)
協(xié)程函數(shù) close(options: Dict[KT, VT] = None, **kwargs)
作用是關(guān)閉此頁(yè)面刻盐。
可用選項(xiàng):
runBeforeUnload(bool):默認(rèn)為False掏膏,是否運(yùn)行頁(yè)面的處理函數(shù)
注意
如果runBeforeUnload傳遞為True,則beforeunload 可以執(zhí)行彈出對(duì)話框敦锌,可以通過(guò)頁(yè)面的dialog事件手動(dòng)處理 馒疹。
協(xié)程函數(shù) content()
獲取頁(yè)面的完整HTML源碼
協(xié)程函數(shù) cookies(* urls )
獲取cookie,如果未指定URL乙墙,則此方法返回當(dāng)前頁(yè)面URL的cookie颖变,如果指定了URL,則僅返回這些URL的cookie听想。
返回的cookie是包含以下字段的字典列表:
name (STR)
value (STR)
url (STR)
domain (STR)
path (STR)
expires (數(shù)字):Unix時(shí)間腥刹,以秒為單位
httpOnly (布爾)
secure (布爾)
session (布爾)
sameSite(str):'Strict'或'Lax'
coverage
返回Coverage
協(xié)程函數(shù) deleteCookie(* cookies )
刪除cookie,cookies 應(yīng)該是包含這些字段的字典:
name(str):必填
url (STR)
domain (STR)
path (STR)
secure (布爾)
協(xié)程函數(shù) emulate(options: dict = None, **kwargs)
模擬給定的設(shè)備信息和用戶代理汉买,此方法是調(diào)用兩個(gè)方法的快捷方式:
setUserAgent()
setViewport()
options 是包含以下字段的字典:
viewport(dict)含下列字段
width (int):頁(yè)面寬度(以像素為單位)衔峰。
height (int):頁(yè)面寬度(以像素為單位)。
deviceScaleFactor(float):指定設(shè)備比例(可以認(rèn)為是dpr)录别,默認(rèn)為1朽色。
isMobile(bool):是否考慮標(biāo)簽邻吞。默認(rèn)為组题。meta viewportFalse
hasTouch(bool):指定viewport是否支持觸摸事件。默認(rèn)為False抱冷。
isLandscape(bool):指定視口是否處于橫向模式崔列。默認(rèn)為False。
userAgent (str):用戶代理字符串
協(xié)程函數(shù) emulateMedia(mediaType: str = None)
模擬頁(yè)面的css媒體類型旺遮。
參數(shù):
mediaType(str) - 更改頁(yè)面的CSS媒體類型赵讯,允許值'screen','print'和 None耿眉,傳入None禁用模擬媒體
協(xié)程函數(shù) evaluate(pageFunction:str边翼,* args,force_expr:bool = False )
在瀏覽器上執(zhí)行js-function或js-expression并獲取結(jié)果鸣剪。
參數(shù):
pageFunction(str) - 要在瀏覽器上執(zhí)行的js-function / expression的字符串
force_expr(bool) - 如果為True组底,則計(jì)算pageFunction為表達(dá)式丈积。如果為False(默認(rèn)值),請(qǐng)嘗試自動(dòng)檢測(cè)函數(shù)或表達(dá)式债鸡。
注意:force_exproption是僅關(guān)鍵字參數(shù)江滨。
協(xié)程函數(shù) evaluateHandle(pageFunction:str,* args )
執(zhí)行此頁(yè)面上的功能
evaluateHandle()和evaluate()之間的區(qū)別是 evaluateHandle返回JSHandle對(duì)象(不是值)厌均。
參數(shù):
pageFunction(str) - 要執(zhí)行的JavaScript函數(shù)唬滑。
協(xié)程函數(shù) evaluateOnNewDocument(pageFunction:str,* args )
在文檔中添加JavaScript函數(shù)棺弊。
將在以下情況發(fā)生時(shí)調(diào)用此函數(shù):
每當(dāng)頁(yè)面被導(dǎo)航時(shí)
每當(dāng)子框架被附加或?qū)Ш綍r(shí)晶密。在這種情況下,在新附加的幀的上下文中調(diào)用該函數(shù)模她。
協(xié)程函數(shù) exposeFunction(name:str惹挟,pyppeteerFunction:Callable [[...],Any] )
將python函數(shù)添加到瀏覽器的window對(duì)象中缝驳,可以從chrome進(jìn)程調(diào)用已注冊(cè)的函數(shù)连锯。
參數(shù):
name(string) - 窗口對(duì)象上函數(shù)的名稱。
pyppeteerFunction(Callable) - 將在python進(jìn)程上調(diào)用的函數(shù)用狱。此函數(shù)不應(yīng)該是異步函數(shù)运怖。
協(xié)程函數(shù) focus(selector:str )
聚焦匹配的元素,如果沒(méi)有元素匹配selector,拋出PageError
frames
獲取此頁(yè)面的所有frame
協(xié)程函數(shù) goBack(options: dict = None, **kwargs)
導(dǎo)航到歷史記錄中的上一頁(yè),如果不能回去夏伊,返回None摇展。
協(xié)程函數(shù) goForward(options: dict = None, **kwargs)
導(dǎo)航到歷史記錄中的下一頁(yè),可用選項(xiàng)與goto()方法相同溺忧,如果不能前進(jìn)咏连,返回None。
協(xié)程函數(shù) goto(url:str鲁森,options:dict = None祟滴,** kwargs )
打開(kāi)url地址
參數(shù):
url(str) - 將頁(yè)面導(dǎo)航到的URL,網(wǎng)址應(yīng)包括類型https://歌溉。
可用選項(xiàng)包括:
timeout(int):最大導(dǎo)航時(shí)間(以毫秒為單位)垄懂,默認(rèn)為30秒,傳遞0給禁用超時(shí)痛垛〔莼郏可以使用該setDefaultNavigationTimeout()方法更改默認(rèn)值。
waitUntil(str | List [str]):何時(shí)考慮導(dǎo)航成功匙头,默認(rèn)為load漫谷。給定事件字符串列表,在所有事件被觸發(fā)后蹂析,導(dǎo)航被認(rèn)為是成功的舔示⌒嗄活動(dòng)可以是:
load:當(dāng)load事件被觸發(fā)時(shí)。
domcontentloaded:當(dāng)DOMContentLoaded事件被觸發(fā)時(shí)斩郎。
networkidle0:當(dāng)網(wǎng)絡(luò)連接數(shù)不超過(guò)0時(shí)脑融,至少500毫秒。
networkidle2:當(dāng)網(wǎng)絡(luò)連接不超過(guò)2個(gè)缩宜,至少500毫秒肘迎。
該P(yáng)age.goto會(huì)引發(fā)錯(cuò)誤:
存在SSL錯(cuò)誤(例如,在自簽名證書的情況下)
目標(biāo)網(wǎng)址無(wú)效
在timeout導(dǎo)航期間超過(guò)
然后主資源無(wú)法加載
注意
goto()要么引發(fā)錯(cuò)誤锻煌,要么返回主要資源響應(yīng)妓布。唯一的例外是導(dǎo)航到about:blank或?qū)Ш降骄哂胁煌⒘械南嗤琔RL,這將成功并返回None宋梧。
無(wú)頭模式不支持導(dǎo)航到PDF文檔匣沼。
協(xié)程函數(shù) hover(selector:str )
鼠標(biāo)懸停在匹配元素上,如果沒(méi)有元素則拋出PageError捂龄。
協(xié)程函數(shù) injectFile(filePath:str )
[已棄用]將文件注入此頁(yè)面释涛,不推薦使用此方法,請(qǐng)addScriptTag()改用倦沧。
isClosed()
判斷頁(yè)面是否關(guān)閉
keyboard
獲取Keyboard對(duì)象
mainFrame
獲取此頁(yè)面Frame的主要內(nèi)容
協(xié)程函數(shù) metrics()
獲取頁(yè)面屬性唇撬,返回包含指標(biāo)作為鍵/值對(duì)的字典:
Timestamp (number):獲取度量標(biāo)準(zhǔn)樣本的時(shí)間戳。
Documents (int):頁(yè)面中的文檔數(shù)展融。
Frames (int):頁(yè)面中的幀數(shù)窖认。
JSEventListeners (int):頁(yè)面中的事件數(shù)。
Nodes (int):頁(yè)面中DOM節(jié)點(diǎn)的數(shù)量告希。
LayoutCount (int):完整部分頁(yè)面布局的總數(shù)扑浸。
RecalcStyleCount (int):頁(yè)面樣式重新計(jì)算的總數(shù)。
LayoutDuration (int):頁(yè)面持續(xù)時(shí)間的組合持續(xù)時(shí)間燕偶。
RecalcStyleDuration (int):所有頁(yè)面樣式重新計(jì)算的組合持續(xù)時(shí)間喝噪。
ScriptDuration (int):JavaScript執(zhí)行的組合持續(xù)時(shí)間。
TaskDuration (int):瀏覽器執(zhí)行的所有任務(wù)的組合持續(xù)時(shí)間杭跪。
JSHeapUsedSize (float):使用的JavaScript堆大小仙逻。
JSHeapTotalSize (float):JavaScript堆總大小。
mouse
獲取Mouse對(duì)象
協(xié)程函數(shù) pdf(options: dict = None, **kwargs)
生成頁(yè)面的pdf
選項(xiàng):
path (str):保存PDF的文件路徑涧尿。
scale(float):網(wǎng)頁(yè)渲染的比例,默認(rèn)為1檬贰。
displayHeaderFooter(bool):顯示頁(yè)眉和頁(yè)腳姑廉。默認(rèn)為False。
headerTemplate(str):打印標(biāo)題的HTML模板翁涤。應(yīng)該是有效的HTML標(biāo)記與以下類桥言。
date:格式化的打印日期
title:文件名
url:文件位置
pageNumber:當(dāng)前頁(yè)碼
totalPages:文檔中的總頁(yè)數(shù)
footerTemplate(str):打印頁(yè)腳的HTML模板萌踱。應(yīng)該使用相同的模板headerTemplate。
printBackground(bool):打印背景圖形号阿。默認(rèn)為 False并鸵。
landscape(bool):紙張方向。默認(rèn)為False扔涧。
pageRanges(字符串):要打印的紙張范圍园担,例如“1-5,8,11-13”。默認(rèn)為空字符串枯夜,表示所有頁(yè)面弯汰。
format(str):紙張格式。如果設(shè)置湖雹,優(yōu)先于 width或height咏闪。默認(rèn)為L(zhǎng)etter。
width (str):紙張寬度摔吏,接受標(biāo)有單位的值鸽嫂。
height (str):紙張高度,接受標(biāo)有單位的值征讲。
margin(字典):紙張邊距溪胶,默認(rèn)為None。
top (str):上邊距稳诚,接受標(biāo)有單位的值哗脖。
right (str):右邊距,接受標(biāo)有單位的值扳还。
bottom (str):底部邊距才避,接受標(biāo)有單位的值。
left (str):左邊距氨距,接受標(biāo)有單位的值桑逝。
返回: 返回生成的PDF bytes對(duì)象。
注意
目前僅在無(wú)頭模式下支持生成pdf俏让。
pdf()使用printcss media 生成頁(yè)面的pdf楞遏,要生成帶screen媒體的pdf ,請(qǐng)?jiān)O(shè)置page.emulateMedia('screen')首昔。
默認(rèn)情況下寡喝,pdf()生成帶有修改顏色的pdf以進(jìn)行打印。使用該--webkit-print-color-adjust屬性強(qiáng)制渲染精確顏色勒奇。
await page.emulateMedia('screen')await page.pdf({'path': 'page.pdf'})的width预鬓,height和margin選項(xiàng)接受標(biāo)記單位值,未標(biāo)記的值被視為像素赊颠。
幾個(gè)例子:
page.pdf({'width': 100}):打印寬度設(shè)置為100像素格二。
page.pdf({'width': '100px'}):打印寬度設(shè)置為100像素劈彪。
page.pdf({'width': '10cm'}):打印寬度設(shè)置為100厘米。
所有可用的單位是:
px:像素
in:英寸
cm:厘米
mm:毫米
格式選項(xiàng)包括:
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標(biāo)記有以下限制:
不在模板內(nèi)的腳本標(biāo)記顶猜。
頁(yè)面樣式在模板中不可見(jiàn)沧奴。
協(xié)程函數(shù) plainText()
[已棄用]以純文本格式獲取頁(yè)面內(nèi)容。
協(xié)程函數(shù)queryObjects(prototypeHandle:pyppeteer.execution_context.JSHandle )
迭代js堆并查找具有句柄的所有對(duì)象长窄。
參數(shù):
prototypeHandle(JSHandle) - 原型對(duì)象的JSHandle滔吠。
協(xié)程函數(shù) reload()
刷新本頁(yè)
協(xié)程函數(shù) screenshot(options: dict = None, **kwargs)
屏幕截屏
可以使用以下選項(xiàng):
path(str):保存圖像的文件路徑。屏幕截圖類型將從文件擴(kuò)展名中推斷出來(lái)抄淑。
type(str):指定屏幕截圖類型屠凶,可以是jpeg或 png。默認(rèn)為png肆资。
quality(int):圖像的質(zhì)量矗愧,在0-100之間。不適用于png圖像郑原。
fullPage(bool):如果為true唉韭,請(qǐng)截取完整的可滾動(dòng)頁(yè)面。默認(rèn)為False犯犁。
clip(字典):指定頁(yè)面剪切區(qū)域的對(duì)象属愤。此選項(xiàng)應(yīng)包含以下字段:
x (int):剪輯區(qū)域左上角的x坐標(biāo)。
y (int):剪輯區(qū)域左上角的y坐標(biāo)酸役。
width (int):剪切區(qū)域的寬度住诸。
height (int):剪切區(qū)域的高度。
omitBackground (bool):隱藏默認(rèn)的白色背景并允許捕獲具有透明度的屏幕截圖涣澡。
encoding(str):圖像的編碼可以是 'base64'或'binary'贱呐。默認(rèn)為'binary'。
協(xié)程函數(shù) select(selector:str入桂,* values )
選擇選項(xiàng)并返回所選值奄薇,如果沒(méi)有元素匹配selector,請(qǐng)加注ElementHandleError抗愁。
協(xié)程函數(shù) setBypassCSP(enabled:bool )
切換繞過(guò)頁(yè)面的Content-Security-Policy馁蒂。
注意
CSP繞過(guò)在CSP初始化而不是評(píng)估時(shí)發(fā)生,通常這意味著page.setBypassCSP 應(yīng)該在導(dǎo)航到域之前調(diào)用它蜘腌。
協(xié)程函數(shù) setCacheEnabled(enabled:bool = True )
為每個(gè)請(qǐng)求啟用/禁用緩存沫屡,默認(rèn)情況下,啟用緩存
協(xié)程函數(shù) setContent(html:str )
將內(nèi)容設(shè)置為此頁(yè)面
參數(shù):
html(str) - 要分配給頁(yè)面的HTML標(biāo)記逢捺。
協(xié)程函數(shù) setCookie(* cookies )
設(shè)置cookie
cookies 應(yīng)該是包含這些字段的字典:
name(str):必填
value(str):必填
url (STR)
domain (STR)
path (STR)
expires (數(shù)字):Unix時(shí)間谁鳍,以秒為單位
httpOnly (布爾)
secure (布爾)
sameSite(str):'Strict'或'Lax'
setDefaultNavigationTimeout(timeout:int )
更改默認(rèn)的最大導(dǎo)航超時(shí),此方法更改以下方法的默認(rèn)超時(shí)30秒:
goto()
goBack()
goForward()
reload()
waitForNavigation()
參數(shù):
timeout(int) - 最大導(dǎo)航時(shí)間(以毫秒為單位)劫瞳,設(shè)置為零0 禁用超時(shí)倘潜。
協(xié)程函數(shù) setExtraHTTPHeaders(title:Dict [str,str] )
設(shè)置額外的HTTP標(biāo)頭,將在頁(yè)面啟動(dòng)的每個(gè)請(qǐng)求中發(fā)送額外的HTTP標(biāo)頭
注意
page.setExtraHTTPHeaders 不保證傳出請(qǐng)求中的標(biāo)頭順序志于。
參數(shù):
headers(Dict) - 包含要與每個(gè)請(qǐng)求一起發(fā)送的其他http標(biāo)頭的字典涮因。所有標(biāo)頭值必須是字符串。
本篇文章整理了三分之二還有三分之一明天繼續(xù)伺绽,來(lái)不及了养泡。
重要:因?yàn)橥焦?hào)的文章格式很難保證,所以后面文章選擇性在其他平臺(tái)同步奈应,歡迎移步公眾號(hào)(Python之戰(zhàn)),每日更新原汁原味澜掩!