年前也做了一些东西,由于过年只顾疯了,也没有整理,年后补上把~ 今天整理一下个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. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  2. 修改docker默认172.17网段

    docker启动时默认使用172.17.x.x作为容器的ip地址,可以通过以下方法自定义该网段: sudo service docker stop通过命令route -n查看docker0是否存在,若 ...

  3. Bridge 模式

    Bridge 模式将抽象和行为划分开来,各自独立,但能动态的结合.在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是 ...

  4. cocos2dx 实现华丽丽的滚动层.

    前言 好久没写博客了. 前几周策划要求实现一个比较多功能的滚动层控件. 这个艰巨的任务就这样自然而然的落在了我这小身板上. 当然了, 只要我出手, 难度再高的需求也变得不堪一击. 哈哈哈哈 示例图 该 ...

  5. prototype/constructor/__proto__之prototype简单应用

    一.简单使用构造原型加prototype造简单的轮子. 1.想jQ那样获取HTML元素,先看JS代码 function Cmf() { //创建构造函数 this.arry = [] } Cmf.pr ...

  6. 常见的mongodb可视化工具

    一.MongoVue   1.MongoVUE是一款比较好用的MongoDB客户端工具,可以为大家提供一个高度.简洁可用的MongoDB管理界面. 2.通过MongoVUE,用户可以用树形.表格及bj ...

  7. 隐藏和显示 ng-show ng-hide

    <div ng-controller='DeathraymenueController'>    <button ng-click="toggleMenue()" ...

  8. C#.NET Winform 通用开发框架

    C/S系统开发框架-企业版 V4.0 (Enterprise Edition) 简介: http://www.csframework.com/cs-framework-4.0.htm 视频下载: 百度 ...

  9. 最新发布C#.NET快速开发框架企业版V4.0 (适合开发ERP、进销存系统)

    C/S系统开发框架-企业版 V4.0 (Enterprise Edition) http://www.csframework.com/cs-framework-4.0.htm 视频下载: 百度网盘: ...

  10. 获取工程的exe文件的所在目录

    Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName; 例如结果为:           C:\Documents and ...