pyppeteer最爲核心類Page的接口方法(下)

重要:因爲同步公號的文章格式很難保證,所以後面文章選擇性在其他平臺同步,歡迎移步公衆號(Python之戰),每日更新原汁原味!

在上一篇《pyppeteer最爲核心類Page的接口方法》講了大部分pyppeteer的Page類的接口,與selenium相比增強了與頁面js的交互功能,同時增加了設備的僞裝和模擬能力,一方是因爲pyppeteer庫是源於puppeteer,而puppeteer是Google提供了一個js庫,本身和js的交互性強,所以在頁面交互上更深入。

也正是因爲更深的js交互,所以可以任意修改任何網站在源碼中的爬蟲檢測方式,並且毫不費勁,關於淘寶登陸有一種實現方式是使用中間代理修改檢測的js文件,使用pyppeteer之後就不用這麼麻煩,可以直接將js代碼寫入網站加載的js文件中。

繼續Page類的剩下一下方法:

協程方法 setJavaScriptEnabled(enabled:bool )**

設置JavaScript啓用/禁用。

協程方法 setOfflineMode(enabled:bool )**

設置離線模式啓用/禁用。

協程方法 setRequestInterception(value:bool )

啓用/禁用請求攔截,激活請求攔截允許 Request類的 abort(), continue_()和 response()方法,這提供了修改頁面發出的網絡請求的功能。

協程方法 setUserAgent(userAgent:str )

設置要在此頁面中使用的用戶代理。

參數:

userAgent(str) - 要在此頁面中使用的特定用戶代理

協程方法 setViewport(viewport:dict )

設置視圖,可用選項包括:

width (int):以像素爲單位的頁面寬度。

height (int):以像素爲單位的頁面高度。

deviceScaleFactor (float):默認爲1.0。

isMobile(bool):默認爲False。

hasTouch(bool):默認爲False。

isLandscape(bool):默認爲False。

協程方法 tap(select:str )

點擊與之匹配的元素,類似手機上的觸摸功能

參數:

selector(str) - 搜索要觸摸的元素的選擇器。

target

返回此頁面創建的目標。

協程方法 title()

獲取頁面標題

touchscreen

獲取Touchscreen對象

tracing

獲取跟蹤對象

協程方法 type(selector:str,text:str,options:dict = None, kwargs )**

在selector選擇器處輸入text,類似selenium的keys,如果沒有元素匹配selector,報錯PageError

url

獲取此頁面的URL

viewport

返回視圖字典,返回與setViewport()相同的字典字段

waitFor(selectorOrFunctionOrTimeout:Union[str,int,float],options:dict = None, args,* kwargs )**

等待頁面上匹配元素出現,注意第一個位置參數:

如果selectorOrFunctionOrTimeout是number(int或float),則將其視爲超時(以毫秒爲單位),這將返回將在超時後執行的future。

如果selectorOrFunctionOrTimeout是一個JavaScript函數字符串,則此方法是一個快捷方式waitForFunction()。

如果selectorOrFunctionOrTimeout是選擇器字符串或xpath字符串,則此方法是waitForSelector()或 的快捷方式waitForXPath()。如果字符串以字符串開頭//,則將字符串視爲xpath。

Pyppeteer嘗試自動檢測功能或選擇器,但有時會錯過檢測。如果不按預期工作,請使用waitForFunction()或waitForSelector()直接使用 。

參數:

selectorOrFunctionOrTimeout:xpath或函數字符串或timeout(毫秒)

args(Any) - 傳遞函數的參數。

可用選項:請參閱waitForFunction()或 waitForSelector()

返回:

返回等待的對象,該對象解析爲成功值的JSHandle。

waitForFunction(pageFunction:str, options:dict = None, * args, ** kwargs )

等到函數執行完成並返回一個truthy值。

參數:

args(Any) - 傳遞給的參數pageFunction。

返回:

返回等待pageFunction返回真值時解析的等待對象 。它解決了一個 JSHandle真正的價值。

此方法接受以下選項:

polling(str | number):pageFunction 執行的間隔,默認爲raf。如果polling是數字,則將其視爲執行函數的間隔(以毫秒爲單位)。如果polling是字符串,則它可以是以下值之一:

