Phantom JS是一個服務器端的 JavaScript API 的 WebKit。其支持各種Web標準: DOM 處理, CSS 選擇器, JSON, Canvas, 和 SVG,解壓到任意目錄,并將包含phantomjs.exe的目錄添加到系統路徑。
PhantomJS 是一個基于 WebKit 的服務器端 JavaScript API。它全面支持web而不需瀏覽器支持,其快速,原生支持各種Web標準: DOM 處理, CSS 選擇器, JSON, Canvas, 和 SVG。 PhantomJS 可以用于 頁面自動化 , 網絡監測 , 網頁截屏 ,以及 無界面測試 等。
安裝
自行選擇對應 版本下載解壓即可( 為方便使用,可自已為phantomjs設置環境變量 ),其中帶有一個example文件夾,里面有很多已經寫好的代碼供使用。本文假設phantomjs已經安裝好并已設置了環境變量。
使用場景:
無需瀏覽器的 Web 測試
頁面訪問自動化
屏幕捕獲
網絡監控.
phantom對象
之前的例子中我們已經初步認識了phantom對象。它的功能是定義和控制phantom運行環境的參數和流程。關鍵的API有:
phantom.args String[]
獲取傳給本JS程序的參數,需要與 system.args 進行區分(system模塊詳見下文),后者表示傳給phantomjs引擎的參數。例如 phantomjs ./test.js http://baidu.com 這句語句,通過 phantom.args ,我們能得到的參數列表為["http://baidu.com"] ,而通過 system.args 則得到 ["./test.js", "http://baidu.com"] 這樣的參數列表。差異就在于是否包含當前腳本名稱。不過 phantom.scriptName 這個API提供了獲取腳本名稱的功能。
phantom.cookies Object[]
獲取或設置cookies,不過對于設置建議使用其他的API完成。同時相關的API還有:
phantom.addCookie(Object) Boolean:添加cookie值
phantom.deleteCookie(cookieName) Boolean:刪除指定Cookie值
phantom.clearCookies() :清空所有的cookie
phantom.cookiesEnabled Boolean:獲取或設置是否支持cookie
phantom.injectJs(fileName) Boolean:
把指定的外部JS文件注入到當前環境。執行這個方法時,phantomjs首先會從當前目錄檢索此文件,如果找不到,則再到 phantom.libraryPath 指定的路徑尋找。 phantom.libraryPath 這個API基本上就是為 phantom.injectJs() 服務的。
phantom.onError
當頁面存在js錯誤,且沒有被 page.onError 處理,則會被此handler捕獲。下面是使用此API的一個例子。由于phantom環境下代碼調試很困難,了解這些錯誤捕獲的API也許會對我們的實際使用有所幫助。
phantom.onError = function(msg, trace) { var msgStack = ['PHANTOM ERROR: ' + msg]; if (trace && trace.length) { msgStack.push('TRACE:'); trace.forEach(function(t) { msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : '')); }); } console.error(msgStack.join('\n')); phantom.exit(1); };
phantom.exit(returnValue)
這個API已經見過多次了,它的作用是退出程序,可以設置一個退出代碼,默認是0。