关于casperjs

我只能算会一点点的python,写一点点的爬虫……之前写爬虫都是分析http,然后模拟请求获取相关的数据。。但是已经好久没再写这个打杂了。前两天学弟找我,,说之前的代码不能用了。。我表示非常心塞。。。。。查了几个小时发现就是学校把域名变了=  =。然后意识到这样的代码灵活度有点低,所以想着不然把casperjs学了,不再用这种老套的方法了。于是接触了下casperjs。

感觉性能方面貌似没有python快,但是功能确实好强大,可以截屏,模拟点击什么的,这样只要前端代码没有变,就都不用分析后端的数据交互过程了,直接走走走起就好。

本来想学学,然后顺便把工作室的爬虫都换掉的。。。然而遇坑不出。。。。所以打算先搁置下╮(╯_╰)╭

但是思路什么的还是要记一下的嘛,以后有机会还是要接触的。。。。其实网上主要的教程都是casperjs的官网上的教程,英语还是要好好捡起来的,因为现在看到英文多的就不是太顺畅。。。

0.由于我们学校的个人门户安全证书过期了(就是那种chrome都不让我打开网页的那种过期再见),所以在命令行运行代码的时候要加上参数

--ignore-ssl-errors=true --web-security=false

当然我觉得好像只要有一个参数就可以了。。但是google出来好像两种方法都有。。所以蛮用

1.先是创建一个casper实例,在create的时候可以进行配置,当然也可以不配。。。下面两个参数配置了可以打开debug模式,,这样出错了比较好找。。刚开始的时候都不知道哪里错了。。想想就心塞。。

<span style="font-size:14px;">var casper = require('casper').create({
	verbose: true,
    <span style="white-space:pre">	</span>logLevel: "debug"
});</span>

2.指定一个网址,下面的url是我们学校个人门户的地址。要输入用户名和密码。然后就是表单不需要分析post的时候提交表单,就当做你在使用网页就好了。其中的username和password是表单form#fm1中input的name。对于表单的分析,一般都是靠name来区分(相当于id)

<span style="font-size:14px;">casper.start(url,function(){
	this.echo(this.getCurrentUrl());
	this.fill('form#fm1',{
		'username':'xxxxx',
		'password':'xxxxx'
	},true);  //输入用户名和密码,fill的第三个参数是true表示现在就提交表单(等于点击登录按钮)
});</span>
3.登录个人门户之后要点击教务处的按钮进入教务处。由于进入之后需要加载一下。。。所以可以用waitForSelector(selector,function)来等待你所需要的元素,然后再进行操作。之前不知道的时候直接用wait来等待。。。这样太硬杠了。。。不过waitForSelector的等待时间不能抄5秒,过期了就停止了。由于点击教务处按钮的时候,会打开新页面,貌似我还不知道怎么获取新页面。。所以就先获得要打开的url,用thenopen来打开新页面

<span style="font-size:14px;">casper.then(function(){
	this.waitForSelector('a[djsl="60886"]',function(){
		var url = this.getElementAttribute('a[djsl="60886"]', 'href'); 
		this.thenOpen(url, function(){
			this.waitForSelector("frame[name='frmbody']",function(){
				this.echo(this.getCurrentUrl());
			});
		});
	});
});
</span>
4.成功登陆之后自然要截图一张以示纪念=v=。之前没有接触过frame和iframe(捂脸)…… 因为frame里面有自己的html,所以在控制台里面通过id来找元素是非常不明智的,因为id如果在另外一个frame里面是根本找不到的。。。之前不知道。。。发现通过id找元素一直找不到。。。所以可以通过this.page.switchToChildFrame(frame_name)来切换frame,这样就可以正常找元素啦。

<span style="font-size:14px;">casper.then(function(){
	this.capture("jwc123.jpg");

	this.page.switchToChildFrame("frmbody");
	this.echo(this.getElementInfo("#memuBarText2"));

	this.click("#memuBarText2");
	this.echo("clicking");
});</span>
5.就这样点击了两个。。。第一个是课程安排。。第二个是考试安排表。。。然而点到考试安排表的时候。。旁边应该要出现的表格却没有出现。。。简直绝望的我。。。已经不知道哪里错了。。。。。所以就在这里夭折惹。。。。

打算有空了扒一点casperjs的技术贴来看




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值