Linux

web画面キャプチャー wkhtmltopdf(wkhtmltoimage) – Linux

webサイトのキャプチャーを撮るwebサービスは沢山あります。

一回、二回などの低頻度で使うならwebサービスを使えばいいのですが、高頻度でプログラムからアクセスするとなると難しいです。

そこで、サーバーにインストールして使えるのは無いかと探し、見つけたのが「wkhtmltopdf(wkhtmltoimage)」になります。

参考サイト

wkhtmltopdf(wkhtmltoimage)でwebの画面をキャプチャする – ちらうら

wkhtmltopdfのインストール

ダウンロード

wkhtmltopdfを下記サイトよりダウンロードしてインストールします。
DLsite:wkhtmltopdf.org/downloads.html

インストールするOSに合ったものをダウンロードしてください。
僕の環境は「CentOS6 64-bit」です。

wget https://bitbucket.org/wkhtmltopdf/wkhtmltopdf/downloads/wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64.rpm

インストール

rpm -ivh wkhtmltox-0.13.0-alpha-7b36694_linux-centos6-amd64.rpm

インストール時にエラーが出たら

        error: Failed dependencies:
        libpng is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
        libjpeg is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
        freetype is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
        icu is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
        fontconfig is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
        libX11 is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
        libXext is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
        libXrender is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
        xorg-x11-fonts-Type1 is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64
        xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.13.0_alpha_7b36694-1.x86_64

yumでインストール。

yum -y install libpng libjpeg freetype icu fontconfig libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi

そして再度インストールコマンドを叩きます。

IPAフォントインストール

wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00301.zip
unzip IPAexfont00301.zip
mv IPAexfont00201 /usr/share/fonts
fc-cache -fv

フォントをインストールしていないとPDFで作成した時に文字化けが起こります。

コマンド叩いた時にエラーが出たら

コマンド例:wkhtmltopdf http://google.co.jp google.pdf

QXcbConnection: Could not connect to display 
aborted

エラー表示

yum install xorg-x11-server-Xvfb

Xvfb (仮想ディスプレイバッファ)を入れる

コマンド例:xvfb-run wkhtmltopdf http://google.co.jp google.pdf

古いバージョンだとこのエラーは出ないです。(0.12.2.1では出ませんでした。)

WebページをPDFに変換

コマンド:xvfb-run wkhtmltopdf [変換するURL] [ファイルパスとファイル名]

Webページを画像に変換(キャプシャー画像作成)

コマンド:xvfb-run wkhtmltoimage [オプション] [変換するURL] [ファイルパスとファイル名]

コマンド例:xvfb-run wkhtmltoimage –quality 100 http://google.co.jp google.jpg

オプションは「wkhtmltoimage -H」で確認できます。

General Options:
      --allow <path>                  Allow the file or files from the specified
                                      folder to be loaded (repeatable)
      --cache-dir <path>              Web cache directory
      --checkbox-checked-svg <path>   Use this SVG file when rendering checked
                                      checkboxes
      --checkbox-svg <path>           Use this SVG file when rendering unchecked
                                      checkboxes
      --cookie <name> <value>         Set an additional cookie (repeatable),
                                      value should be url encoded.
      --cookie-jar <path>             Read and write cookies from and to the
                                      supplied cookie jar file
      --crop-h <int>                  Set height for cropping
      --crop-w <int>                  Set width for cropping
      --crop-x <int>                  Set x coordinate for cropping
      --crop-y <int>                  Set y coordinate for cropping
      --custom-header <name> <value>  Set an additional HTTP header (repeatable)
      --custom-header-propagation     Add HTTP headers specified by
                                      --custom-header for each resource request.
      --no-custom-header-propagation  Do not add HTTP headers specified by
                                      --custom-header for each resource request.
      --debug-javascript              Show javascript debugging output
      --no-debug-javascript           Do not show javascript debugging output
                                      (default)
      --encoding <encoding>           Set the default text encoding, for input
  -H, --extended-help                 Display more extensive help, detailing
                                      less common command switches
  -f, --format <format>               Output file format
      --height <int>                  Set screen height (default is calculated
                                      from page content) (default 0)
  -h, --help                          Display help
      --htmldoc                       Output program html help
      --images                        Do load or print images (default)
      --no-images                     Do not load or print images
  -n, --disable-javascript            Do not allow web pages to run javascript
      --enable-javascript             Do allow web pages to run javascript
                                      (default)
      --javascript-delay <msec>       Wait some milliseconds for javascript
                                      finish (default 200)
      --license                       Output license information and exit
      --load-error-handling <handler> Specify how to handle pages that fail to
                                      load: abort, ignore or skip (default
                                      abort)
      --load-media-error-handling <handler> Specify how to handle media files
                                      that fail to load: abort, ignore or skip
                                      (default ignore)
      --disable-local-file-access     Do not allowed conversion of a local file
                                      to read in other local files, unless
                                      explicitly allowed with --allow
      --enable-local-file-access      Allowed conversion of a local file to read
                                      in other local files. (default)
      --manpage                       Output program man page
      --minimum-font-size <int>       Minimum font size
      --password <password>           HTTP Authentication password
      --disable-plugins               Disable installed plugins (default)
      --enable-plugins                Enable installed plugins (plugins will
                                      likely not work)
      --post <name> <value>           Add an additional post field (repeatable)
      --post-file <name> <path>       Post an additional file (repeatable)
  -p, --proxy <proxy>                 Use a proxy
      --quality <int>                 Output image quality (between 0 and 100)
                                      (default 94)
  -q, --quiet                         Be less verbose
      --radiobutton-checked-svg <path> Use this SVG file when rendering checked
                                      radiobuttons
      --radiobutton-svg <path>        Use this SVG file when rendering unchecked
                                      radiobuttons
      --readme                        Output program readme
      --run-script <js>               Run this additional javascript after the
                                      page is done loading (repeatable)
      --stop-slow-scripts             Stop slow running javascripts (default)
      --no-stop-slow-scripts          Do not Stop slow running javascripts
      --user-style-sheet <url>        Specify a user style sheet, to load with
                                      every page
      --username <username>           HTTP Authentication username
  -V, --version                       Output version information and exit
      --width <int>                   Set screen width, note that this is used
                                      only as a guide line. Use
                                      --disable-smart-width to make it strict.
                                      (default 1024)
      --window-status <windowStatus>  Wait until window.status is equal to this
                                      string before rendering page
      --zoom <float>                  Use this zoom factor (default 1)

PHPで使用する場合

コマンドを関数「exec()」で使用してください。

まとめ

インストールさえ成功すればPHPからコマンドを打てば、webサイトのキャプチャーを取得しそのまま画像の加工まで出来ます。

アンテナサイトなど登録サイトの画像キャプチャーを表示する時の取得にどうでしょうか?

webサイトをPDFファイルで作成も出来ますが、僕はまったく使ってないですね。

何かの使い方にあるのかな?

その他に参考になりそうなサイト

PHPでWEBサイトのスクリーンショット
wkhtmltopdf (Linux版)のインストール
LinuxコマンドからWEBサイトのスクリーンショットを作成
wkhtmltoimage でWebサイトのキャプチャを取得する

COMMENT

メールアドレスが公開されることはありません。