利用PhantomJS做网页截图经济适用,但其API较少,做其他功能就比较吃力了。

CasperJs是对phantomjs的一次封装。即phantomjs是原生的,而casperjs是封装在以phantomjs基础上的玩意。

用CasperJS浏览页面比用PhantomJS更加方便和直观。

相关传送门:

# 官网
http://casperjs.org/ # github
https://github.com/casperjs/casperjs # 快速入门
http://docs.casperjs.org/en/latest/quickstart.html # API文档
http://docs.casperjs.org/en/latest/modules/index.html # Event事件API文档
http://docs.casperjs.org/en/latest/events-filters.html#events-reference
# 利用phantomjs+casperjs实现登陆抓取网页并截图
http://blog.csdn.net/longhaoyou/article/details/43524977 # 入门练习demo
http://blog.csdn.net/kiwi_coder/article/details/36248353 # 利用nodejs+phantomjs+casperjs采集淘宝商品的价格
http://www.cnblogs.com/xinzhyu/p/4214669.html # 萌萌CasperJS第1篇 1分钟写完爬虫 拿亚马逊商品数据
http://blog.csdn.net/sagomilk/article/details/20800543

# 解决乱码问题:

phantom.outputEncoding = "gbk";

# 利用open / AJAX发送HTTP请求

http://docs.casperjs.org/en/latest/modules/casper.html#open

http://docs.casperjs.org/en/latest/modules/clientutils.html#sendajax

# 监听页面的错误

phantom.outputEncoding = "gbk";
var casper = require('casper').create({
viewportSize: {width: , height: },
waitTimeout:
}); // 需要先申明,然后再start
casper.on('page.error', function (err) {
this.echo(err)
}) casper.start('http://localhost:8081/#/home', function () {
this.echo('Casper Starting');
}) casper.run();

# 快速判断元素是否存在

var casper = require('casper').create();

casper.start('http://domain.tld/page.html', function() {
if (this.exists('h1.page-title')) {
this.echo('the heading exists');
}
}); casper.run();

# 建议对click之后的验证加入wait操作。这样可以有更好的保证. 并且建议尽可能使用thenClick。除非点击的元素要在指定的区域

  // houseBusinessDetails
this.thenClick('.listviewItem:nth-child(1) .busitem').wait(, function () {
this.echo(this.getCurrentUrl());
this.capture('capture/houseBusinessDetails.png')
})

# 可以用thenOpen进行跳转界面

  // carBusiness
this.thenOpen('http://localhost:8081/#/carBusiness').waitForSelector('.listviewItem').wait(, function () {
this.echo(this.getCurrentUrl());
this.capture('capture/carBusiness.png')
})

个人练手笔记

phantom.outputEncoding = "gbk";
var casper = require('casper').create({
viewportSize: {width: 414, height: 736},
waitTimeout:30000,
}); const u = function () {
casper.echo("当前正在操作的URL为:" + casper.getCurrentUrl())
} // 需要先申明,然后再start
casper.on('page.error', function (err) {
this.echo("出现了error等级的错误信息------- " + err, 1);
}) casper.start('http://localhost:8081/', function () {
// Home
this.waitForSelector("#app .centers-sec", function () {
u()
this.capture('capture/home.png')
}) // houseBusiness
this.thenClick('.module:nth-child(1)').wait(1500, function () {
u()
this.capture('capture/houseBusiness.png')
}) // houseBusinessDetails
this.thenClick('.listviewItem:nth-child(1) .busitem').wait(1500, function () {
u()
this.capture('capture/houseBusinessDetails.png')
}) // carBusiness
this.thenOpen('http://localhost:8081/#/carBusiness').waitForSelector('.listviewItem').wait(1500, function () {
u()
this.capture('capture/carBusiness.png')
}) // CarBusinessDetails
this.thenClick('.listviewItem:nth-child(1) .busitem').wait(1500, function () {
u()
this.capture('capture/CarBusinessDetails.png')
}) // lentOutDetail
this.then(function () {
if (this.exists('#header .right-btn a')) {
this.thenClick('#header .right-btn a').wait(1500, function () {
u()
this.capture('capture/lentOutDetail.png')
})
}
}) // myBusiness
this.thenOpen('http://localhost:8081/#/myBusiness').wait(1500, function () {
u()
this.capture('capture/myBusiness0.png')
}).thenClick(".mint-tab-item:nth-child(2)").wait(2500, function () {
u()
this.capture('capture/myBusiness1.png')
}).thenClick(".mint-tab-item:nth-child(3)").wait(1000, function () {
u()
this.capture('capture/myBusiness2.png')
}) // userInfo
this.thenOpen('http://localhost:8081/#/user/userInfo').wait(1500, function () {
u()
this.capture('capture/userInfo.png')
}) // qrcode
this.thenOpen('http://localhost:8081/#/qrcode').wait(1500, function () {
u()
this.capture('capture/qrcode.png')
}) // allLedger
this.thenOpen('http://localhost:8081/#/allLedger').wait(3500, function () {
u()
this.capture('capture/allLedger.png')
}) // AutoRepay
this.thenOpen('http://localhost:8081/#/AutoRepay').wait(3500, function () {
u()
this.capture('capture/AutoRepay.png')
}) // auditAssign
this.thenOpen('http://localhost:8081/#/auditAssign').wait(2500, function () {
u()
this.capture('capture/auditAssign.png')
})
}) casper.run();

