您好,登錄后才能下訂單哦!
小編給大家分享一下web自動(dòng)化測試工具Pyppeteer有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
01.Pyppeteer簡介
介紹Pyppeteer之前先說一下Puppeteer,Puppeteer是谷歌出品的一款基于Node.js開發(fā)的一款工具,主要是用來操縱Chrome瀏覽器的 API,通過Javascript代碼來操縱Chrome瀏覽器,完成數(shù)據(jù)爬取、Web程序自動(dòng)測試等任務(wù)。
Pyppeteer其實(shí)是Puppeteer的Python版本,下面簡單介紹下Pyppeteer的兩大特點(diǎn),chromium瀏覽器和asyncio框架:
1).chromium
Chromium是一款獨(dú)立的瀏覽器,是Google為發(fā)展自家的瀏覽器Google Chrome而開啟的計(jì)劃,相當(dāng)于Chrome的實(shí)驗(yàn)版,Chromium的穩(wěn)定性不如Chrome但是功能更加豐富,而且更新速度很快,通常每隔數(shù)小時(shí)就有新的開發(fā)版本發(fā)布。
Pyppeteer的web自動(dòng)化是基于chromium來實(shí)現(xiàn)的,由于chromium中某些特性的關(guān)系,Pyppeteer的安裝配置非常簡單,關(guān)于這一點(diǎn)稍后我們會(huì)詳細(xì)介紹。
2).asyncio
asyncio是Python的一個(gè)異步協(xié)程庫,自3.4版本引入的標(biāo)準(zhǔn)庫,直接內(nèi)置了對異步IO的支持,號(hào)稱是Python最有野心的庫,官網(wǎng)上有非常詳細(xì)的介紹:
02.安裝與使用
1).極簡安裝
使用pip install pyppeteer命令就能完成pyppeteer庫的安裝,至于chromium瀏覽器,只需要一條pyppeteer-install命令就會(huì)自動(dòng)下載對應(yīng)的最新版本chromium瀏覽器到pyppeteer的默認(rèn)位置。
如果不運(yùn)行pyppeteer-install命令,在第一次使用pyppeteer的時(shí)候也會(huì)自動(dòng)下載并安裝chromium瀏覽器,效果是一樣的。總的來說,pyppeteer比起selenium省去了driver配置的環(huán)節(jié)。
當(dāng)然,出于某種原因,也可能會(huì)出現(xiàn)chromium自動(dòng)安裝無法順利完成的情況,這時(shí)可以考慮手動(dòng)安裝:首先,從下列網(wǎng)址中找到自己系統(tǒng)的對應(yīng)版本,下載chromium壓縮包;
'linux': 'https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/575458/chrome-linux.zip' 'mac': 'https://storage.googleapis.com/chromium-browser-snapshots/Mac/575458/chrome-mac.zip' 'win32': 'https://storage.googleapis.com/chromium-browser-snapshots/Win/575458/chrome-win32.zip' 'win64': 'https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip'
(左右滑動(dòng)查看)
然后,將壓縮包放到pyppeteer的指定目錄下解壓縮,windows系統(tǒng)的默認(rèn)目錄。其他系統(tǒng)下的默認(rèn)目錄可以參照下面這幅圖:
2).使用
安裝完后就來試試效果。一起來看下面這段代碼,在main函數(shù)中,先是建立一個(gè)瀏覽器對象,然后打開新的標(biāo)簽頁,訪問百度主頁,對當(dāng)前頁面截圖并保存為“example.png”,最后關(guān)閉瀏覽器。前文也提到過,pyppeteer是基于asyncio構(gòu)建的,所以在使用的時(shí)候需要用到async/await結(jié)構(gòu)。
運(yùn)行上面這段代碼會(huì)發(fā)現(xiàn)并沒有瀏覽器彈出運(yùn)行,這是因?yàn)镻yppeteer默認(rèn)使用的是無頭瀏覽器,如果想要瀏覽器顯示,需要在launch函數(shù)中設(shè)置參數(shù)“headless =False”,程序運(yùn)行結(jié)束后在同一目錄下會(huì)出現(xiàn)截取到的網(wǎng)頁圖片:
03.實(shí)戰(zhàn)異步基金爬取
我們前面一直在說Pyppeteer是一款非常高效的web自動(dòng)化測試工具,其本質(zhì)原因是由于Pyppeteer是基于asyncio構(gòu)建的,它的所有屬性和方法幾乎都是coroutine對象,因此在構(gòu)建異步程序的時(shí)候非常方便,天生就支持異步運(yùn)行。
下面就來對比順序執(zhí)行和異步運(yùn)行的效率究竟如何:
1).基金爬取
我們把天天基金網(wǎng)中的開放式基金凈值數(shù)據(jù)爬取作為本次的實(shí)驗(yàn)任務(wù),下面這張圖是一支基金的歷史凈值數(shù)據(jù),這個(gè)頁面是js加載的,沒辦法通過requests直接獲取內(nèi)容信息,因此可以考慮使用模擬瀏覽器操作的方式進(jìn)行數(shù)據(jù)抓取。(事實(shí)上基金凈值數(shù)據(jù)的獲取是有API接口的,本次任務(wù)只是為了演示,不具備實(shí)用價(jià)值)
為了使效果更加明顯,我們此次爬取基金列表頁(下圖)前50支基金的近20個(gè)交易日的凈值數(shù)據(jù)。
2).順序執(zhí)行
程序構(gòu)建的基本思路是新建一個(gè)browser瀏覽器和一個(gè)頁面page,依次訪問每個(gè)基金的凈值數(shù)據(jù)頁面并爬取數(shù)據(jù)。核心代碼如下:
代碼中的get_data()函數(shù)用于凈值數(shù)據(jù)頁面解析和數(shù)據(jù)的轉(zhuǎn)化,get_all_codes()函數(shù)用于獲取全部開放式基金的基金代碼(共6000余個(gè))。雖然程序也使用了async/await的結(jié)構(gòu),但是對多個(gè)基金的凈值數(shù)據(jù)獲取都是在callurl_and_getdata()函數(shù)中順序執(zhí)行的,之所以這樣寫是因?yàn)閜yppeteer中的方法都是coroutine對象,必須以這種形式構(gòu)建程序。
為了排除打開瀏覽器的耗時(shí)干擾,我們僅統(tǒng)計(jì)訪問頁面和數(shù)據(jù)抓取的用時(shí),其結(jié)果為:12.08秒。
3).異步執(zhí)行
下面我們把程序改造一下,功能函數(shù)都不變,主要是把對fundlist的循環(huán)運(yùn)行改裝成async的task對象。核心代碼如下:
耗時(shí)的統(tǒng)計(jì)區(qū)間仍然從瀏覽器打開后開始計(jì)算,其運(yùn)行用時(shí)為:2.18秒,相比順序執(zhí)行要快了6倍??梢韵胂?,如果需要爬取的工作量比較大,順序執(zhí)行需要10個(gè)小時(shí)的話,異步執(zhí)行可能只需要不到2個(gè)小時(shí),優(yōu)化效果可謂非常明顯了。
以上是“web自動(dòng)化測試工具Pyppeteer有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。