Web開発を仕事にしていると
「マニュアルやプレゼンに使うのでWebアプリのスクリーンショットをくれ」
と依頼されることがよくある。
ChromeのFireshotのようなブラウザの拡張機能を使ったりすれば
1画面ずつ撮っていけるのだけど、
たくさんのページのスクリーンショットを、
変更がある度に撮り直すのは面倒なのでなんとか自動化したい。
「node-webshot」モジュールを使う
探してみると、
Node.jsの「node-webshot」パッケージを使えば
手軽にスクリーンショット撮影スクリプトが作れそうだ。
Node.jsでWebKitブラウザの機能を利用可能にするPhantomJSの
スクリーンキャプチャ機能をラップしたものらしい。
PhantomJSはブラウザで行っている処理を
色々自動化するのに使えそうなので、また調査してみよう。
「node-webshot」パッケージは
下記のnpmコマンドでアプリにインストールできる。
npm install webshot --save-dev
URLのリストを作って、連続でスクリーンショットを撮るスクリプトを作成する
早速このwebshotパッケージを使って
スクリーンショット自動撮影スクリプトを作ってみる。
URLのリストを読み込んで
各URLのスクリーンショットを保存するようなものを作っておけば
画面に変更があってもコマンド1つで再作成できるので良さそうだ。
下記のようなスクリプトを作成してみた。
capture_screen.js
var webshot = require('webshot'); var fs = require('fs'); // 保存ファイル名とURLのリストを作成する var baseUrl = 'http://test-domain.com'; var links = { '01_login': baseUrl + '/login.html', '02_top': baseUrl + '/top.html', '03_shohin_list': baseUrl + '/shohin_list.html', '04_shohin_edit': baseUrl + '/shohin_edit.html' }; // 各URLのスクリーンショットを指定したファイル名で「shots」フォルダに保存する Object.keys(links).forEach(function (key) { var href = links[key]; webshot(href, 'shots/' + key + '.png', {}, function () {}); });
URLリストの部分は撮影したいWebサイトのアドレスに合わせて変更する。
今回はデフォルトの設定で撮影を行っているが、
生成される画像のサイズ等はwebshot関数のオプションで指定できる。
サーバサイドJavaScript Node.js入門 (アスキー書籍)
- 作者: 清水俊博,大津繁樹,小林秀和,佐々木庸平,篠崎祐輔,高木敦也,西山雄也,Jxck
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/02/27
- メディア: Kindle版
- この商品を含むブログを見る