raf:不斷執行pageFunction的 requestAnimationFrame回調。這是最緊密的輪詢模式,適合觀察樣式變化。

mutation:執行pageFunction每個DOM突變。

timeout(int | float):等待的最長時間(以毫秒爲單位)。默認爲30000(30秒),通過0禁用超時。

協程方法 waitForNavigation(options:dict =None,** kwargs )**

等待導航,可用選項與goto()方法相同,這將返回Response當頁面導航到一個新的URL或重載。當您運行將間接導致頁面導航的代碼時,它非常有用。如果由於使用History API而導航到其他錨點或導航 ,則導航將返回None。

navigationPromise = async.ensure_future(page.waitForNavigation())
await page.click('a.my-link')  # indirectly cause a navigation
await navigationPromise  # wait until navigation finishes
或者
await asyncio.wait([
    page.click('a.my-link'),
    page.waitForNavigation(),
])

注意:使用History API更改URL被視爲導航。

協程方法 waitForRequest(urlOrPredicate:Union [str,Callable [[pyppeteer.network_manager.Request],bool]],options:Dict [KT,VT] = None,kwargs)**

等待請求

參數:urlOrPredicate - 要等待的URL或函數。

此方法接受以下選項:timeout(int | float):最長等待時間(以毫秒爲單位),默認爲30秒,傳遞0以禁用超時。

firstRequest = await page.waitForRequest('http://example.com/resource')
finalRequest = await page.waitForRequest(lambda req: req.url == 'http://example.com' and req.method == 'GET')
return firstRequest.url

協程方法 waitForResponse(urlOrPredicate:Union [str,Callable [[pyppeteer.network_manager.Response],bool]],options:Dict [KT,VT] = None, kwargs)**

等待響應

參數:urlOrPredicate - 要等待的URL或函數。

此方法接受以下選項:timeout(int | float):最長等待時間(以毫秒爲單位),默認爲30秒,傳遞0以禁用超時。

firstResponse = await page.waitForResponse('http://example.com/resource')
finalResponse = await page.waitForResponse(lambda res: res.url == 'http://example.com' and res.status == 200)
return finalResponse.ok

waitForSelector(selector:str, options:dict = None, ** kwargs )

等待頁面上出現匹配的元素,如果在調用方法selector已經存在,該方法將立即返回。如果在timeout等待的毫秒之後沒有出現,則該函數將引發錯誤。

參數:selector(str) - 要等待的元素的選擇器。

返回:返回等待的對象,該對象在將選擇器字符串指定的元素添加到DOM時解析。

選項:

visible(bool):等待元素存在於DOM中並且可見; 即沒有或 CSS屬性。默認爲。display: nonevisibility: hiddenFalse

hidden(bool):等待在DOM中找不到元素或隱藏元素,即具有或CSS屬性。默認爲。display: nonevisibility: hiddenFalse

timeout(int | float):等待的最長時間(以毫秒爲單位)。默認爲30000(30秒),爲0禁用超時。

waitForXPath(xpath:str,options:dict = None, kwargs )**

等到xpath頁面上出現匹配的元素,如果調用方法的時刻xpath已經存在,則該方法將立即返回;如果在timeout等待毫秒後沒有出現xpath ,則該函數將引發異常。

參數:xpath(str) - 要等待的元素的[xpath]。

返回:返回等待由xpath字符串指定的元素添加到DOM時解析的等待對象。

選項:

visible(布爾):等待元素存在於DOM並是可見的,即,沒有或 CSS屬性。默認爲。display: nonevisibility: hiddenFalse

hidden(bool):等待在DOM中找不到元素或隱藏元素,即具有或CSS屬性。默認爲。display: nonevisibility: hiddenFalse

timeout(int | float):等待的最長時間(以毫秒爲單位)。默認爲30000(30秒),爲0禁用超時。

workers

獲取此頁面的所有執行線程,web workers概念是解決客戶端JavaScript無法多線程的問題,其定義的worker是指代碼的並行線程,不過web worker處於一個自包含的環境中,無法訪問主線程的window對象和document對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章