1、安装xvfb或vncserver
apt-get install xvfb
apt-get install vncserver xvncviewer
不用两个都安装,xvfb和vncserver都能够在没有安装X-Windows的情况下,提供X终端服务。可以只安装其中一个,建议安装vncserver,以可以通过诸如tightvnc之类的客户端进行管理。因此就不暂时测试xvfb方式,有空再试验。
2、安装imagemagick
apt-get install imagemagick
3、创建firefox 制作thumbnail时候使用的profile,避免已安装extension的干扰。
firefox -CreateProfile Screenshot
关于firefox的command line,可以参考:
http://kb.mozillazine.org/Command_line_arguments
4、生成thumbnail
vncserver -geometry 1024×768 -depth 24
#DISPLAY=:1 firefox -P "Screenshot" &
DISPLAY=:1 firefox -P "Screenshot" -new-window http://www.yeeach.com &
DISPLAY=:1 import -window root yeeach.png
不知为何使用命令:
DISPLAY=:1 firefox -P "Screenshot" -remote "openurl(javascript:window.open(‘http://www.yeeach.com/‘,”,’fullscreen=yes,toolbar=no,width=1024,height=768’))"始终报错:
Error: No running window found
因此DISPLAY=:1 firefox -P "Screenshot" & 实际上没有起作用,因此注释掉,等有空时候再具体研究原因。
5、为了方便测试,可以首先清除掉X11相关的lock文件和进程
rm -rf /tmp/.X11-unix/* ;rm -rf /tmp/.X*lock
ps -ef|grep X|grep -v grep |awk ‘{print $2 }’ |xargs kill -9
5、总结:
- 采用此种方式如果处理过程中,如果出现非正常关闭的情况,firefox打开时候会提示“恢复上次会话”的提示,因此可能导致抓取页面不成功,比较烦人。可以采用的解决方案:
a、修改配置参数browser.startup.page,关掉firefox的崩溃恢复提示机制。
推荐设置为 3。firefox 会恢复崩溃时的会话页面,但是正常关闭时,你可能也需要上次的那些会话页面
0 启动打开 about:blank 空页面
1 启动打开homepage 主页面
2 启动打开上次最后关闭时的页面
3 启动打开上次最后会话的那些页面
b、采用Tab Mix Plus或SessionPage 扩展设置
- 此种方法实际上是利用了imagemagick抓屏的功能,抓取用firefox打开页面的thumbnail,尽管可以利用imagemagick裁剪不需要的区域,相对于诸如page saver或screengrab的方案或基于gecko的方案还是比较不是很精准,尤其是不能滚动完整抓取多屏的页面。
- 在调试时候,用tightvnc或其他vnc客户端登录终端进行管理还是很方便,能够及时排查出现的问题,这一点比xvfb方便。
6、参考资料
http://kb.mozillazine.org/Command_line_arguments
http://www.semicomplete.com/blog/geekery/xvfb-firefox.html
http://brad.livejournal.com/2015327.html
http://pc90.narc.affrc.go.jp/meng/?p=8