最近没什么重要的任务,就抽空看了看项目组爬虫小组的代码,因为我们的爬虫主要是以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自带是有几个模块,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 ');
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() {returndocument.title;
}));
console.log('Loading time ' + t + ' msec');
}
phantom.exit();
});
}
其实这个网页加载的最好应用就是测试网页的各种性能,不需要打开浏览器去查询,如果配合雅虎的Yslow工具,加上hudson(jenkins)就能把网页的加载也进入到持续继承测试里面。
毕竟在linux下面,很多时候是没有图形界面的,phantomjs+Yslow+hudson的超级组合:http://yslow.org/phantomjs/
总之:phantomjs是一个很强大的浏览器引擎,因为我也刚刚接触没多久,很多地方还不是很熟悉,不过幸好他的文档很多,例子也很丰富,基本上自带的例子都可以当做一个api来调用,上手也很简单,对js有点基础的朋友都可以马上上手。