Edited at

Dockerを使って日本語対応のcasperjsを手軽に利用する

More than 1 year has passed since last update.


概要

Dockerを使ってcasperJsを使えるようにする。同様のDocker Imageはdocker+casperJsの検索で見つかりますが、バージョンが古かったり日本語対応してなかったりしたのでそれに対応したものを作りました。


すぐ使いたい場合

作成済みのイメージをDocker Hubに登録済みなので、途中経過抜きですぐ使いたいのであれば以下ですぐ使えるようにセットアップできます。


  • 導入+バージョン確認

docker run -d --name mycasperjs-daemon -v `pwd`:/home/casperjs  --restart always gsagawa/casperjs

docker exec mycasperjs-daemon casperjs --version


ビルドして実行する場合

出来上がる内容は上記と同じですが、中身を確認したかったりカスタマイズしたい場合はこちらでやってください。


  • Dockerfileを作成する


FROM debian:jessie

ENV PHANTOMJS_VERSION=phantomjs-2.1.1-linux-x86_64

RUN apt-get update -y
RUN apt-get install -y libfreetype6-dev libfontconfig1-dev wget bzip2 unzip fontconfig git python

#phantomjsのインストール
RUN wget --no-check-certificate https://bitbucket.org/ariya/phantomjs/downloads/$PHANTOMJS_VERSION.tar.bz2
RUN tar xvf ${PHANTOMJS_VERSION}.tar.bz2
RUN mv $PHANTOMJS_VERSION/bin/phantomjs /usr/local/bin/
RUN rm -rf phantom*

#フォントのインストール
RUN wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00301.zip
RUN unzip IPAexfont00301.zip
RUN mkdir -p /usr/share/fonts/ipa
RUN cp IPAexfont00301/*.ttf /usr/share/fonts/ipa
RUN fc-cache -fv

#casperjsのインストール
WORKDIR /root
RUN git clone https://github.com/n1k0/casperjs.git
RUN mv casperjs /opt/
RUN ln -sf /opt/casperjs/bin/casperjs /usr/local/bin/casperjs
RUN mkdir /home/casperjs

WORKDIR /home/casperjs

#casperjsをデーモンとして起動させるための処理
CMD tail -f /dev/null


  • コマンドラインからビルド、コンテナ化

docker build -t mycasperjs .

docker run -d --name mycasperjs-daemon -v `pwd`:/home/casperjs --restart always mycasperjs
docker exec mycasperjs-daemon casperjs --version


動作確認

以下のように実行させて、キャプチャーが取れればOK

docker exec mycasperjs-daemon casperjs test.js 


test.js

var casper = require('casper').create();

casper.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0");

casper.start("http://<<キャプチャーしたいサイト>>/", function(response) {
});
casper.viewport(1410, 690).then(function(){
this.capture('capture.png');
});
casper.run();