PhantomJs 与 Casperjs
利用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的更多相关文章
- [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)
最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...
- PhantomJS、CasperJS安装配置图文详解
目前网站主流的加载方式: 一种是同步加载:另一种是异步加载,也即我们常说的用ajax.对于同步加载的网站,普通的爬虫程序轻松就能搞定.但是对于那种异步请求数据的网站,通常使用selenium+Phan ...
- PhantomJS与CasperJS在Windows下的安装与使用
按照网上的教程来呢,一定是不好使的,这是常理. 所以必须要告诉你怎么使用Phantomjs…… 这么用! 1.下载Phantomjs的压缩包并解压缩: 2.在bin目录(包含phantomjs.exe ...
- 前端端对端测试:基于PhantomJS的CasperJS
简介 Casperjs是一个基于PhantomJS和SlimerJS的前端端对端测试框架,当然你也可以使用它完成网络爬虫功能,它的特点的通过简单的脚本模拟浏览器行为, 主要有casper.tester ...
- 浏览器自动化测试初探 - 使用phantomjs与casperjs
收录待用,修改转载已取得腾讯云授权 作者:yangchunwen 首先要解释一下为什么叫浏览器自动化测试,因为本文只关注发布后页面功能的自动化测试,也就是UI层面的自动化. 浏览器测试有别于js代码的 ...
- [转] 浏览器自动化测试初探:使用 phantomjs 与 casperjs
[From] https://www.qcloud.com/community/article/641602001489391648 作者:yangchunwen 首先要解释一下为什么叫浏览器自动化测 ...
- Phantomjs和Casperjs,后台网页抓取和交互
var casper = require('casper').create({ verbose: true, logLevel: 'debug', pageSettings: { loadImages ...
- windows下面安装casperjs
因为需要 就学习了一下casperjs,CasperJS是一个开源的导航脚本处理和测试工具,基于PhantomJS(前端自动化测试工具)编写.由于casperjs对PhantomJS的依赖性,所以需要 ...
- [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论
前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...
随机推荐
- php批量POST修改
这是一个thinkphp中的批量修改的案例: 如需要删除多项,或者同时修改多项记录 要点: 前端表单中name要加[],如:<input type="hidden" name ...
- PBOC第八部分和第十一部分关于TYPEA总结(一)——初始化和防冲突(ISO14443-3)
PBOC第八部分和第十一部分关于TYPEA总结(一) ——初始化和防冲突(ISO14443-3) 第八部分 与应用无关的非接触式规范 ISO14443(1~4) 第十一部分 非接触式IC卡通讯规范 在 ...
- PCIeの数据链路层与物理层详解
数据链路层(DLL,Data Link Layer)的主要作用是进行链路管理(Link Management).TLP错误校验.Flow Control(流控制)和Link功耗管理.不仅可以接收发送来 ...
- js常见的设计模式一
1.观察者模式 定义一些一对多的关系,将一系列的观察者对目标函数感兴趣,将自己添加进目标函数,当目标函数状态发生改变时,发送通知,以此通知附加在目标上的观察者 /* 目标 */ class subje ...
- ifconfig-push
ifconfig-push中的每一对IP地址表示虚拟客户端和服务器的IP端点.它们必须从连续的/30子网网段中获取(这里是/30表示xxx.xxx.xxx.xxx/30,即子网掩码位数为30),以便于 ...
- linux 上配置swoole
1.首先我们要安装swoole扩展的话,需要把它的包下载下来,下载地址是: https://github.com/swoole/swoole-src 本人qq群也有许多的技术文档,希望可以为你提供一些 ...
- 【串线篇】spring boot整合SpringData JPA
一.SpringData简介 其中SpringData JPA底层基于hibernate 二.整合SpringData JPA JPA: Java Persistence API的简称,中文名Java ...
- 用户界面控件Telerik UI for WinForms发布R2 2019|附下载
Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件.所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌 ...
- CodeMix使用教程:构建自定义DevStyle主题
[MyEclipse CI 2019.4.0安装包下载] DevStyle主题允许开发人员自定义工作台,无论是喜欢带有明亮图标的浅色背景还是带有柔和色彩的神色背景,开发人员都可以将工作台调整到适合的色 ...
- 31.密码学知识-证书CA/PKI-8——2019年12月19日
1. 证书 公钥证书(Public-Key Certificate,PKC)其实和驾照很相似,里面记有姓名.组织.邮箱地址等个人信息,以及属于此人的公钥, 并由认证机构(Certification A ...