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

    xiaoxiao2023-06-22  140

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

             });

    }

     

    相关资源:爬虫工具phantomjs-2.1.1-macosx.zip
    最新回复(0)