我只能算会一点点的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的技术贴来看