当前位置: 首页 > news >正文

使用phantomjs获得web页面截图 | Marshal's Blog

使用phantomjs获得web页面截图 | Marshal's Blog

使用phantomjs获得web页面截图

以前,我的同事也做过一个方案,使用cutycapt,《UBUNTU SERVER 11.10利用CUTYCAPT实现网页截图》。

在实际使用中发现速度比较慢。

我用phantomjs又做了个方案。速度有明显提高:

  • cutycapt方案,截取百度,3.8s,截取谷歌,4.8s
  • phantomjs方案,截取百度,0.8s,截取谷歌,1.4s

这是用它截取的百度首页:

下面说一下操作步骤。

首先是安装xvfb,我使用ubuntu server 11.10,安装命令:

sudo apt-get install xvfb gtk2-engines-pixbuf xfonts-100dpi x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic

然后,可以测试一下xvfb的运行:

Xvfb -fp /usr/share/fonts/X11/misc/ :0 -screen 0 1024x768x24 &

为什么要加fp参数,可以参考使用Xvfb问题的解决。

如果没有报错,xvfb就充当xserver跑在后台了。

正式使用的时候,要做成守护进程,创建一个脚本,/etc/init.d/Xvfb

#! /bin/sh

### BEGIN INIT INFO
# Provides: Xvfb
# Required-Start: $local_fs $remote_fs
# Required-Stop:
# X-Start-Before:
# Default-Start: 2 3 4 5
# Default-Stop:
### END INIT INFO

N=/etc/init.d/Xvfb

set -e

case “$1″ in
  start)
Xvfb :0 -screen 0 1024x768x24 &
;;
  stop|reload|restart|force-reload)
;;
  *) 
echo “Usage: $N {start|stop|restart|force-reload}” >&2exit 1
;;
esac

exit 0

ubuntu 11.10没有phantomjs的包可以装,需要自行编译安装,安装需要的包是:

sudo apt-get install libqt4-dev libqtwebkit-dev qt4-qmake python-qt4 git build-essential

通过git下载phantomjs的源代码:

git clone git://github.com/ariya/phantomjs.git

可以这样看到所有的版本:

git tag

我使用的代码主干,看issues里的对话,应该接近1.5版本了。如果你需要稳定版本,可以切换到该版本下:

git checkout 1.4.1

编译和安装:

qmake-qt4
make
sudo cp bin/phantomjs /usr/local/bin/

运行一下,看是否能得到截图:

DISPLAY=:0 phantomjs ~/phantomjs/examples/rasterize.js http://www.baidu.com screenshot.png

这时候还会有个问题,中文都显示乱码,因为ubuntu默认未安装中文字体。

可找合适的中文字体,上传到该目录下:

/usr/share/fonts/

然后再执行:

fc-cache

这样中文字体就生效了。

相关文章:

  • EEToolbarCenterButton
  • Lua模式匹配
  • SSPieProgressView
  • 新手***学习方法
  • 季节变化,小心感冒
  • asp.net获取当前时间 .
  • Cubase5音乐制作教程相关介绍
  • Grizzly简介
  • 关于win7 80端口被占用
  • VC++动态链接库(DLL)编程深入浅出
  • 404错误提示302的原因分析及解决
  • C# WinForm:怎样使有标题栏的Form窗体不可移动?
  • Solr4:环境搭建,Tomcat7+Solr4.x+中文分词+多核
  • 使用Group-Object进行分组
  • HTC One X Root
  • 【5+】跨webview多页面 触发事件(二)
  • 07.Android之多媒体问题
  • canvas 绘制双线技巧
  • co模块的前端实现
  • docker-consul
  • EOS是什么
  • express.js的介绍及使用
  • github从入门到放弃(1)
  • HashMap ConcurrentHashMap
  • HomeBrew常规使用教程
  • JavaScript设计模式与开发实践系列之策略模式
  • java取消线程实例
  • JS 面试题总结
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • js写一个简单的选项卡
  • node.js
  • Sublime Text 2/3 绑定Eclipse快捷键
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Vue学习第二天
  • 力扣(LeetCode)22
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 大数据全解:定义、价值及挑战
  • ​什么是bug?bug的源头在哪里?
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)http协议
  • (转载)hibernate缓存
  • .cfg\.dat\.mak(持续补充)
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET Core WebAPI中封装Swagger配置
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法