5

特定の時間間隔でgifスナップショットを撮る必要があるWebページのセクションがあります。スナップショットはフルページサイズの解像度である必要がありますが、前述したように、スナップショットはページの特定の場所にのみ移動します(この場合はテーブルの後です)。

このようなページスナップショット画像画像を取得するための最良の方法は何でしょうか?cronジョブに入れて忘れたいのですが、これをすばやく実行できるツールがすぐに見つかりません。

解決:

@Eduardoの優れた方向性に従って、私はphantomjsとimagemagick(Mac:brew install phantomjsbrew install imagemagick)に基づいたクリーンで迅速なソリューションを実装しました。

*注:imagemagickを完全に削除する場合は、rasterize.jsに以下を追加するだけです。page.clipRect = { top: 10, left: 10, width: 500, height: 500 }

#! /usr/bin/env bash
# Used with PhantomJS - rasterize.js source: http://j.mp/xC7u1Z

refresh_seconds=30

while true; do
    date_now=`date +"%Y-%m-%d %H%M"` 

    phantomjs rasterize.js $1 "${date_now}-original.png"  # just sucking in the first arg from shell for the URL
    convert "${date_now}-original.png" -crop 500x610+8+16 "${date_now}.png" # crop args: WIDTHxHEIGHT+LEFT_MARGIN+TOP_MARGIN
    rm "${date_now}-original.png"

    echo "Got image: ${date_now}.png - Now waiting ${refresh_seconds} seconds for next image..."
    sleep ${refresh_seconds}
done

そして、これが上記のphantomjsで使用されているjsです。

// As explained here: http://code.google.com/p/phantomjs/wiki/QuickStart

var page = new WebPage(),
    address, output, size;

if (phantom.args.length < 2 || phantom.args.length > 3) {
    console.log('Usage: rasterize.js URL filename');
    phantom.exit();
} else {
    address = phantom.args[0];
    output = phantom.args[1];
    page.viewportSize = { width: 600, height: 600 };
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}
4

1 に答える 1

4

この質問はすでにここで回答されています: Pythonを使用してWebサイトのスクリーンショット/画像を撮るにはどうすればよいですか?

'09に回答されましたが、そのオプションはまだ非常に有効です。さらにいくつかのオプションを使用して拡張してみます。

これらのツールはフルページのスナップショットを取得し、後でimagemagickを使用して簡単にクリップできます。

あなたが最近持っているかもしれないもう一つのオプションはPhantomjsです。Phantomは、ノード上で実行するように構築されたヘッドレスブラウザであり、ページ全体またはページの一部のみの写真を撮ることができます。

この例を見てください:

var page = new WebPage(),
    address, output, size;

if (phantom.args.length < 2 || phantom.args.length > 3) {
    console.log('Usage: rasterize.js URL filename');
    phantom.exit();
} else {
    address = phantom.args[0];
    output = phantom.args[1];
    page.viewportSize = { width: 600, height: 600 };
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}
于 2012-02-22T07:26:43.510 に答える