最近話題になったので今更間がありつつもまとめておきます.
これを使えば,わざわざブラウザを開いてキャプチャツールを起動してという手間がなくなって便利!?
“Xvfb Firefox”ググれば出ますが,念のため...
ちなみに検証環境はUbuntu14.04です.

下準備

必要なツールは
- Xvfb
- firefox
- ImageMagick
- pngcrush

です.Xvfbは,仮想的なフレームバッファを実現するソフトウェアです.
今回はこれを使って仮想的なディスプレイを作り,firefoxでWebブラウザを立ち上げ,ページのスクリーンショットを撮ります.

まずはインストールします.

$ sudo apt-get install xvfb ImageMagick pngcrush

ImageMagickはキャプチャ,サムネイル作成用,pngcrushは画像軽量化用です.
インストールしたXvfbをデーモン起動します.この際ディスプレい番号を指定してください.下記の例では1番の番号を付けて仮想ディスプレイを起動しています.

$  Xvfb :1 &

フォント回りでエラーが出ますが無視して問題ありません.

ブラウザの起動

続いてfirefoxを起動しています.firefoxをインストールしていない場合は,apt-get installしてください.

1番の仮想ディスプレイにfirefoxを起動します.サイズを指定したい場合は,firefox の後に-width 1280 -height 1280のように記述することで指定できます.-remoteのあとに記載したurlにアクセスします.

$ DISPLAY=:1 firefox -remote "openurl(http://yahoo.co.jp)"

キャプチャとfirefox設定

$ import -display :1 -window root -silent test.png
$ killall Xvfb firefox gconfd-2

でtest.pngにスクリーンショットが保存されます.
最後に全ての処理を終了させてください.

ただ.firefoxが未設定だとツールバーが表示されていたり,killallしたあとに起動させると復元させるかどうか等をいちいち聞いてくるので厄介です.そこで,/.mozilla/firefox/profile/user.jsを以下のように書き換えます.

// 復元の確認をoff
user_pref("browser.sessionstore.enabled", false);
user_pref("browser.sessionstore.resume_from_crash", false);
 
// プラグインのポップアップを制限
user_pref("plugin.default_plugin_disabled", false);
user_pref("privacy.popups.disable_from_plugins", 3);
 
user_pref("browser.startup.page", 0);
user_pref("image.animation_mode", "none");
user_pref("browser.blink_allowed", false);
user_pref("browser.display.enable_marquee", false);
user_pref("browser.enable_automatic_image_resizing", false);
user_pref("alerts.totalOpenTime", 1);
user_pref("privacy.popups.showBrowserMessage", false);

さらにその下のchrome/userChrome.cssに以下の記述をします.

scrollbar {
display:none !important;
}
 
.tabbrowser-strip {
display:none !important;
}
 
#toolbar-menubar,
#nav-bar,
#PersonalToolbar {
display:none !important;
}
 
#status-bar {
display:none !important;
}

またuserContent.css

scrollbar[orient="horizontal"] {
display: none !important;
}
 
html {
overflow-y:hidden !important;
overflow-x:hidden !important;
}

を記載します.

TODO: 自動化

毎回書くのは面倒なので,pythonで一連の処理を書いています. 
書き次第更新します.

Share Button

サーバで仮想ディスプレイのWeb画面スクショを取る

<2015/06/18>