phantomjs/casperjsによるキャプチャー自動化

  • 19
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

PhantomJs/CasperJsによるキャプチャー自動化を行います。
スマートフォン端末やタブレット端末など多様化するデバイスに対して、上手くキャプチャーが取れない、大量のページをキャプチャーするのに膨大な労力がかかるといった問題を解決できます。
間違った認識、より効率的な記述等あればご指摘頂ければ幸いです。

環境構築(インストール)

macの場合

1.パッケージ管理ツールhomebrewをインストール。ターミナルで下記のコマンドを叩きます。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2.phantomjs/casperjsをインストールします。
brew install phantomjs
brew install casperjs --devel

※「--devel」がない場合casperバージョンによりphantomjsがサポートされておらず、実行してもエラーになることがあります。

3.正常にインストールされているかバージョンを確認。バージョンが表示されればOK
phantomjs -v
casperjs --version

キャプチャースクリプト作成

今回作成するスクリプトは配列からキャプチャーするURLと保存名を読み込むシンプルな構成で作成します。
ファイル名は「listcap.js」として下記のjsファイルを作成しました。

// ----- URLと保存名を指定 ----- 
var links = [
    ["http://sample.com","sample.jpg"],
    ["http://sample.com/hoge/","sample_hoge.jpg"],
    ["http://sample.com/hoge/fuga/","sample_hoge_fuga.jpg"],
    ["http://sample.com/hoge/fuga/foo.html","sample_hoge_fuga_foo.jpg"]
];

// ----- キャプチャー遅延 ----- 
var waitTime = 2000;

// ----- ベーシック認証 ----- 
var basicId = "";
var basicPass = "";


// ----- デバイスの切り替え(コメントアウトで切り替え) ----- 
// ----- iPhone -----
// var width = 320;
// var height = 568;
// var ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A405 Safari/600.1.4";

// ----- iPad -----
//var width = 768;
//var height = 1024;
//var ua = "Mozilla/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A405 Safari/600.1.4";

// ----- safari,crhome -----
 var width = 1280;
 var height = 900;
 var ua = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36";



// ----- スクレイピング実行 ----- 
var casper = require('casper').create();
casper.start();
casper.userAgent(ua);
casper.viewport(width, height);
casper.setHttpAuth(basicId, basicPass);

casper.each(
    links,
    function(self,link){
        var url =link[0];
        var file =link[1];
        self.thenOpen(url, function () {
            this.echo("captur page title:"+this.getTitle());
        });

        self.wait(waitTime,function(){
            self.capture(file);
        });
    });

casper.run();

ファイルの実行

ターミナル(コマンドプロント)で作成したlistcap.jsのディレクトに移動し下記コマンドを実行。
casperjs listcap.js
キャプチャーされた画像が同ディレクトリに生成されます。

注意点

phantomjsではキャプチャーされる際、透過で生成するようになっているため、bodyにbackground-colorが指定されていないサイトは背景が黒くなってキャプチャーされてしまいます。
修正するにはphantomjs側での追記page.evaluate(function() {document.body.bgColor = 'white';});が必要なためcasper側での調整は難しそうです。
参照:公式サイト

上記の背景が黒でキャプチャーされる事象につきまして【続】phantomjs/casperjsによるキャプチャー自動化でjqueryを使用し修正する方法を掲載いたしました。
よければこちらもご覧ください。