phantomjs的使用+Java代码+依赖js(兼容Linux和windows版本)

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

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命令

能够兼容javawindows的一段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 begin modify by 涂作权 2016-5-19 判断在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();

                   }

 

                   // windowsphantomjs位置

                   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);

         });

}

 

目录
相关文章
|
2月前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
283 4
|
2月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
2月前
|
Java Linux Windows
windows版java版本管理器
本文介绍了如何在Windows上使用JDK版本管理器jvms来管理多个Java版本,包括下载、初始化、列出本地安装的JDK版本、在线查看可用版本、切换和安装特定版本的Java。
85 0
windows版java版本管理器
|
3月前
|
安全 Java 应用服务中间件
Windows版本的Tomcat无法启动,如何处理?
Windows版本的Tomcat无法启动,如何处理?
241 14
|
2月前
|
并行计算 开发工具 异构计算
在Windows平台使用源码编译和安装PyTorch3D指定版本
【10月更文挑战第6天】在 Windows 平台上,编译和安装指定版本的 PyTorch3D 需要先安装 Python、Visual Studio Build Tools 和 CUDA(如有需要),然后通过 Git 获取源码。建议创建虚拟环境以隔离依赖,并使用 `pip` 安装所需库。最后,在源码目录下运行 `python setup.py install` 进行编译和安装。完成后即可在 Python 中导入 PyTorch3D 使用。
257 0
|
3月前
|
Windows
【收藏】每个Windows XP版本的缩写
【收藏】每个Windows XP版本的缩写
|
3月前
|
Windows
Windows7电脑启动时提示文件winload.exe无法验证其数字签名,错误代码0xc0000428的解决方法
Windows7电脑启动时提示文件winload.exe无法验证其数字签名,错误代码0xc0000428的解决方法
|
3月前
|
安全 Linux
Linux中ldd命令的依赖复制技巧
`ldd`命令的依赖复制技巧在特定的场合下非常有用,但它也需要细心的处理和充分的测试,以确保在新环境中的稳定运行。此外,这种做法虽然方便,但在长期维护和安全更新方面可能会带来额外的负担。
115 0
|
3月前
|
Linux 开发者 Python
从Windows到Linux,Python系统调用如何让代码飞翔🚀
【9月更文挑战第10天】在编程领域,跨越不同操作系统的障碍是常见挑战。Python凭借其“编写一次,到处运行”的理念,显著简化了这一过程。通过os、subprocess、shutil等标准库模块,Python提供了统一的接口,自动处理底层差异,使代码在Windows和Linux上无缝运行。例如,`open`函数在不同系统中以相同方式操作文件,而`subprocess`模块则能一致地执行系统命令。此外,第三方库如psutil进一步增强了跨平台能力,使开发者能够轻松编写高效且易维护的代码。借助Python的强大系统调用功能,跨平台编程变得简单高效。
56 0
|
4月前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
206 0