zoukankan      html  css  js  c++  java
  • 浏览器引擎-phantomjs初次认识

      最近没什么重要的任务,就抽空看了看项目组爬虫小组的代码,因为我们的爬虫主要是以python的scrapy框架为主,看起来比较方便。在看代码的时候看到一个叫phantomjs的东西,蛮新鲜的,就去问了下爬虫开发,这货是干嘛用的?开发告诉我这个东西是一个js引擎,我们在抓取ajax页面的时候用的,你们QA不是一直用selenium对付那些js渲染的东西么,可以去试试这个,不需要用浏览器的。于是,回去查了一下phantomjs这个东西,学习了下,感觉还是蛮容易上手的。

      Phantomjs是一个轻量的浏览器引擎,官网介绍中提到,它主要用在这几个场合:官网地址:http://phantomjs.org/

    • web测试,主要是可以又轻又快捷的进行web测试,还不用去再去依赖浏览器,用过selenium的朋友都知道,打开一个浏览器是多么痛苦的事,特别是FireFox,并且他支持很多测试框架,比如RobotFrame, WebDrive等。
    • 页面自动化渲染.可以通过标准的domApi来操作页面元素,并且,你也可以注入Jquery,这样就可以通过jquery来操作页面元素了.
    • 屏幕捕捉,这个好。有的时候case失败了,想捕捉屏幕的时候,用selenium自带的捕捉老是遇到浏览器兼容问题,用这个来捕捉应该会稳定很多、
    • 网络监视.这个我接触的不多,主要说是可以自动分析页面的加载速度,并且还可以导出标准的HAR格式文件。

      使用方法:

      运行命令就是 phtntomsjs + js 脚本就可以

      Phtntomsjs用的是commonjs的实现方法,关于commonjs,可以看下http://wiki.commonjs.org/wiki/Modules/1.1.1#Require.

          Phtntomsjs自带是有几个模块,System,Webpage,Child_Process,WebServer

      具体应用:

      1.简单的访问环境变量的例子

    var system = require('system');
    //通过require返回一个外部模块的接口,这里的外部模块接口是system
    var env=require('system').env;
    if (system.args.length === 1) {
        Object.keys(env).forEach(function(key) {
            console.log(key + '=' + env[key]);
    }
    )}
     else {
        system.args.forEach(function (arg, i) {
                console.log(i + ': ' + arg);
        });
    }
    phantom.exit();

      2.网页截图,网页截图用到了webpage模块,比如我想把博客园首页截图下来

    var page = require('webpage').create();
    page.open('http://cnblogs.com/', function () {
        page.render('cnblog.png');
        phantom.exit();
    });

      3.网页加载的例子

      

    var page = require('webpage').create(),
        system = require('system'),
        t, address;
    
    if (system.args.length === 1) {
        console.log('Usage: loadspeed.js <some URL>');
        phantom.exit(1);
    } else {
        t = Date.now();
        address = system.args[1];
        //打开一个地址
        page.open(address, function (status) {
            if (status !== 'success') {
                console.log('FAIL to load the address');
            } else {
                t = Date.now() - t;
                //evaluate用来执行一个方法
                console.log('Page title is ' + page.evaluate(function () {
                    return document.title;
                }));
                console.log('Loading time ' + t + ' msec');
            }
            phantom.exit();
        });
    }

    其实这个网页加载的最好应用就是测试网页的各种性能,不需要打开浏览器去查询,如果配合雅虎的Yslow工具,加上hudson(jenkins)就能把网页的加载也进入到持续继承测试里面。

    毕竟在linux下面,很多时候是没有图形界面的,phantomjs+Yslow+hudson的超级组合:http://yslow.org/phantomjs/

     总之:phantomjs是一个很强大的浏览器引擎,因为我也刚刚接触没多久,很多地方还不是很熟悉,不过幸好他的文档很多,例子也很丰富,基本上自带的例子都可以当做一个api来调用,上手也很简单,对js有点基础的朋友都可以马上上手。

      

     

  • 相关阅读:
    【转】用Linux命令行获取本机外网IP地址
    【转】5 Best Place to Learn Linux – Linux Tutorial Sites
    【转】linux shell 逻辑运算符、逻辑表达式详解
    ftp
    修改/创建计算机用户名、密码
    SCRIPT429: Automation 服务器不能创建对象
    Tomcat 加载外部dll时如何配置
    查看电脑MAC地址
    访问windows共享无法分配内存问题解决
    打包
  • 原文地址:https://www.cnblogs.com/xiamuyouren/p/3291735.html
Copyright © 2011-2022 走看看