縦長のwebページを画像として保存したかったので久しぶりにcapybara-webkitを使った。


インストール

Macで使うにはqtが必要
% brew install qt
% gem install capybara-webkit

% gem list | grep capybara
capybara (2.4.4)
capybara-webkit (1.5.2)


キャプチャ

久しぶりに使ったらインタフェースが変わってたけど、ドキュメントが無いみたいなのでlib/capybara/webkit/driver.rbを読んで適当にやったらキャプチャできた。

capybara-capture.rb
require 'capybara-webkit'
require 'uri'

exit 1 if ARGV.empty?
url = ARGV.shift

driver = Capybara::Webkit::Driver.new 'capture'
driver.visit url
driver.save_screenshot "#{Time.now.to_i}_#{URI.parse(url).host}.png", :width => 1024, :height => 768
高さ指定しても縦長でキャプチャできる。

なおググるとせっかくDriverがbrowserをラップしているのになぜか直接driver.browserをいじっているコードがたくさん出てくる。



マウスを消したい

画面左上にマウスカーソルが出るのが気になる。消すAPIは用意されてない。
driver.execute_scriptでjavascriptが実行できるので、cssも書き換えられる。でもdocument.body.style.cursorや、driver.find(xpath)[0].hoverとか、画面外にdocument.createElementしてそこをhoverさせるとか色々やってみたけど無理だった。

今回はページ内の一部分が欲しかっただけなので、別にいいんだけど

他の手段

PhantomJSだとbody背景が透明になってしまうのでだめ。
Chrome拡張のFull Page Screen Captureだとページが長すぎるのか保存できなかった。