Python + Requests 模拟登陆(含验证码) - Go语言中文社区

Python + Requests 模拟登陆(含验证码)


其实模拟登陆非常简单,只要在打开网站的同时提交数据就可以了。

下面通过登陆超星网来举例说明如何一步步实现模拟登陆。

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()









版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_15718805/article/details/79004379
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:33:42
  • 阅读 ( 1593 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