简介

Casperjs是一个基于PhantomJS和SlimerJS的前端端对端测试框架,当然你也可以使用它完成网络爬虫功能,它的特点的通过简单的脚本模拟浏览器行为,

主要有casper、tester、mouse等六大模块,其丰富的API为开发者减少了很多压力。

安装

casperjs的安装很简单,你可以通过npm或者下载casperjs包自行引用的方式安装,毫无疑问其支持Mac、windows、linux。

  • npm全局安装
    npm install -g casperjs
  • Mac os推荐使用brew
    $ brew update

    $ brew install casperjs --devel

    $ brew install casperjs

    //更新casperjs
$ brew upgrade casperjs
  • 察看版本
    $ phantomjs --version
$ casperjs

使用

通过以上步骤成功安装好casperjs后,可以运行以下脚本,对casperjs进行自检,熟悉其功能

$ casperjs selftest

以一个简单的百度图片热门榜的操作为例,简单示意一下casperjs的基本用法

注意:以上代码可以因为百度图片的DOM变化而失效,读者可以自己修改一下代码中的选择器

1.首先新建两个文件index.js 和config.js

2.把以下代码复制进index.js

var config = require('config');
var casper = require('casper').create(); //输出配置
casper.echo('using config:');
casper.echo(JSON.stringify(config, null, '\t'));
//屏蔽google资源,你懂的
casper.on('resource.requested', function(requestData, request) {
if (/\/\/.*google[^\/]+/.test(requestData.url) || /cloud\.githubusercontent\.com/.test(requestData.url)) {
request.abort();
};
});
//输出console页面错误
casper.on('page.error', function(msg) {
this.echo('error message caught: ' + msg);
});
//设置浏览器超时时间和窗口大小
casper.options.waitTimeout = 10000;
casper.options.viewportSize = {
width: 1024,
height: 768
}; //生成一个数组
function Nums(len) {
var nums = [];
for (var i = 0; i < len; i++) {
nums.push(i);
}
return nums; }
//记录时间日期
var date = new Date();
var casperDate = date.toLocaleString().split(' ')[0]; //定义nums数组作为遍历长度,suglineVal是热门榜值,suglineLength是热门榜长度
var nums,suglineVal, suglineLength;
var date =new Date();
//开始casper,输出当前日期,并通过config文件读取url
casper.echo(casperDate+'百度图片热门搜索图片抓取');
casper.start(config.baseURL, function() {
//获取热门榜长度
suglineLength = this.evaluate(function() {
var csuglineLength = $('.sugline').length;
return csuglineLength;
});
//生成遍历数组
nums = Nums(suglineLength);
//casper的each函数对每一条热门搜索执行相同结果
this.each(nums, function(self, num) {
//then函数控制执行流程,获取热门榜的热门搜索值,并赋予百度搜索框进行搜索
self.then(function() {
suglineVal = this.evaluate(function(num) {
//获取热门搜索值,选择器随时可能会改变,请参考运行时百度图片首页的DOM树
var cSuglineVal = $('.sugline')[num].children[1].innerText;
//__utils__功能等同与jquery,方便在没有引入jquery或者类似DOM查询工具时使用。
__utils__.setFieldValue("input[id='kw']", cSuglineVal);
$('.s_btn')[0].click();
return cSuglineVal;
}, num);
});
//waitUntilVisible等待一个选择器出现,等到imglist加载完成后进入
self.waitUntilVisible('.imglist', function() {
//capture函数对当前页面进行截图并保存在capture/images/...
this.capture('capture/images/'+casperDate+'/'+casperDate+'-' + suglineVal + '.png');
//在控制台输出热门图片
this.echo(suglineVal);
}); });
});
//运行casper脚本start
casper.run();

3.把以下代码复制进config.js

'use strict'
//casper读取系统信息的模块
var system = require('system');
//读取环境变量
var env = system.env.TEST_ENV || 'test'
var config = {};
//其实上面没什么用,主要配置看这里
config.test = {
baseURL: 'http://image.baidu.com/',
imageURL: 'capture/',
} module.exports = config[env]

4.在控制台中执行,如果出现casperjs不是内部命令,请确保全局安装casperjs,确保环境变量正确。

casperjs index.js

结果

1.控制台输出如下

2.查看images文件夹成功截取图片

分析

通过使用casperjs,我们只写了不到100行代码就成功抓取了百度8月14日的热门图片,看到了每天发生的大新闻。在这个小demo中,我们使用了casperjs的最主要的casper模块进行网页抓取流程控制、clientutils模块简化DOM查询,其还有我们没有用到的mouse模块,控制输出颜色的colorizer模块,专门用于测试的tester模块,和一些常用处理函数集成的utils模块,相信大家在自己学习了官网的API后,能够创造出更有意思的东西,这个小demo虽然说可能抓取速度不是很快,但是还是基本完成了我们的需求,如果有任何问题和建议都可以留言给我。

