利用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. ASP.NET CORE 2.2 MVC 学习

    百度云链接:https://pan.baidu.com/s/1_iSy3wq4Jegr6j_AH9nobA 提取码:n152

  2. 虚拟机的linux(CentOS)系统安装

    一.安装虚拟机:VirtualBox  1.软件下载:https://www.virtualbox.org/  2.一路点击下一步完成安装 二.安装linux:CentOS6.8  1.官方网站:ht ...

  3. OC(构造函数,分类等知识总结)

    文章来源:http://my.oschina.net/luoguankun/blog/219532 一.成员变量的作用域 ·        @public ·        在任何地方都能直接访问对象 ...

  4. python之模块导入和包

    一.何为模块 1.一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 2.模块目的和函数,对象等一样,是为了代码的复用性而存在的.即一个py程序写了很多功能,也可 ...

  5. 解密Qt安装目录的结构

    http://c.biancheng.net/view/3866.html 了解 Qt 安装目录的结构虽然不是编程必须的,但是它能练就我们的内功,让我们对 Qt 的编程环境了如指掌.Windows 和 ...

  6. Django中使用djangorestframework产生Token

    修改settings.py: INSTALLED_APPS添加rest_framework 产生Token from rest_framework.authtoken.models import To ...

  7. Zabbix--06主动模式和被动模式、低级自动发现、性能优化、

    目录 一. Zabbix主动模式和被动模式 1.克隆模版 2.修改克隆后的模版为主动模式 3.修改监控主机关联的模版为主动模式 4.修改客户端配置文件并重启 5.查看最新数据 二.Zabbix低级自动 ...

  8. 基于tcp和udp协议的套接字

    socket:是在应用层和传输层之间的一个抽象层,它把TCP/IP层的复杂的操作封装抽象,并提供一些接口供应用层调用 套接字:被设计用于同一台主机上多个应用程序之间的通信,被称为进程之间通信或IPC ...

  9. 使用pycharm编写自动化脚本

    1.:导入本地Python环境 2:安装Selenium 3:下来需要根据安装的浏览器版本,下载合适的chromedriver驱动程序. 4:接着需要将下载的chromedriver进行解压,并将文件 ...

  10. Django【第19篇】:Django之extra

    extra过滤 extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params= ...