PhantomJSを試してみる

スクレイピングとかテストに便利ってことで聞いてたPhantomJSを試してみる。
PhantomJSはヘッドレスのWebKitをJavaScriptAPIで使えるようにしたもの。ライセンスはNewBSD。
PhantomJS | PhantomJS
PhantomJSにはJavaScriptの実行環境が含まれているが、Node.jsではなくWebKitJavaScriptCoreらしい。
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

感想

WebKitで気軽にスクリーンショットをとれるのがとてもいい。PhantomJS単体で使うのもいいが、別のプログラムと連携させて使うのもありかもね。