浏览器引擎-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有点基础的朋友都可以马上上手。
浏览器引擎-phantomjs初次认识的更多相关文章
- python之Phantomjs无界面浏览器引擎自动化测试
文字搬运工,本文主要介绍PhantomJS功能,其中有屏幕快照功能,为后面更新[python接口自动化脚本更新版本],其中新版本中新增自动发送邮件功能正文带图片,使用PhantomJS截取图片后发送邮 ...
- phantomjs初次认识
phantomjs初次认识 最近没什么重要的任务,就抽空看了看项目组爬虫小组的代码,因为我们的爬虫主要是以python的scrapy框架为主,看起来比较方便.在看代码的时候看到一个叫phantomjs ...
- python3+selenium框架设计05-配置文件和浏览器引擎类
python3配置文件的增删改查等操作可以使用内置的ConfigParser模块,可以自行百度学习,也可以看Python3学习笔记27-ConfigParser模块 配置文件一般存放着环境信息,比如u ...
- Python_selenium封装一个浏览器引擎类
Python_selenium封装一个浏览器引擎类 现在我们在编写一个类,叫浏览器引擎类(此例为:启动浏览器),将文件名命名为browser.py,代码下面通过更改一个字符串的值,运用if语句判断和控 ...
- Python+Selenium中级篇之-封装一个自己的类-浏览器引擎类
前一篇文章我们知道了,如何去封装几个简单的Selenium方法到我们自定义的类,这次我们编写一个类,叫浏览器引擎类,通过更改一个字符串的值,利用if语句去判断和控制启动那个浏览器.这里我们暂时,支持三 ...
- JavaScriptCore在浏览器引擎中的位置
因为随着JS这门语言的发展,JS的宿主越来越多,有各种各样的浏览器,甚至是常见于服务端的Node.js(基于V8运行). 2. Webkit 源代码由三大模块组成: 1). WebCore ...
- CSS Houdini:用浏览器引擎实现高级CSS效果
vivo 互联网前端团队-Wei Xing Houdini被称之为Magic of styling and layout on the web,看起来十分神秘,但实际上,Houdini并非什么神秘组织 ...
- ECMA262,JavaScript引擎,浏览器
相关阅读:https://www.cnblogs.com/970119449blog/p/8080133.html 相关阅读:https://www.jb51.net/article/75888.ht ...
- 基于Python, Selenium, Phantomjs无头浏览器访问页面
引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...
随机推荐
- 在Windows中安装MinGW-w64(有图,一步一步)
在Windows中安装MinGW-w64 发表回复 如需配合Sublime Text 3编译C程序, 请参考本站文章: 使用Sublime Text 3与MinGW-w64编译C语言程序 MinGW, ...
- FileReader的编码问题
有一个UTF-8编码的文本文件,用FileReader读取到一个字符串,然后转换字符集:str=new String(str.getBytes(),"UTF-8");结果大部分中文 ...
- 初探js
第一章 1.JS的位置 1-1.行间 1-2.内嵌 1-3.外联 2.JS的标签位置 页面中的代码在一般情况下会按从上到下的顺序,从左往右的顺序执行. 因此当JS放在了元素上面的时候,就不能正常执 ...
- TCP 报文段结构
源端口.目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信.源端口.目标端口是用 ...
- Python Tricks(二十二)—— small tricks
多次 import import numpy as np, matplotlib.pyplot as plt ndarray 的强制类型转换 v = v.astype(np.int) python 的 ...
- libuv 中文编程指南
最近看了一些有关 libuv 的东西,另外复习了一些与同步.异步.阻塞.非阻塞,异步IO(aio)的东西, 算是技术积累吧,等有时间了整理出一个完整的文档出来,希望在今后的编程中用到. 不多说了,本文 ...
- 改变TLabel字型和颜色(Styled特性高于自身特性,李维的博客)
最近收到几位使用者的来信都是和如何改变FireMonkey TLabel组件的字型和颜色, 这几位使用者都是直接改变TextSettings特性中的Font子特性但却无法改变字型和颜色, 因此来信询问 ...
- SICP 锻炼 (1.40)解决摘要
SICP 锻炼1.40 是一个休闲的工作非常easy,但它看起来很复杂,单的一道题. 题目原题例如以下: 请定义一个过程cubic, 它和newtons-method过程一起使用在以下形式的表达式里: ...
- NS2网络模拟(5)-homework01.tcl
1: #NS2_有线部分\homework01.tcl 2: 3: #创建两个结点,深圳到北京的TCP连接,图形将数据显示出来,计算吞吐率,画图分析 4: #tcp上层用ftp 5: #udp上层用c ...
- SyncML协议简述(和HTTP协议有点类似)
目前,移动计算和通信设备的流行很大部分原因是因为它们具有一些方便的功能,比如说在需要时可以发送信息给其他用户,用户希望随时随地都可以利用掌上设备访问信息和执行应用程序,甚至在飞行中也可以获得和更新信息 ...