PhantomJs 与 Casperjs的更多相关文章

  1. [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...

  2. PhantomJS、CasperJS安装配置图文详解

    目前网站主流的加载方式: 一种是同步加载:另一种是异步加载,也即我们常说的用ajax.对于同步加载的网站,普通的爬虫程序轻松就能搞定.但是对于那种异步请求数据的网站,通常使用selenium+Phan ...

  3. PhantomJS与CasperJS在Windows下的安装与使用

    按照网上的教程来呢,一定是不好使的,这是常理. 所以必须要告诉你怎么使用Phantomjs…… 这么用! 1.下载Phantomjs的压缩包并解压缩: 2.在bin目录(包含phantomjs.exe ...

  4. 前端端对端测试:基于PhantomJS的CasperJS

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

  5. 浏览器自动化测试初探 - 使用phantomjs与casperjs

    收录待用,修改转载已取得腾讯云授权 作者:yangchunwen 首先要解释一下为什么叫浏览器自动化测试,因为本文只关注发布后页面功能的自动化测试,也就是UI层面的自动化. 浏览器测试有别于js代码的 ...

  6. [转] 浏览器自动化测试初探:使用 phantomjs 与 casperjs

    [From] https://www.qcloud.com/community/article/641602001489391648 作者:yangchunwen 首先要解释一下为什么叫浏览器自动化测 ...

  7. Phantomjs和Casperjs,后台网页抓取和交互

    var casper = require('casper').create({ verbose: true, logLevel: 'debug', pageSettings: { loadImages ...

  8. windows下面安装casperjs

    因为需要 就学习了一下casperjs,CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写.由于casperjs对PhantomJS的依赖性,所以需要 ...

  9. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

随机推荐

  1. c++ Oracle OCCI 编程

    转载备忘:http://blog.sina.com.cn/s/blog_53a72add01015zj4.html 关于occi编程可以参考的链接: http://blog.itpub.net/162 ...

  2. Redis : 为什么我们做分布式使用 Redis ?(转)

    绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知.这里对 Redis 常见问题做一个总结,解决 ...

  3. P4050 [JSOI2007]麻将

    传送门 怎么好像没什么人写 $dp$ ...? 设 $f[i][j][k][0/1]$ 表示当前处理完前 $1$ 到 $i$ 的数,上一位开始的顺子有 $j$ 个,当前位开始的顺子有 $k$ 个,是否 ...

  4. Redis---使用场景

    3.使用场景 计数器   可以对String进行自增自减运算,从而实现计算器功能.   Redis这种内存型数据库的读写性能非常高,很适合存储频繁读写的及数量 缓存   将热点数据放到内存中,设置内存 ...

  5. LNMP环境搭建哈哈

    经过一番折腾,终于将LNMP环境搭建完成了.本文介绍的LNMP环境是在windows的Oracle VM VirtualBox中的Centos虚拟机上搭建的,各个软件的版本为:Centos7 + Ng ...

  6. Django rest_frameword 之项目流程

    后端开发软件目录规范 一.Model from django.db import models # Create your models here. # 多表的设计 # 图书 作者 出版社 作者详情表 ...

  7. MySQL存储过程、触发器、自定义函数、事务

    1.存储过程 MySQL中存储过程的参数中有IN.OUT.INOUT类型,但是函数的参数只能是IN类型的. “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参 ...

  8. linux 建立 MySQL 账号

    以 root 身份登录 Linux 系统,创建 mysql 组和用户 [root@Nagios-Server ~]# groupadd mysql [root@Nagios-Server ~]# us ...

  9. Ubuntu配置python操作

    Ubuntu16.04 安装python 查看当前python情况root@localhost:/# cd /root@localhost:/usr/bin# cd /usr/binroot@loca ...

  10. hdu 3530 单调队列最值

    /** HDU 3530 单调队列的应用 题意: 给定一段序列,求出最长的一段子序列使得该子序列中最大最小只差x满足m<=x<=k. 解题思路: 建立两个单调队列分别递增和递减维护(头尾删 ...