最近不太忙所以就把上次刚学python时,没能成功爬取教务系统成绩的代码又重新写了一下,但是这一写就是一段时间,其中想过很多方法,又尝试了很多方法,这过程中也摸索学到了一点知识,所以来总结一下吧。
首先打开矿大教务系统登录主页,先分析一下网页。
首先分析网站源代码
下面根据使用下方网址通过浏览器f12登陆进去后可以看到如下图所示的信息其中form表单有一个csrftoken,还有加密了的密码,所以简单的post用户名密码是登陆不进去网站的。
http://202.119.200.202/jwglxt/xtgl/login_slogin.html
右键查看源代码可以看到首先在密码处用了autocomplete=”off”,防止浏览器自动填充密码,这或许就是我用splinter一到密码处就输不进去报错的原因吧。或许也不是,毕竟selenium还是可以成功输入的。。。
然后还可以看到此处用了一个csrftoken,可以防止csrf攻击,这也是导致了我想先登录主页保存cookies在通过分析直接跳到得到的成绩页面来爬取成绩失败的原因。所以只能考虑直接访问成绩页面跳转到登录页面,登录成功后便可以爬取到成绩。
具体怎么找到成绩页面就是根据谷歌自带的工具F12一层一层看一下就能找到,具体不详细描述了。url如下。
http://202.119.206.62/jwglxt/cjcx/cjcx_cxDgXscj.htmldoType=query&gnmkdm=N305005
<div class="row sl_log_bor4">
<div class="col-sm-8 hidden-xs sl_log_lf">
<img class="img-responsive" src="http://202.119.206.62:80/zftal-ui-v5-1.0.2/assets/images/login_bg_pic.jpg" />
</div>
<div class="col-sm-4 sl_log_rt">
<form class="form-horizontal" role="form" action="/jwglxt/xtgl/login_slogin.html" method="post">
<!-- 用了csrftoken防止csrf -->
<input type="hidden" id="csrftoken" name="csrftoken" value="d6f6b735-2438-4476-a520-a4a7a237d110,d6f6b73524384476a520a4a7a237d110"/>
<h5>用户登录</h5>
<!-- 防止浏览器自动填充密码 -->
<input type="text" style="display: none;" autocomplete=