linux脚本截取网页信息,如何从shell获取网页的一部分快照?

我有一个网页的一部分,我需要在给定的时间间隔拍摄一个gif快照.快照需要是整页大小分辨率,但正如我所说,它只会到达页面上的某个位置(在这种情况下它位于表格之后).

获取像这样的页面快照图像图像的最佳方法是什么?我想把它扔进一个cron工作并忘掉它,但我并不是很容易看到一个可以快速完成这项任务的工具.

解:

根据@ 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);

}

});

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值