其实模拟登陆非常简单,只要在打开网站的同时提交数据就可以了。
下面通过登陆超星网来举例说明如何一步步实现模拟登陆。
1.获取需要提交的数据
使用chrome的Network或者fiddler可以很轻易的得到我们想要的数据,这里使用fiddler举例。
打开fiddler
输入完账户信息和验证码后,为了方便查找,推荐点击清除清空会话记录
点击页面中的登录
可以看到fiddler已经捕捉到了浏览器提交的数据
可以看到点击登录后浏览器提交的数据,经过简单的观察,可以确定登录时提交的是选中的这个
查看右侧的详情了解到提交发法是post,发送了一个form。其中uname是账号,password是密码,numcode是验证码,fid和fidname是机构名,都是明文,处理起来非常方便。
只要照着这个表发送就能够模拟登陆了
在Python的Requests库中form是一个字典
form = { 'pid':' -1', 'pidName':'', 'fid':'机构码', 'fidName':'机构名', 'allowJoin':'0', 'isCheckNumCode':'1', 'f':'0', 'productid':'', 'uname':'账号', 'password':'密码', 'numcode':'验证码', 'verCode':'' }
2.验证码
验证码其实就是一张图片,在你向服务器请求完之后,服务器并不知道你看到了哪一张图,只会将图片的识别码作为一个cookie发送给客户端,只要在提交验证码的时候把cookie同时提交就可以了。
也就是说我们可以先get验证码的图片,再打开登录页面,提交form的同时把验证码的cookie一起提交就能提前知道验证码了。
requests库中的session()能够自动管理cookie,在我看来就像是模拟了一个浏览器
browser = requests.session()在登录页面按F12进入Network,刷新一下
经过判断code?1515406681840就是验证码图片。右侧General的Request Url可以找到地址
Url_1 = 'http://passport2.chaoxing.com/num/code?1515388254551'#验证码地址 Url_2 = 'http://passport2.chaoxing.com/login?refer=http%3A%2F%2Fi.mooc.chaoxing.com'#登录地址 temp = open("valcode.png","wb") temp.write(valcode.content) temp.close() valc = input("输入验证码:") form["numcode"]=str(valc) resp = browser.post(Url_2, headers = headers,data=form) #把返回的页面写入temp_1.html temp = open("temp_1.html","wb") temp.write(resp.content) temp.close()