シェルからWebページのセクションのスナップショットを取る方法は?
-
29-10-2019 - |
質問
特定の時間間隔でGIFスナップショットを取る必要があるWebページのセクションがあります。スナップショットはフルページサイズの解像度である必要がありますが、私が言ったように、ページ上の特定の場所にのみ行きます(この場合はテーブルの後です)。
このようなページスナップショット画像画像をつかむための最良の方法は何ですか?私はそれをクロンの仕事に投げ込んで忘れたいだけですが、私はこれを迅速に作業するツールをすぐに見ていません。
解決:
@eduardoの優れた方向に従って、私はPhantomjsとImagemagick(Mac: brew install phantomjs
& brew 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);
}
});
}
解決
この質問はすでにここで答えられています:Pythonを使用してWebサイトのスクリーンショット/画像を取得するにはどうすればよいですか?
それは'09に回答されましたが、そのオプションはまだ非常に有効です。さらにいくつかのオプションを拡張してみます。
これらのツールでは、フルページスナップショットを取得します。これにより、後でImageMagickを使用して簡単にクリップできます。
あなたが最近持っているかもしれない別のオプションはです ファントムジ. 。 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);
}
});
}