Webサイトのスクリーンショットを撮ってくれるAPIって便利ですよね。でも一般に公開されているサービスの場合、セキュリティ上Cookieが伴うものは使えなかったり、URLを与えるだけでその後操作した後のスクリーンショットは撮影できません。 そこで使ってみたいのがWebshotです。Rubygemsのライブラリとして提供されるスクリーンショット撮影ライブラリです。

Webshotの使い方

Webshotは

$ gem install webshot

にてインストール可能です。ブラウザはPhantomJSを使っていますので、WebKitベースのレンダリング結果が保存できます。

使い方としては、最もシンプルな方法として

ws = Webshot::Screenshot.instance
ws.capture "http://www.google.com/", "google.png"

にてテンポラリファイルとしてスクリーンショットの画像が保存されます。

こんな感じに保存されます。

さらにオプションが指定できます。

ws.capture "http://www.google.com/", "google.png", width: 100, height: 90, quality: 85

このようにサイズや画像品質の指定ができます。

オプションはブロックでも渡せるようになっています。

ws.capture("http://www.google.com/", "google.png") do |magick|
  magick.combine_options do |c|
    c.thumbnail "100x"
    c.background "white"
    c.extent "100x90"
    c.gravity "north"
    c.quality 85
  end
end

そして面白いのはログイン操作などを行った上でキャプチャできる機能です。

ws.start_session do
  visit 'https://github.com/login'
  fill_in 'Username or Email', :with => 'user@example.com'
  fill_in 'Password', :with => 'password'
  click_button 'Sign in'
end.capture 'https://github.com/username/', 'github.png'

例えばこの例ではGitHubにログインした後、指定したURLに移動してスクリーンショットを保存しています。より複雑な操作を行った上でスクリーンショットの生成が可能です。

テストと組み合わせれば、エラーが起きた箇所が分かりやすくなるかも知れませんね。

WebshotはRuby製のオープンソース・ソフトウェア(MIT License)です。

vitalie/webshot