URLと保存先のパスを渡すだけでWebサイトのスクリーンショットを保存してくれるnode-webshotがなかなか便利。
オプションも豊富で真っ当で、ちょっと遅ぇけど余計な事考えずに使える。
なんですけど、coに対応してないのでちょっとツラいですね。
複数ページでスクリーンショット取るときとかツラい。いちいちcallback渡して繋いでいくとかやってらんない。
そんなわけでちょっと手を加えます。
co-webshot.js
var webshot = require('webshot'); var co_webshot = function(url, path, options) { return function(cb) { options = options != null ? options : {}; return webshot(url, path, options, cb); }; }; module.exports = co_webshot;
実際に使うときは、
index.js
var co = require('co'); var webshot = require('./co-webshot'); sites = [ {url: 'https://www.google.co.jp/', name: 'google'}, {url: 'http://www.yahoo.co.jp/', name: 'yahoo'}, {url: 'http://www.cnn.co.jp/', name: 'cnn'}, ]; var run = function() { return co(function*() { return (yield sites.map(function(site) { return webshot(site.url, site.name + ".png"); })); }); }; run().then(function(result) { return console.log('done.'); });
こんな感じで。
Generator関数を使うので、Node.js v1.12.xで実行する際は--harmony
オプションを忘れずに。
私からは以上です。