病みつきエンジニアブログ

機械学習、Python、Scala、JavaScript、などなど

PhantomJS のオーバービューーーーーーー

PhantomJS なるものがあるので、使って見ることにします。
PhantomJS が何なのかを説明する前に、インストールから入ります。

インストール

PhantomJS: Download and Installから、最新のものをダウンロードします

brew install phantomjs

Quick start

適当なjavascriptファイルを作成します。ここでは、test.js とします

console.log('Hello, world!');
phantom.exit();

シェル上で

phantomjs test.js

とすると、ターミナルに"Hello, world!"と表示されることでしょう。
これは、ブラウザ上でしか動かないはずのconsole.logの出力結果が、ブラウザなしに確認できることを意味します。
すなわち、ブラウザいらずのJavascript実行環境になっているので、サーバー上でJavascriptを動かしたりできます。
(同じ事はnodeでも可能でしょうが、もちろん使いどころが違います)
また、2行目のphantom.exitによって、phantomJSは実行を中止します。

次に、他の機能を見てみます。

var page = require('webpage').create();
page.viewportSize = { width: 500, height: 800 };
page.open('http://google.com', function(){
  var t = Date.now();
  page.render('google.png');
  t = Date.now() - t;
  console.log('Rendering time ' + t + 'ms');
  phantom.exit();
});

google.pngという描画結果と、レンダリング時間が表示されるのがわかるかと思います。
このコードから

  • requireを使用したライブラリのロードに対応している
  • ウェブページを取得したり、描画する機能も持ってる
  • 描画時間は1秒未満
  • 描画サイズはもちろん変えられる
  • callbackな感じで書くことがある

ということがわかります。

ここらへんまでQuick Start · ariya/phantomjs Wiki · GitHubに応じてみました。

できること

本家からzipファイルを落とすと、中にexamplesが入っているので、参考にすると良いと思います。その中から気になったものをいくつか。

Coffeescriptをそのまま実行
phantomjs netlog.coffee http://yamitzky.com/

で、動きます。コンパイルは不要。

引数も当然使える。
system = require 'system'
console.log system.args

あえてcoffeeで:)
0番目の引数は、ファイル名そのものです。

html5が結構使える
phantomjs feature.js

逆に、それを無効化する方法が一般には用意されてないので、注意が必要です。

テストに向いてる

と、一般には言われているので、Jasmineとかと組み合わせて使うといいんじゃないでしょうか。