轉自: http://www.woiweb.net/phantomjs-quick-use-tutorials.htmljavascript
安裝包下載地址:http://phantomjs.org/download.html,包括Windows,Mac OS,Linux版本,自行選擇對應 版本下載解壓便可(爲方便使用,可自已爲phantomjs設置環境變量),其中帶有一個example文件夾,裏面有不少已經寫好的代碼供使用。本文假設phantomjs已經安裝好並已設置了環境變量。html
新建一個包含下面兩行腳本的文本文件:java
console.log('Hello, world!'); phantom.exit();
將文件另存爲hello.js
,而後執行它:jquery
第一行將會在終端打印出字符串,第二行phantom.exit
將退出運行。
在該腳本中調用phantom.exit
是很是重要的,不然 PhantomJS 將根本不會中止。git
Phantomjs如何傳遞參數呢?以下所示 :github
phantomjs examples/arguments.js foo bar baz
其中的foo, bar, baz就是要傳遞的參數,如何獲取呢:web
var system = require('system'); if (system.args.length === 1) { console.log('Try to pass some args when invoking this script!'); } else { system.args.forEach(function (arg, i) { console.log(i + ': ' + arg); }); } phantom.exit();
它將輸出 : 0: foo 1: bar 2: baz
經過建立一個網頁對象,一個網頁能夠被加載,分析和渲染。ajax
下面的腳本將示例頁面對象最簡單的用法,它加載 example.com 而且將它保存爲一張圖片,example.png
swift
因爲它的這個特性,PhantomJS 能夠用來網頁截屏,截取一些內容的快照,好比將網頁、SVG存成圖片,PDF等,這個功能很牛X。windows
接下來的loadspeed.js
腳本加載一個特殊的URL (不要忘了http協議) 而且計量加載該頁面的時間。
var page = require('webpage').create(), system = require('system'), t, address; if (system.args.length === 1) { console.log('Usage: loadspeed.js <some URL>'); phantom.exit(); } t = Date.now(); address = system.args[1]; page.open(address, function (status) { if (status !== 'success') { console.log('FAIL to load the address'); } else { t = Date.now() - t; console.log('<a title="Loading" href="http://www.woiweb.net/tag/loading">Loading</a> time ' + t + ' msec'); } phantom.exit(); });
在命令行運行該腳本:
它輸出像下面的東西:
Loading http://www.google.com Loading time 719 msec
要想在網頁的上下文中對JavaScript 或 CoffeeScript 進行運算,使用evaluate()
方法。代碼是在「沙箱」中運行的,它沒有辦法讀取在其所屬頁面上下文以外的任何JavaScript對象和變量。evaluate()
會返回一個對象,然而它僅限制於簡單的對象而且不能包含方法或閉包。
這有一個示例來顯示網頁標題:
任何來自於網頁而且包括來自evaluate()
內部代碼的控制檯信息,默認不會顯示的。要重寫這個行爲,使用onConsoleMessage
回調函數,前一個示例能夠被改寫成:
因爲腳本好像是一個Web瀏覽器上運行的同樣,標準的DOM腳本和CSS選擇器能夠很好的工做。這使得PhantomJS適合支持各類頁面自動化任務。
下面的 useragent.js
將讀取id 爲myagent的元素的 textContent
屬性:
上面示例一樣提供了一種自定義user agent
的方法。
使用JQuery及其餘類庫:
將一個頁面從一臺遠程服務器請求一個資源的時候,請求和響應都可以經過onResourceRequested
和 onResourceReceived
回調方法追蹤到。示例 netlog.js:
獲取如何把該特性用於HAR 輸出以及基於YSlow的性能分析的更多信息,請參閱網絡監控頁面。
PhantomJs官網:http://phantomjs.org/