スクレイピングとかテストに便利ってことで聞いてたPhantomJSを試してみる。
PhantomJSはヘッドレスのWebKitをJavaScriptAPIで使えるようにしたもの。ライセンスはNewBSD。
PhantomJS | PhantomJS
PhantomJSにはJavaScriptの実行環境が含まれているが、Node.jsではなくWebKitのJavaScriptCoreらしい。
which javascript engine is used by phantomjs? - Google グループ
Node.jsを使っていない理由はPhantomJSのFAQに書いてあった。
FAQ | PhantomJS
PhantomJSをNode.jsから使えるようにラップしたモジュールはサードパーティでいくつかあるらしい。
インストールして動かしてみる
インストールは、Windows, MacOSX, Linux用のバイナリをダウンロードして使うか、ソースコードからビルドする。
試した環境はWindows7 64bit。Program Files(x86)に置いてパスを通した状態。
PhantomJSのバージョンは1.8.2。
C:\Users\tokibito>phantomjs --version 1.8.2
screenshot_google.js
試しにGoogle検索のページをロードして、スクリーンショットを撮ってみる。
var page = require('webpage').create(); var url = 'http://www.google.co.jp/'; page.open(url, function(status) { page.render('google.png'); phantom.exit(); });
webpageモジュールでページをロードしてrenderメソッドで画像に保存できる。簡単。これを実行するとカレントディレクトリにgoogle.pngという名前でスクリーンショットが作成される。
>phantomjs screenshot_google.js
test_jquery.js
ロードしたページに対してjQueryを使うこともできる。
var page = require('webpage').create(); var url = 'http://www.google.co.jp/'; page.open(url, function(status) { page.includeJs('http://code.jquery.com/jquery-1.9.1.min.js', function() { console.log(page.evaluate(function() { return $('title').text(); })); phantom.exit(); }); });
実行すると、Google検索のページをロードしてタイトルをコンソールに表示して終了する。
>phantomjs test_jquery.js Google