GUIなしのlinuxでwebページのスクリーンショット作成

linuxでwebページのスクリーンショットを作成する方法メモ。amazon linuxで試した。



依存ライブラリ等のインストール


amazon linuxへfirefoxをインストール

このページに書いてあるコマンドそのままです。他のOSだとyumだけでインストールできるかもです。しょぼいサーバーだとここだけで数時間かかります。


sudo wget -qO- https://gist.github.com/alingogo/5325484/raw | sudo bash

仮想フレームバッファツールをインストール

yumだけでOKです(参考ページ)。後述しますが、日本語フォントがないので日本語が文字化けします。


sudo yum install -y Xvfb xorg-x11-fonts* ImageMagick

追記 日本語フォントをインストールする

amazon linuxならyumだけでipaフォントがインストールできるみたいです。この手順を実行しておくと、日本語のページでも文字化けしなくなります。


sudo yum install -y ipa-gothic-fonts


firefoxを起動しスクリーンショットを作成する


仮想フレームバッファツールを1024x1024で起動し、firefoxをバックグラウンドで起動しておきます。


export DISPLAY=:1.0
Xvfb :1 -screen 0 1024x1024x24 &
firefox &

既にGUI環境を設定しているときは、ディスプレイの番号を変えたりする必要があるかもです。オプションをより詳細に指定する例はこのページにあります。


次に、firefoxの新しいタブでURLを開いて、ImageMagick(importコマンド)でスクリーンショットを作成します。


firefox -remote "openurl(http://www.yahoo.co.jp/)"
import -window root -silent sample.png

日本語フォントをインストールしていないので、上記の日本版ヤフーは文字化けします。http://www.yahoo.com/ のような海外英語サイトなら文字化けしません。


testify
連続実行したのでタブがたくさん開かれています。


まとめ


amazon linuxにおけるwebページのスクリーンショット作成方法を書きました。


まだできていないことメモ。


  1. 日本語フォントのインストール
  2. 最初からURLを開く方法
  3. ウインドウの枠を消す方法
  4. 右側の黒い部分を消す方法


参考リンク


XvfbとFirefoxとImageMagickでWebページのサムネイルを自動生成する方法

Webサイトのスクリーンショットを撮るサービスの作り方

SimpleAPI の仕組みについて考察してみる

Create WebThumb using LAMP

AWSフォーラム。アジアのフォントを入れてくださいみたいな質問。


ウェブページを保存して閲覧できる、魚拓関連ウェブサービス10選

直接の関係はないですが、既に存在するスクリーンショット作成ツールまとめ記事。


Capture a Screenshot of a Full Website With Ruby

一番新しい記事なので本当はこの方法でやりたかったんですが、エラーを解決できませんでした。


次回再チャレンジのとき用メモ。

sudo yum install -y ruby-devel
sudo gem install --no-rdoc --no-ri trollop
sudo gem install --no-rdoc --no-ri json
git clone https://github.com/vapir/vapir.git

# エスケープ文字を2種類修正する、closeメソッドをコメントアウト。
/home/ec2-user/ruby/vapir/vapir-common/lib/vapir-common/waiter.rb:91:in `try_for': Could not connect to the jssh socket on the browser after 30 seconds. Either Firefox did not start or jssh is not installed and listening. (Vapir::Exception::NoBrowserException)

著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール