• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JSP > phantomjs的使用(兼容Linux和windows版本)

phantomjs的使用(兼容Linux和windows版本)

作者:hacker_Lees的博客 字体:[增加 减小] 来源:互联网 时间:2017-08-19

hacker_Lees的博客通过本文主要向大家介绍了phantomjs等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1、 在使用phantomjs的时候需要下载phantomjs,网上有window版本和Linux版本。将phantomjs放在linux上的指定位置之后(如下面的/home/tpl/phantomjs-1.9.7-linux-x86_64/处),
2、 按照类似如下命令进行测试,是否可以生成图片(执行前检查phantomjs的权限,要有执行权限):

/home/tpl/phantomjs-1.9.7-linux-x86_64/bin/phantomjs
/home/tpl/phantomjs-1.9.7-linux-x86_64/examples/test.js      
http://www.baidu.com
/home/test/index.png

注意上面的命令,每个之间用空格隔开,其中:
/home/tpl/phantomjs-1.9.7-linux-x86_64/bin/phantomjs表示的是phantomjs所在的位置
/home/tpl/phantomjs-1.9.7-linux-x86_64/examples/test.js表示使用快照的时候需要的一个js
http://www.baidu.com 要生成快照的页面
/home/test/index.png 表示要将截的图放在的位置

3、要使用程序生成快照,需要执行shell命令或者cmd命令
能够兼容Java和windows的一段java代码如下:

package xxxxx.webservice.snapshot;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.NET.URL;

import com.ucap.utils.OsUtils;

/**
 * SnapshotServiceImpl.java 用于生成快照的服务类
 *
 * @attention 使用注意事项
 * @author
 * @date
 * @note 判断在Linux上的情况
 */
public class SnapshotServiceImpl implements SnapshotService {

         /**
          * phantomjsPath   :phantomjs
          *     /home/tpl/phantomjs-1.9.7-linux-x86_64/bin/phantomjs
          *     /home/tpl/phantomjs-1.9.7-linux-x86_64/examples/test.js 
          *     http://xxxxx:5555/tpl/special/2016/5/19/2d0cd5d12a974e438a2f4a13300f60d2/index.html
          *    
          * exportPath      :导出路径,这是一个绝对路径 
          *
          * 关于phantomjs的执行命令如:
          *     /home/tpl/phantomjs-1.9.7-linux-x86_64/bin/phantomjs
          *     /home/tpl/phantomjs-1.9.7-linux-x86_64/examples/test.js
          *     http://xxxx:5555/tpl/special/2016/5/19/2d0cd5d12a974e438a2f4a13300f60d2/index.html
          *     /home/test/index.png
          */
         public String createSnapshot(String phantomjsPath, String exportPath) {
                   URL path = this.getClass().getClassLoader().getResource("/");
                   String str = path.getPath();
                   File file = new File(str);
                   str = file.getParentFile().getParentFile().getParentFile()
                                     .getAbsolutePath()
                                     + "/temp" + exportPath;

                   String[] strArray = null;

                   // 判断linux的执行情况
                   if (OsUtils.IS_LINUX) {
                            strArray = new String[3];
                            strArray[0] = "/bin/sh";
                            strArray[1] = "-c";
                            strArray[2] = phantomjsPath + " " + str;
                   } else if (OsUtils.IS_WINDOWS) {
                            strArray = new String[4];
                            strArray[0] = "cmd.exe";
                            strArray[1] = "/C";
                            strArray[2] = phantomjsPath;
                            strArray[3] = str;
                   }

                   File fileInfo = new File(str);
                   File fi = new File(fileInfo.getParentFile().getAbsolutePath());
                   if (!fi.exists()) {
                            fi.mkdirs();
                   }

                   // windows下phantomjs位置
                   Runtime rt = Runtime.getRuntime();
                   Process process = null;
                   try {
                            process = rt.exec(strArray);
                   } catch (IOException e) {
                            e.printStackTrace();
                   }
                   StringBuffer sbf = null;
                   InputStream is = null;
                   try {
                            is = process.getInputStream();
                            BufferedReader br = new BufferedReader(new InputStreamReader(is));
                            sbf = new StringBuffer();
                            String tmp = "";

                            while ((tmp = br.readLine()) != null) {
                                     sbf.append(tmp);
                            }
                   } catch (IOException e) {
                            e.printStackTrace();
                   } finally {
                            if (is != null) {
                                     try {
                                               is.close();
                                     } catch (IOException e) {
                                               e.printStackTrace();
                                     }
                                     is = null;
                            }
                   }

                   return sbf.toString();
         }
}

