PJS001 PhantomJ簡易入門
PhantomJS是什么
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的用處可謂非常廣泛济舆,諸如前端無界面自動化測試(需要結(jié)合Jasmin)、網(wǎng)絡(luò)監(jiān)測莺债、網(wǎng)頁截屏等滋觉。
延伸鏈接
##安裝
打開我的電腦->右鍵屬性->高級系統(tǒng)設(shè)置->高級標(biāo)簽->環(huán)境變量,在系統(tǒng)變量里找到Path,將phantomjs.exe所在目錄路徑添加到環(huán)境變量里齐邦。
第一個小程序HelloWorld
編輯新建hello.js文件椎侠,輸入內(nèi)容如下:
//a phantomjs example
var page = require('webpage').create();
phantom.outputEncoding="gbk";
page.open("http://www.cnblogs.com/front-Thinking",
function(status) {
if ( status === "success" ) {
console.log(page.title);
} else {
console.log("Page failed to load.");
}
phantom.exit(0);
} );
在cmd命令行下運(yùn)行
λ phantomjs.exe D:\Users\Frank\Desktop\PhantomJS\hello.js
front-Thinking - 博客園
代碼注釋:
- //webpage是phantomjs的核心模塊之一,它給用戶提供了訪問侄旬、操作肺蔚、選擇web文檔的接口
- 運(yùn)行page.open函數(shù),其中第一個參數(shù)是你要訪問的url儡羔,第二個參數(shù)是一個回調(diào)函數(shù)。在回調(diào)函數(shù)里我們檢查了下返回的狀態(tài)璧诵,如果是success那么我們就將瀏覽的url制定文檔的title打印出來汰蜘,如你所見,如果不是那么打印文檔加載出錯之宿。最后一行退出phantomjs執(zhí)行環(huán)境族操。
PhantomJS核心API
- 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命令參數(shù)的用法:
PhantomJS的命令格式如下:
phantomjs [switches] [options] [script] [argument [argument [...]]]
其中,各種參數(shù)都是可選的毫深。例如我們第一個程序的執(zhí)行命令如下:
phantomjs hello.js
打開debug模式(該模式用于開發(fā)吩坝,可提供必要提示信息):
phantomjs --debug=yes hello.js
設(shè)置cookie路徑:
phantomjs --cookie-file=cookie.txt hello.js