最近没什么重要的任务,就抽空看了看项目组爬虫小组的代码,因为我们的爬虫主要是以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初次认识的更多相关文章

  1. python之Phantomjs无界面浏览器引擎自动化测试

    文字搬运工,本文主要介绍PhantomJS功能,其中有屏幕快照功能,为后面更新[python接口自动化脚本更新版本],其中新版本中新增自动发送邮件功能正文带图片,使用PhantomJS截取图片后发送邮 ...

  2. phantomjs初次认识

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

  3. python3+selenium框架设计05-配置文件和浏览器引擎类

    python3配置文件的增删改查等操作可以使用内置的ConfigParser模块,可以自行百度学习,也可以看Python3学习笔记27-ConfigParser模块 配置文件一般存放着环境信息,比如u ...

  4. Python_selenium封装一个浏览器引擎类

    Python_selenium封装一个浏览器引擎类 现在我们在编写一个类,叫浏览器引擎类(此例为:启动浏览器),将文件名命名为browser.py,代码下面通过更改一个字符串的值,运用if语句判断和控 ...

  5. Python+Selenium中级篇之-封装一个自己的类-浏览器引擎类

    前一篇文章我们知道了,如何去封装几个简单的Selenium方法到我们自定义的类,这次我们编写一个类,叫浏览器引擎类,通过更改一个字符串的值,利用if语句去判断和控制启动那个浏览器.这里我们暂时,支持三 ...

  6. JavaScriptCore在浏览器引擎中的位置

    因为随着JS这门语言的发展,JS的宿主越来越多,有各种各样的浏览器,甚至是常见于服务端的Node.js(基于V8运行). 2.       Webkit 源代码由三大模块组成: 1). WebCore ...

  7. CSS Houdini:用浏览器引擎实现高级CSS效果

    vivo 互联网前端团队-Wei Xing Houdini被称之为Magic of styling and layout on the web,看起来十分神秘,但实际上,Houdini并非什么神秘组织 ...

  8. ECMA262,JavaScript引擎,浏览器

    相关阅读:https://www.cnblogs.com/970119449blog/p/8080133.html 相关阅读:https://www.jb51.net/article/75888.ht ...

  9. 基于Python, Selenium, Phantomjs无头浏览器访问页面

    引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...

随机推荐

  1. Android 它们的定义View

    安卓开发过程,安卓官方控制有时来自往往不能满足我们的需求.这一次,我必须定义自己.下面我们就来看看他们的定义View: package com.example.myview; import andro ...

  2. memcache redis mogodb 分别适用在什么样的场景?

    memcache 与 redis 都是key-value存储系统,相对来说redis可能比memcache适应场景多些,存储的value类型也更多些,而redis也支持主从同步.而mongo是一种文档 ...

  3. 深度神经网络(DNN)

    深度神经网络(DNN) 深度神经网络(Deep Neural Networks, 以下简称DNN)是深度学习的基础,而要理解DNN,首先我们要理解DNN模型,下面我们就对DNN的模型与前向传播算法做一 ...

  4. 电讯“情趣me”为什么命途多舛?

        古人有句话叫做战争"鼓作气,再而衰,三而竭",意思是打仗必须"一气呵成".才干发挥最大实力,取得最好的战绩.所谓商场如战场,经商也是如此,近期,中国电信 ...

  5. 3 学习UML图 学习DDD的基本概念

    今天在学习DDD的过程中看到了大神 圣杰的博文 个人觉得非常经典 强烈推荐  在此提供url链接: UML类图10分钟快速入门 关于聚合 的理解 :一类没有紧密相关的东西聚在一起 ,分开了也可以独立存 ...

  6. [ACM] POJ 3096 Surprising Strings (map使用)

    Surprising Strings Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5783   Accepted: 379 ...

  7. Centos下一个server安装的版本号mysql

    首先这里说的是这里的路径.以及语句都是在网上看了非常多错误后自己实践后改动过来的,希望对大家实用. 这里在安装的时候要按着我的这个顺序.否则可能会由于路径错误而找不到对应的指令. 一.安装cmake ...

  8. Swift是一个提供RESTful HTTP接口的对象存储系统,目的是为了提供一个和AWS S3竞争的服务

    Swift是一个提供RESTful HTTP接口的对象存储系统,最初起源于Rackspace的Cloud Files,目的是为了提供一个和AWS S3竞争的服务. Swift于2010年开源,是Ope ...

  9. 精装友好联络算法实现借壳和RI

    精装友好联络会 注册算法分析: 1.  许可证由三部分组成. 2. 的登记号的第一部分是顺序编号0x6d模 3. 登记代码的第二部分: 先将订单号与0XB25F1异或,将异或后的结果转换成十进制字符串 ...

  10. Angular常用指令

    安装Node 先去Node官网下载并安装Node.js Install the Angular CLI(安装Angular CLI) npm install -g @angular/cli Creat ...