PhantomJS是一款基于webkit瀏覽器引擎的JavaScript API軟件,這款軟件不僅可以支持各種Web標(biāo)準(zhǔn),同時我們還可以通過PhantomJS中文版來編譯解釋執(zhí)行JavaScript代碼,從而幫助用戶進行模擬登錄等操作,以便爬取需要登錄的網(wǎng)站。
PhantomJS是一個基于webkit的JavaScript API。它使用QtWebKit作為它核心瀏覽器的功能,使用webkit來編譯解釋執(zhí)行JavaScript代碼。任何你可以在基于webkit瀏覽器做的事情,它都能做到。它不僅是個隱形的瀏覽器,提供了諸如CSS選擇器、支持Web標(biāo)準(zhǔn)、DOM操作、JSON、HTML5、Canvas、SVG等,同時也提供了處理文件I/O的操作,從而使你可以向操作系統(tǒng)讀寫文件等。PhantomJS的用處可謂非常廣泛,諸如網(wǎng)絡(luò)監(jiān)測、網(wǎng)頁截屏、無需瀏覽器的 Web 測試、頁面訪問自動化等。
webpage:它的作用主要是提供了一套可以訪問和操作web文檔的核心方法,包括操作DOM、事件捕獲、用戶事件模擬等等。
system:該模塊提供了一些與操作系統(tǒng)相關(guān)的接口,例如訪問操作系統(tǒng)信息、訪問系統(tǒng)環(huán)境變量、接受命令行參數(shù)等等與程序執(zhí)行相關(guān)的系統(tǒng)信息。
fs:即FileSystem。熟悉NodeJS的朋友都知道,NodeJS也內(nèi)建了相關(guān)的核心模塊。fs提供了執(zhí)行文件I/O操作的標(biāo)準(zhǔn)接口,如讀寫文件、刪除文件等。它使得你持久化一些文件(如logfile等)變得非常容易。
webserver:如其名字一樣,你可以基于它來實現(xiàn)自己的webserver,用來處理請求并且執(zhí)行PhantomJS代碼等。
為方便使用,建議將PhantomJS單獨放在一個文件夾里,比如放在D:\workspace\phantomjs里。
打開D:\workspace\phantomjs\bin文件夾,雙擊運行phantomjs.exe,出現(xiàn)如下界面,那么你就可以運行JS代碼了。
如果不喜歡為了運行一個程序總是跑到D:\workspace\phantomjs\bin文件夾打開phantomjs.exe,那么,你可以將phantomjs.exe添加到環(huán)境變量里。具體如下:打開我的電腦->右鍵屬性->高級系統(tǒng)設(shè)置->高級標(biāo)簽->環(huán)境變量,在系統(tǒng)變量里找到Path,將你的phantomjs添加到環(huán)境變量里。比方說我的路徑添加的為“;D:\workspace\phantomjs\bin”,切記不要少了前面那個分號。
之前的例子中我們已經(jīng)初步認(rèn)識了phantom對象。它的功能是定義和控制phantom運行環(huán)境的參數(shù)和流程。關(guān)鍵的API有:
phantom.argsString[]
獲取傳給本JS程序的參數(shù),需要與system.args進行區(qū)分(system模塊詳見下文),后者表示傳給phantomjs引擎的參數(shù)。例如phantomjs ./test.js //baidu.com這句語句,通過phantom.args,我們能得到的參數(shù)列表為["//baidu.com"],而通過system.args則得到["./test.js", "//baidu.com"]這樣的參數(shù)列表。差異就在于是否包含當(dāng)前腳本名稱。不過phantom.scriptName這個API提供了獲取腳本名稱的功能。
phantom.cookiesObject[]
獲取或設(shè)置cookies,不過對于設(shè)置建議使用其他的API完成。同時相關(guān)的API還有:
phantom.addCookie(Object)Boolean:添加cookie值
phantom.deleteCookie(cookieName)Boolean:刪除指定Cookie值
phantom.clearCookies():清空所有的cookie
phantom.cookiesEnabledBoolean:獲取或設(shè)置是否支持cookie
phantom.injectJs(fileName)Boolean:
把指定的外部JS文件注入到當(dāng)前環(huán)境。執(zhí)行這個方法時,phantomjs首先會從當(dāng)前目錄檢索此文件,如果找不到,則再到phantom.libraryPath指定的路徑尋找。phantom.libraryPath這個API基本上就是為phantom.injectJs()服務(wù)的。
phantom.onError
當(dāng)頁面存在js錯誤,且沒有被page.onError處理,則會被此handler捕獲。下面是使用此API的一個例子。由于phantom環(huán)境下代碼調(diào)試很困難,了解這些錯誤捕獲的API也許會對我們的實際使用有所幫助。
phantom.onError=function(msg,trace){varmsgStack=[
1、為什么建造PhantomJS需要很長時間?
由于PhantomJS構(gòu)建工作流捆綁了WebKit模塊,因此需要編譯數(shù)千個源文件。強烈建議使用二進制包,它下載速度快,易于安裝。
2、能否估計X功能的可用性?
由于沒有人全職工作PhantomJS,因此無法預(yù)測完成特定功能的確切時間。由于PhantomJS的每個貢獻者都按自己的步調(diào)工作,有時可能需要幾個發(fā)布周期,直到某個功能發(fā)貨。
3、為什么會收到錯誤消息phantomjs:無法連接到X服務(wù)器?
在PhantomJS 1.4或更早版本中,仍然需要X服務(wù)器。解決方法是使用Xvfb。從PhantomJS 1.5開始,它是純粹的無頭,無需再運行X11 / Xvfb。
1贛教云教學(xué)通2.0-贛教云教學(xué)通2.0下載 v5......
2step7 microwin-西門子PLC S7......
3百度網(wǎng)盤清爽精簡純凈版-網(wǎng)盤工具-百度網(wǎng)盤清爽精......
4360安全瀏覽器-瀏覽器-360安全瀏覽器下載 ......
5谷歌瀏覽器 XP版-谷歌瀏覽器 XP版-谷歌瀏覽......
6Kittenblock重慶教育專用版-機器人編程......
7seo外鏈助手(超級外鏈) -SEO外鏈優(yōu)化工具......
8Notepad3-記事本軟件-Notepad3下......