最近由于一个活儿因此要完成抓取网页截图这个需求,我研究了几个工具,就向你们分享一下咱们的方案了。假若有什么错误和更好的提议,欢迎拍砖。 由于支付宝已经作过相似的功能,因此我就咨询了@天材他们的方案,感谢他提供了宝贵的资料做参考。
第一个方案:(直接用命令截图,再用ImageMagic裁剪)
伪代码以下:
(1)截图指令[ " + "xvfb-run.sh --auto-servernum CutyCapt --delay=" + delay+ " --max-wait=" + maxWait + " --url=" + url + " --out=" + filePath + "]
(2)截取指定图片指定大小指令[" + "convertcrop " + cutWidth + "x" + cutHight + "+" + cutStartX + "+" + cutStartY + " " + filePath + " " + filePath + "]node
但我以为第一个方案彷佛有点别扭,并且截图的命令也不知道能不能支持多个平台(由于公司只配置了一台笔记本给我,win系统的),因此我就去探讨另一个方案。
第二个方案:(PhantomJs + NodeJs + ImageMagick)
方案分析:linux
理由:
PhantomJs是支持各个平台的,并且用起来很方便。细心的同窗能够看到它安装的脚本,是会根据不一样平台下载不一样的版本。git
if (process.platform === 'linux' && process.arch === 'x64') { downloadUrl += 'linux-x86_64.tar.bz2' } else if (process.platform === 'linux') { downloadUrl += 'linux-i686.tar.bz2' } else if (process.platform === 'darwin') { downloadUrl += 'macosx.zip' } else if (process.platform === 'win32') { downloadUrl += 'windows.zip' } else { console.log('Unexpected platform or architecture:', process.platform, process.arch) exit(1) }
步骤和注意点:
[ 1 ] 安装phantomjsgithub
npm install phantomjs@1.9.2-1
这个版本比较稳定,最好不要下最新版本,我以前弄了很久都安装不成功,就上github看里面的Issue,做者也建议安装1.9.2-1(特别在win下)
[ 2 ] 安装ImageMagic和gm模块
根据做者描述GraphicsMagick and ImageMagick for node,因此使用gm的时候注意设置是ImageMagick的模式。web
var gm = require('gm').subClass({ imageMagick: true });
使用方法:(里面的连接都有详细解释,我就不展开了)
{1}phantomjs模块的使用方法: https://www.npmjs.org/package/phantomjs
{2}phantomjs的API: http://phantomjs.org/
{3}gm模块的使用方法: https://www.npmjs.org/package/gmmacos
性能测试:
本机:
CPU:i5-3230M 2.60GHz
内存:8G
截图淘宝首页花费时间:20.0+秒 (山穷水尽疑无路)npm
服务器:
CPU:16 Intel(R) Xeon(R) CPU L5630 @ 2.13GHz
内存:49552672K(约等于47.25G)
截图淘宝首页花费时间:1.0+秒 (柳暗花明又一村)segmentfault
第三个方案:(使用webkit2png工具)
今天刚恰好跟一位腾讯的小伙伴聊天,刚恰好聊起这事儿,他也刚恰好作了跟我类似的东西,但他使用的是webkit2png,因此就互相交流一下了。他是使用webkit2png的,webkit2png是一个命令行工具,其实跟phantomjs也很相似,我查了下也是支持各个平台的。
@TQ博客: http://targetkiller.net/preview-mac-in-win/
具体请移步到文档:http://www.paulhammond.org/webkit2png/windows
微博:@任重致远-MR梁广彬
英文名:jambinliang
花名:无唯服务器