年前也做了一些东西,由于过年只顾疯了,也没有整理,年后补上把~ 今天整理一下个phantomjs截图实践中遇到的问题。    
 
    最近做的一个项目,需要在首页展示已经做的一些项目的缩略图,方便在查找的时候,更方便的知道这个项目是一个什么样的页面。本身使用的thinkjs写的系统,所以找到了使用phantomjs进行截图,所以查到了phantomjs的Web Page Module,可以完成截图。同时找到了截图的例子,简单的截图就可以直接使用了。但是现实永远是残酷的,在使用过程中遇到了一下一些问题:乱码问题,图片大小问题,登录状态问题。
 
    接下来就上述提到的一些问题,给出我的一些解决方案。
 
    第一:乱码问题
  • gbk乱码,也就是截图出现口等乱码
yum install bitmap-fonts bitmap-fonts-cjk //centos
apt-get install xfonts-wqy //ubuntu
        安装了上面的字体,基本上就不会出现乱码问题了,但是字体还是存在粗细不一致的问题。
  • 字体粗细不一致问题
        这个问题的原因是截图服务器上没有安装页面所需的字体,解决方案就是安装所需字体。如何在centos上安装字体?,这里需要注意的是,/usr/share/fonts这个目录是root权限,可以通过上传到其他目录然后移动过来。
 
    第二:图片大小问题
    大致有四种途径调整:
  • viewportSize,这个设置的是页面预览的窗口大小,直接影响生成图片的大小,如果需要全屏,那么这个配置不能过小
  • clipRect可以配合viewportSize使用,可以剪切出某个固定大小的图片
  • zoomFactor可以缩放,感觉用起来效果不好
  • 如果图片是在页面展示的话,可以改变img的大小,这个的问题是有可能压缩图片质量,并且原始图片太大的话,资源比较大(这个方法比较奇葩,慎用)。
 
    第三:登录状态问题(cookie问题)
    这里需要设置cookie也是一个比较特殊的场景,就是我需要截图的页面是需要登录状态的,所以需要把页面的cookie带过去,这里以登录cookie为例,其他的cookie是相同的处理方式。
/*以下都是不可缺少的,特别是domain,没有默认值,这里踩过坑*/
phantom.addCookie({
'name' : 'cookie-name',
'value' : 'cookie-value',
'path' : '/',
'domain' : domain,
'expires' : (new Date()).getTime() + (1000 * 60 * 60)
});
 
    这样简单的截图基本上都可以搞定了,需要注意的时候,如果访问https的页面还需要配置:--ignore-ssl-errors=true,简单的调用例子如下:
    phantomjs [options] somescript.js [arg1 [arg2 [...]]]
    //option填写需要的一些参数,比如:--ignore-ssl-errors=true
    其他的一些option参数,可以参考:Command Line Interface
 
    phantomjs功能比较多,因为项目需要学习了一下,截图这个API,其他的需要的可以自己看看。
 
 
参考资料:

phantomjs截图的实践的更多相关文章

  1. phantomjs截图中文网站网页页面乱码,安装字体解决

    用phantomjs去截取中文页面的网站可能会出现乱码的情况,也就是截图中中文的位置全是方框. 解决办法就是安装字体. 在centos中执行:yum install bitmap-fonts bitm ...

  2. phantomjs 抓取、截图中文网站乱码的问题的解决

    用phantomjs抓取html乱码的解决方案: phantomjs --output-encoding=gbk test.js http://webscan.360.cn/index/checkwe ...

  3. Highcharts结合PhantomJS在服务端生成高质量的图表图片

    项目背景 最近忙着给部门开发一套交互式的报表系统,来替换原有的静态报表系统. 老系统是基于dotnetCHARTING开发的,dotnetCHARTING的优势是图表类型丰富,接口调用简单,使用时只需 ...

  4. nodejs+phantomjs+七牛 实现截屏操作并上传七牛存储

    近来研究了下phantomjs,只是初涉,还谈不上深入研究,首先介绍下什么是phantomjs. 官网上的介绍是:”PhantomJS is a headless WebKit scriptable ...

  5. 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)

    对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素.若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了. WebDriver.Phant ...

  6. Nodejs+定时截图+发送邮件

    功能 每天定时截图,并把截到的图片自动通过邮件发送. 说明 代码注释已经非常详细,就不多做说明,需要的朋友自己查看代码即可,主文件Mail.js,截图文件capturePart1.js,capture ...

  7. # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod

    20155337 2017-2018-1 <信息安全系统设计基础>第二周课堂实践+myod 因为在课上已经提交了四个实验,还欠缺最后一个实验,反省一下自己还是操作不熟练,平时在课下应该多多 ...

  8. MySQL的课堂的实践

    MySQL的课堂的实践 基本认识 如今的数据库有几种是主流,分别是:Oracle Database.Informix.SQL Server.PostgreSQL.MySQL等,我们现在学习的MySQL ...

  9. java实现网页截图

    使用工具 java+selenium+phantomjs /chromedriver /firefox 1.分别是 phantomjs插件 google截图插件 和 firefox火狐浏览器截图插件2 ...

随机推荐

  1. Java 6 Thread States and Life Cycle.

    Ref: Java 6 Thread States and Life Cycle This is an example of UML protocol state machine diagram sh ...

  2. MSSQL批量替换网址字符串语句

    1.如何批量替换ntext字段里面的数据 问题描述: 我想把数据库中News表中的字段content中的一些字符批量替换. 我的content字段是ntext类型的. 我想替换的字段是content字 ...

  3. Const和ReadOnly

    总结一下const和readonly有这么几条区别: const和readonly的值一旦初始化则都不再可以改写: const只能在声明时初始化:readonly既可以在声明时初始化也可以在构造器中初 ...

  4. 第三篇、调优之路 Apache调优

    1.  简介 在第一篇中整合了apache + tomcat ,利用了apache解析静态文件为tomcat解压.但是在测试机上发现两者性能不足,不能充分利用服务器的性能,该篇中将对apache进行性 ...

  5. 一个IP支持多个网站实例(Apache2、Ubuntu相关)

    http://www.blogjava.net/Andyluo/archive/2009/08/24/21821.html http://blog.csdn.net/zltianhen/article ...

  6. shell用if

    --------- shell用if出错了,Why? shell if 实例: site=github.com/fankcoder if [ $site == github.com/fankcoder ...

  7. dedecms设置文章分页后,标题会带有序号的解决方法

    至于删除分页后标题后面的序号,找到include/arc.archives.class.php 打开,找到 if($i>1) $this->Fields['title'] = $this- ...

  8. window 配置 sendmail

    从http://glob.com.au/sendmail/下载sendmail.zip 解压sendmail.zip到目录下(最好使用短路径,长路径会导致问题的出现),我安装的路径是: E:\wamp ...

  9. 百度编辑器ueditor如何配置

    完全版: 1.加载 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

  10. CreateJS第0章- Canvas基础

    最近网页游戏比较火,以前做过一些小游戏,但是过段时间就都忘了,今天在这里记录一下学习过程,以备后用.做网页游戏有很多种框架,我是flash程序用Adobe出品的CreateJS最容易.基本上继承了fl ...