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

phantomjs初次认识的更多相关文章

  1. 浏览器引擎-phantomjs初次认识

    最近没什么重要的任务,就抽空看了看项目组爬虫小组的代码,因为我们的爬虫主要是以python的scrapy框架为主,看起来比较方便.在看代码的时候看到一个叫phantomjs的东西,蛮新鲜的,就去问了下 ...

  2. 使用phantomjs对页面进行截图

    本文章参考了使用phantomjs操作DOM并对页面进行截图需要注意的几个问题 及 phantomjs使用说明 这两篇文章,初次接触phantomjs的童鞋可以去看下这两篇原文 在学习中可以看下 ph ...

  3. 通过phantomjs 进行页面截图

    本文章参考了使用phantomjs操作DOM并对页面进行截图需要注意的几个问题 及phantomjs使用说明 这两篇文章,初次接触phantomjs的童鞋可以去看下这两篇原文 在学习中可以看下 pha ...

  4. Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)

    概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...

  5. Phantomjs+Nodejs+Mysql数据抓取(1.数据抓取)

    概要: 这篇博文主要讲一下如何使用Phantomjs进行数据抓取,这里面抓的网站是太平洋电脑网估价的内容.主要是对电脑笔记本以及他们的属性进行抓取,然后在使用nodejs进行下载图片和插入数据库操作. ...

  6. 使用PhantomJS实现网页截图服务

    这是上半年遇到的一个小需求,想实现网页的抓取,并保存为图片.研究了不少工具,效果都不理想,不是显示太差了(Canvas.Html2Image.Cobra),就是性能不怎么样(如SWT的Brower). ...

  7. 如何用phantomjs去抓取js渲染后的页面

    1.安装phantomjs 网上有很多. 2.执行官网上的示例代码 // Read the Phantom webpage '#intro' element text using jQuery and ...

  8. HashTable初次体验

    用惯了数组.ArryList,初次接触到HashTable.Dictionary这种字典储存对于我来说简直就是高大上. 1.到底什么是HashTable HashTable就是哈希表,和数组一样,是一 ...

  9. 初次启动app校验的活动图和分析

    初次启动活动图 version 1 version 2 version 3 根据上图的活动图分析,可能存在较严重的问题: 主线程中如果发现是sdcard的url,则可能进行重命名 FirstEnter ...

随机推荐

  1. Android安卓安全审计mobiseclab

    关于安卓上的app分析,有非常多的本地化软件能够胜任, 只是,今天给大家介绍一款在线的安全审计,恶意软件(android app)检測和分析工具,mobiseclab, 由于看到国内对此工具的介绍比較 ...

  2. JavaScript语言基础知识11

    JavaScript字符的比较. 在接下来的学习内容的开始,我们先来看一下alert()此功能,它是一个消息框. OK,接下来正式介绍代码: <HTML> <HEAD> < ...

  3. 关于s2sh框架关于hibernate懒加载问题的说明和解决方案

    首先我们来看下面这个图,解释了一个web程序的一次请求流程! 懒加载异常的说明: 懒加载就是我们在查询一个对象时,它所有的属性是否要被查出来! 如果懒加载开启的话,session在service层就被 ...

  4. JAVA学习课第五十三届 — IO流程(七)File打靶 &amp; Properties设置

    一个.锻炼 深度遍历目录 深度遍历非常自然而然想到递归,而递归就非常自然的想到事实上现的底层算法是栈 对指定文件夹下列出全部内容(包括子文件夹的内容) PS:建议不要遍历C盘 import java. ...

  5. flash导入图片缩放后出现毛边、失真、锯齿、文字模糊不清晰的情况

    原因: 1.flash的性能非常差,这就不得不让它做大量的优化. 2.图片缩放,目前业界有多种算法,画质越好的算法,计算量越大. 3.flash优化了图片缩放,使用了质量非常低的缩放算法.这个做法,保 ...

  6. 纯Lambda实现斐波那契数列

    还需要考虑溢出等问题,主要无事写着玩 Func<float, float, float> a = (arg1, arg2) => 0f;//init ; a = (lastNumbe ...

  7. JS基础——事件绑定

    上一篇博客JS事件对象中,老师问JS事件处理和VB中的事件处理有什么联系?先来解决一下这个问题.举个VB.net中事件处理的样例(JS敲久了,VB习惯的都不熟悉了,看来得常常回想了): 1.事件处理V ...

  8. Asp.Net MVC页面静态化功能实现二:用递归算法来实现

    上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net ...

  9. 区域、模板页与WebAPI初步

    区域.模板页与WebAPI初步 一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域( ...

  10. [转载]Android中WebView自适应屏幕

    webview中右下角的缩放按钮能不能去掉 settings.setDisplayZoomControls(false); //隐藏webview缩放按钮 让Webview加载的页面居中显示有我知道的 ...