pythonrequests模拟登陆带验证码的网站

线圈缠绕机pythonrequests模拟登陆带验证码的⽹站作为之前专利爬⾍的续篇,本篇准备描述如何通过python的requests模块登录
环境准备
python 3.6
requests
chrome尝试
⾸先,我们使⽤chrome尝试登录专利⽹站,并通过network分析各个请求的相关信息。
通过分析network,我们可以看到,⼀次登录操作,有以上相关请求。特别注意的是,以为登录成功后页⾯会刷新,我们需要将Network⼯具栏上的Preserve log勾选上,才能保证network不被刷新掉。
由此我们可以发现,checkLoginTimes-check.shtml和wee_security_check这两次请求像是发送登录校
验请求。
电容笔制作
经过⽐对后我们发现wee_security_check才是想要的结果。
注:以上图⽚中,笔者账号密码是瞎填的,但是j_username和j_password显⽰的内容和笔者写的内容不⼀致,是因为⽹站在前端使⽤了Base64进⾏加密,这⼀点笔者是从⽹站发送的请求中有base64.js这个⽂件发现的,于是尝试过后确实是base64加密。车门限位器
cookies
查看cookies
做过web的朋友可能知道,账号密码验证码登录的时候,经常会使⽤cookie作为同⼀⽤户的标志。于是我们查看⼀下刚才请求的cookies。
为什么要cookies
经验较少的朋友可能乍⼀看会以为IS_LOGIN是cookies的关键,其实不然。
我们先要简单了解⼀下cookies是个啥东西,有经验的朋友可以略过。
“Cookie”是⼩量信息,由⽹络服务器发送出来以存储在⽹络浏览器上,从⽽下次这位独⼀⽆⼆的访客⼜回到该⽹络服务器时,可从该浏览器读回此信息。这是很有⽤的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或⽤户⾸选项(如样式表)。Cookie 是个存储在浏览器⽬录的⽂本⽂件,当浏览器运⾏时,存储在 RAM 中。⼀旦你从该⽹站或⽹络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终⽌的所有 Cookie。(百度百科)
我们知道登录有个⿇烦事就是验证码,这个对于后台来说其实也是个⼩⿇烦,请求⼤家都发,后台怎么知道哪个验证码对应哪个浏览器发的请求?答案就是通过cookies。前端请求验证码的时候后台先⽤Set-Cookie的 response header将⼀个标识符带个前端浏览器,浏览器储存后下次发送登录请求的时候带上之前后台发过来的cookies,后台就知道是对应验证码的结果对不对了。
明确cookie
那么哪个cookie是我们需要的呢,我可以说通过⾁眼观察得知吗~WEE_SID就是我们想要的cookie。
好吧,管他是哪个呢,不管三七⼆⼗⼀全部带上就好了。。。。。
开发
requests发送管理cookie有两种⽅式,⼀种是⼿动携带,放在get,post等请求的参数带上去即可。另⼀种使⽤requests.Session()⾃动管理cookies,我们不需要操⼼。但是第⼆种笔者测试完之后发现好像只有⼀个cookie的情况下是正常的,当有多个cookie的情况。⽐如说这个⽹站,就不⾏了。不知道是什么原因,如有知道的朋友请告知。
这⾥我们就只介绍第⼀种⽅式。
登录流程
第⼀步获取验证码和相应cookies,
验证码的地址通过观察network获得,这⾥不再赘述。
codeurl = 'v/sipopublicsearch/portal/login-showPic.shtml'
valcode = (codeurl)
双面钟
此处cookies已经保存在kies中,接下来我们需要将valcode保存为图⽚。
f = open('valcode.png', 'wb')
# 将response的⼆进制内容写⼊到⽂件中
f.t)
# 关闭⽂件流对象
f.close()
保存图⽚之后,鉴于技术问题暂时还没有做机器识别,只能⽤⼈眼识别了。得知验证码结果后我们Input进来。
code = input('请输⼊验证码:')
data["j_validation_code"] = str(code)
第⼆步发送登录请求
通过观察network我们发现登录请求所带的参数格式如下:
data = {
"j_loginsuccess_url": "",
"j_validation_code": "",
"j_username": base64Name,
"j_password": base64Pass
}
喷淋嘴这⾥⽤户名和密码已经通过base64加密,python中有现成的base64解码编码模块,直接import进来⽤就可以,笔者不再赘述。
checkUrl = 'v/sipopublicsearch/wee/platform/wee_security_check'
resp = requests.post(checkUrl, headers = checkHeader, cookies = requests.utils.dict_from_kies), data=data)
发送过后,我们可以从结果看到已经登录成功。
铸铁工艺
赞赏
⽀付宝

本文发布于:2024-09-22 09:50:59,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/261416.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:请求   验证码   登录   浏览器   知道   发送   朋友
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议