其中一个依赖的test.js如下:

var page = require('webpage').create();

//-----------------------------获取窗口的宽高信息,并设置,write by 涂作权 start------------------------------------
var winWidth = null;
var winHeight = null;
// 获取窗口宽度
if (window.innerWidth) {
    winWidth = window.innerWidth;
} else if ((document.body) && (document.body.clientWidth)) {
    winWidth = document.body.clientWidth;
}
// 获取窗口高度
if (window.innerHeight) {
    winHeight = window.innerHeight;
} else if ((document.body) && (document.body.clientHeight)) {
    winHeight = document.body.clientHeight;
}
// 通过深入 Document 内部对 body 进行检测,获取窗口大小
if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) {
    winHeight = document.documentElement.clientHeight;
    winWidth = document.documentElement.clientWidth;
}
page.viewportSize = {width:winWidth,height:winHeight};
page.clipRect = {top:0,left:0,width:winWidth,height:winHeight};
//-----------------------------获取窗口的宽高信息,并设置end--------------------------------------
//-----------------------------------------------------------------------------------------------
page.settings = {
         javascriptEnabled:false,
         loadImages:true,
         userAgent:'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) PhantomJS/19.0'
};
//-----------------------------------------------------------------------------------------------


system = require('system');
//var url = 'http://yule.club.sohu.com/gifttrade/thread/2m2efbrpfui';
var address;
var loca;
if(system.args.length == 1){
         phantom.exit();
}else{
         adress = system.args[1];
         loca = system.args[2];
         page.open(adress, function (status){
    if (status != "success"){
        console.log('FAIL to load the address');
        phantom.exit();
    }

    page.evaluate(function(){
        //此函数在目标页面执行的,上下文环境非本phantomjs,所以不能用到这个js中其他变量      
        //window.scrollTo(0,10000);//滚动到底部
                   //滚动到自适应高度
        //window.document.body.scrollTop = document.body.scrollHeight;

       /* window.setTimeout(function(){
            var plist = document.querySelectorAll("a");
            var len = plist.length;
            while(len)
            {
                len--;
                var el = plist[len];
                el.style.border = "1px solid red";
            }
        },5000);*/
    });

    window.setTimeout(function (){
                       //在本地生成截图
                            page.render(loca);      
                            //console.log(loca);
                            phantom.exit();
                   }, 1000);
         });
}
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-11jsp 定制标签(Custom Tag)
  • 2017-05-11jsp实现生成中国国旗图片效果代码
  • 2017-05-11JSP/Servlet 中的汉字编码问题
  • 2017-05-11jsp自定义标签之ifelse与遍历自定义标签示例
  • 2017-05-11关于JSP的一点疑问小结
  • 2017-05-11在jsp页面中实现跳转的方式分享
  • 2017-05-11JSP页面间传值问题实例简析
  • 2017-05-11JSP Spring ApplicationContext的国际化支持
  • 2017-05-11通过过滤器(Filter)解决JSP的Post和Request中文乱码问题
  • 2017-05-11JAVA/JSP学习系列之一(JDK安装)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 利用Java实现zip压缩/解压缩
    • 2004开发技术年度综述之Java世界
    • JavaBean实现多文件上传的两种方法
    • ie9下alert阻挡jsp渲染ie8下没问题
    • 整体刷新和局部刷新frameset窗口问题深入探讨
    • JSP 报表打印的一种简单解决方案
    • JSP如何获取客户端真实IP地址
    • 初学jsp心得
    • 面向对象编程,我的思想(5)
    • Spring mvc实现Restful返回json格式数据实例详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有