前端端对端测试:基于PhantomJS的CasperJS的更多相关文章

  1. 脚手架vue-cli系列五:基于Nightwatch的端到端测试环境

    不同公司和组织之间的测试效率迥异.在这个富交互和响应式处理随处可见的时代,很多组织都使用敏捷的方式来开发应用,因此测试自动化也成为软件项目的必备部分.测试自动化意味着使用软件工具来反复运行项目中的测试 ...

  2. 最受欢迎的5款Node.js端到端测试框架

    测试,尤其是自动化测试在现代 WEB 工程中有着非常重要的角色,与交付过程集成良好的自动化测试流程可以在新版发布时帮你快速回归产品功能,也可以充当产品文档.测试因粒度不同又可以分为单元测试.接口测试. ...

  3. pc端和android端应用程序测试有什么区别?(ps面试题)

    pc端和android端应用程序测试有什么区别?(ps面试题) [VIP7]大连-凭海临风(215687736) 2014/4/10 8:56:171.测试环境不同PC平台一般都是windows an ...

  4. 移动web开发之移动端真机测试

    × 目录 [1]特性 [2]安装 [3]设置[4]移动端 前面的话 chrome的开发者工具可以很好地做好模拟工作,但毕竟模拟和实际还是有差别的.所以,真机测试是一定要做的,如何高效地进行真机测试呢. ...

  5. nightwatch 基于Webdriver的端到端自动化测试框架

    nightwatch 是使用nodejs编写的,基于Webdriver api 的端到端自动化测试框架 包含以下特性 清晰的语法,基于js 以及css 还有xpath 的选择器 内置测试runner, ...

  6. Cypress与TestCafe WebUI端到端测试框架简介

    近期接触了Cypress和TestCafe,两个测试框架都基于Node.js,都不再使用Selenium+WebDriver,而且开箱即用,非常轻量级,就冲着不再使用WebDriver这一点,极大地勾 ...

  7. 带你读AI论文丨LaneNet基于实体分割的端到端车道线检测

    摘要:LaneNet是一种端到端的车道线检测方法,包含 LanNet + H-Net 两个网络模型. 本文分享自华为云社区<[论文解读]LaneNet基于实体分割的端到端车道线检测>,作者 ...

  8. web端,app端,小程序端测试差异详解

    前置解释:1.单纯从功能测试的层面上来讲的话,APP 测试.web 测试和H5测试在流程和功能测试上是没有区别的2.Web项目或pc项目都是在电脑上进行测试的.常见的PC项目架构有BS架构和CS架构的 ...

  9. HubbleDotNet 最新绿色版,服务端免安装,基于eaglet 最后V1.2.8.9版本开发,bug修正,支持一键生成同步表

    HubbleDotNet 是一个基于.net framework 的开源免费的全文搜索数据库组件.开源协议是 Apache 2.0.HubbleDotNet提供了基于SQL的全文检索接口,使用者只需会 ...

随机推荐

  1. DeepLearning - Regularization

    I have finished the first course in the DeepLearnin.ai series. The assignment is relatively easy, bu ...

  2. 电脑提示‘您需要来自Administration的权限才能对此文件夹进行更改’怎么删除文件

    电脑提示'您需要来自Administration的权限才能对此文件夹进行更改'怎么删除文件 应该怎么做 win7系统需要定期删除一些无用的文件,扩大内存空间,但是在删除文件的时候弹出提示"您 ...

  3. SAP(ABAP) ABAP内部外部数据转换常用function

    文本相关CONVERSION_EXIT_CUNIT_OUTPUT      将内部单位转为单位文本CONVERSION_EXIT_ISOLA_OUTPUT      根据语言代码取文本CONVERSI ...

  4. ECharts模块化使用5分钟上手

    什么是EChats? 一句话: 一个数据可视化(图表)Javascript框架,详细?移步这里,类似(推荐)的有 HighCharts,其他? 嗯,先看看吧-- 快速上手: 模块化单文件引入(推荐). ...

  5. Alpha事后诸葛会议

    [设想和目标] Q1:我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? "小葵日记"是为了解决18-30岁年轻用户在记录生活时希望得到一美体验友好 ...

  6. javascript方法扩展

    String.prototype.startWith = function(str){ return str.indexOf(str) == 0; }; var str = "abc&quo ...

  7. 软工网络15个人作业4--alpha阶段个人总结

    一.个人总结 自我评价表 类别 具体技能和面试问题 现在的回答 毕业找工作 语言 最拿手的语言之一,代码量是多少 java,代码量大概两三千行吧 语言 最拿手的语言之二,代码量是多少 python,代 ...

  8. StringBuilder、StringBuffer和String三者的联系和区别

    String 类    String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间.    String a = "a ...

  9. WPF和Expression Blend开发实例:模拟QQ登陆界面打开和关闭特效

    不管在消费者的心中腾讯是一个怎么样的模仿者抄袭者的形象,但是腾讯在软件交互上的设计一直是一流的.正如某位已故的知名产品经理所说的:设计并非外观怎样,感觉如何.设计的是产品的工作原理.我觉得腾讯掌握了其 ...

  10. 初识 es6

    es6 可能出来已经有一段时间了,但是我到今天才发现他的好,却不是很了解他,也不知道各个浏览器的兼容性怎么样?今天就把他们都弄明白. 新增命令 let ES6新增了let命令,用来声明变量.它的用法类 ...