zoukankan      html  css  js  c++  java
  • phantomjs初次认识

    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用的是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有点基础的朋友都可以马上上手。

      

     

    就算不在校园,也要保持饥渴,学到老,活到老嘛 我是一个小QA,我为自己代言!!!!!!!!!!!!!
     
     
    标签: phantomjs
  • 相关阅读:
    通用标签
    网页基础
    WCF---服务发布的步骤
    锁·——lock关键字详解
    C# 实现磁性窗体
    C#中的线程(三) 使用多线程
    C#中的线程(二) 线程同步基础
    C#中的线程(一)入门
    class A<T> where T:class 这个泛型类中的Where T:class什么意思
    OO真经——关于面向对象的哲学体系及科学体系的探讨(下)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3292156.html
Copyright © 2011-2022 走看看