python模拟登陆GDUFE教学一体化平台

爬取的网址:http://jwxt.gdufe.edu.cn/jsxsd/

最近在研究python爬虫,就拿了自己学校的一个相当于教务系统的东西?来模拟登陆了一下。网上查了一下资料,

教务系统好像通常都是爬虫新手&学生的挚爱,因为登陆简单不用验证码等等等。。


其实这个还是挺简单的,但是我在分析HTTP的请求和响应的时候中了一个坑,所以搞了一天。。真是弱,好烦微笑微笑微笑

先说说用到的python库是urllib.request和http.cookiejar。模拟登陆需要使用cookie去保持登陆的状态,若不懂就自行百度。

这里主要想聊一聊如何抓包和分析HTTP请求和响应的消息头。

先看看这个系统的登陆界面:


我就直接登陆然后用360自带的功能进行抓包,看看在登陆的时候模拟器和服务器之间干了些什么。登陆前按F12就可以了:



我们关注Network,里面显示的是抓到的包。看名字第一个就是登陆相关的,点进去看看吧:

这里就是登陆的时候发送和收到的请求和响应消息,有了这些信息,我们就可以模拟浏览器去登陆系统了。


Request Headers:

请求的header在这里不重要,这个系统似乎也没有任何手段去阻拦程序去访问,有些网站就会根据User-Agent去识别你是否浏览器访问。

python就可以根据这个参数伪装成浏览器去访问了。

Form Data:

这里就是登陆的时候需要提交的表单数据,这里只需要提交账号和密码

Response Headers:

这里是服务器响应的消息,Location是重定向的地址。表单提交后登陆成功就会转到这个地址。


这里说说我踩到的坑,看看第一行的Request URL是表单提交请求的URL,也就是说,表单应该提交到这个网址,这里才是程序登陆的入口!!

而不是我一开始给的网址:http://jwxt.gdufe.edu.cn/jsxsd/;考虑一下程序的行为:把消息头表单数据提交到这个网址,它并没有表单处理的功能,

当然就登陆失败了,虽然它还是会返回一个cookie给你,但是使用这个cookie并不能登陆。

下面是代码:

from http import cookiejar
from urllib import request
from urllib import parse

#这个是提交表单的url
url = 'http://jwxt.gdufe.edu.cn/jsxsd/xk/LoginToXkLdap'
file = 'C:/Users/Administrator/Desktop/cookie.txt'
post_data = parse.urlencode({
	'USERNAME':'14251102221',
	'PASSWORD':'291608411'
}).encode(encoding='utf8')

header = {
	'Referer':'http://jwxt.gdufe.edu.cn/jsxsd/',
	'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36'
	}

req = request.Request(url,post_data,header)

#使用cookie创建自己的opener
cookie = cookiejar.CookieJar()
handler = request.HTTPCookieProcessor(cookie)
opener = request.build_opener(handler)
f = opener.open(req)

#登陆成功后保存了cookie,然后就可以访问登陆后的其他url了,这个是课程表的url
gradeURL = 'http://jwxt.gdufe.edu.cn/jsxsd/xskb/xskb_list.do'
result = opener.open(gradeURL)
f = open('C:/Users/Administrator/Desktop/1.html','wb')
f.write(result.read())



猜你喜欢

转载自blog.csdn.net/l_apple8/article/details/55259194
今日推荐