利用cookie登录知乎详解个人总结。新手向

利用cookie登录知乎详解个人总结。新手向

直接进入正题,在自动化测试或者爬虫登录网站时有两种方法,一种是破解验证码进行登录。第二种是利用cookie登录。我们直接看第二种,首先我理解的cookie是一种文本文件保存在自己的电脑上,为了方便用户下次登录时可以不用输入验证码和密码账号,从而登录成功。所以为了登录知乎,首先要先观察登录的每个请求和请求的cookie,还有验证码代表的请求。
先看一下知乎的登陆界面
这是初始登录界面,我们可以看到有三个请求,并且注意此时并没有出现验证码
可以很清晰的看到初始登录没有验证码,而且有三个请求,分别是batch、captcha,而captcha的意思是验证码,然后我们具体看这个请求的回应,
回应是false
其实,当回应是false的时候,就不会显示验证码,如果不信,你自己可以多试一试,有验证码的时候都是true,也就是说,如果我们要想让验证码不出现的话,必须让这个请求的回应是false,而回应是false的情况下,一定是这个网站我们经常去或者说我们保存过cookie,所以我们在编写爬虫或者自动化测试的时候,一定要在这个请求中加入cookie。

既然上面解决了怎样不出现验证码,我们继续思考登录,显而易见我们需要点击登录来找到与登录有关的请求,如下图
sing_in是登录的请求
作为登录一定是post请求,而且在编写程序的时候一定要完善这个请求的请求头,具体就是把你这个登录请求的请求头复制粘贴过去,另外既然是请求一定会有from_data(他的content_type要求的是form),同样也是把表单粘贴过去
具体看下面代码的注释

form_data="a8H0c79qkLnm2LF0z_pKg9H92Ltxg6O1XGO12rN0cT2tJvS8XLp1DhHKEMVVoBH0sTYhxU9qkLk12LF0z0pMebw1shoYi9omEqYhggHMcvOOsBOB8BF0g6S0gLOfkComBvCmevgqkLP9F9e0zMNmUBHqkLnm2Lf8PqxGQJe8ST2t2TY0Pwo1bqcGXq2tHhomGqoMUDgqkLfxr72088Yy2Qrqr8FXPhYq8LP924_BJwx9kCSMsBF0g4U8Uhxx2Ltq8MY02HUqeTFxbMFBZqx02ALy6XSpnwY88Tx0ee98r7Fm2LfB8CpGU9eBDqppkLn8zG3ZchL1iDpuJvS8EqYhggHMcvOOSTYh1XY0bTuq6XFX67Yqm_e0giCmU9VOgcO1KBF0g6HM-GVO2wxMEqYhgDCKevgVEwNMqBF0giU0gutpr0YBmXNqgq982TNXNqtqfXY8SQr8o8SYFq28EqYhHqeVebSYDrS8"
#form_data就是账号密码加密后
ession=requests.session()
session.headers['user-agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
session.headers['content-type']='application/x-www-form-urlencoded'
session.headers['x-zse-83']='3_2.0'
session.post("https://www.zhihu.com/udid")
#user-agent用来指明此次浏览是由浏览器想服务器发出的,而不是爬虫
#content——type指明提交的表单是什么类型,除此之外还有json,data文件等,可以理解成这次post请求文体是什么文体,如果不加,就会看不懂提交的信息
#x-zse-83上面用来指出浏览器版本,如果不加,就会有unicode(代码运行结果是/*****/*****,这种格式是Unicode编码,网上有解码器)解码后显示版本过低,请升级客户端

基本到这时应该大差不差就可以登陆进去了,但是说几点注意的,和一个方法
每次登陆的时候,最好用session会话管理,会话管理通俗来说就是,客户端的每一个请求有时会有重复的部分,比如上文关于验证码的请求的请求头和登录请求头有许多相似,还有cookie等等,使用session可以节省一大波时间,具体用法,看我下面完整代码估计就能看懂了。

然后就是当你复制粘贴验证码的cookie发送captch请求后,然后发送登录请求。这样会有时间限制,就是等你重新运行程序后它会报给你验证码过期,这个问题的根本在于每次captch请求的cookie都不完全相同,每一种cookie代表一种验证码,如果想要一劳永逸,就要找到在captch请求之前的请求,先在开发者工具中清楚浏览器的cookie,点击鼠标右键,然后清除cookie,然后由于验证码是服务器端给的,所以我们可以点击开发者工具栏的XHR,来专门找到与服务器交互的请求
多出个uid请求
点开uid请求发现它的回应头中有set_cookie字样,说明了验证码的cookie就是由它来设定的,所以如此一来,一切就容易了
整理一下逻辑
1.首先建立session会话
2.发送uid请求
3.发送captch(验证码)请求,这时的captch就不需要带上cookie了,因为2步骤已经设置了cookie
4.发送sing_in请求,注意要带上form_data
一下是完整代码:

from requests import Response, Session
url="https://www.zhihu.com/api/v3/oauth/sign_in"
form_data="a8H0c79qkLnm2LF0z_pKg9H92Ltxg6O1XGO12rN0cT2tJvS8XLp1DhHKEMVVoBH0sTYhxU9qkLk12LF0z0pMebw1shoYi9omEqYhggHMcvOOsBOB8BF0g6S0gLOfkComBvCmevgqkLP9F9e0zMNmUBHqkLnm2Lf8PqxGQJe8ST2t2TY0Pwo1bqcGXq2tHhomGqoMUDgqkLfxr72088Yy2Qrqr8FXPhYq8LP924_BJwx9kCSMsBF0g4U8Uhxx2Ltq8MY02HUqeTFxbMFBZqx02ALy6XSpnwY88Tx0ee98r7Fm2LfB8CpGU9eBDqppkLn8zG3ZchL1iDpuJvS8EqYhggHMcvOOSTYh1XY0bTuq6XFX67Yqm_e0giCmU9VOgcO1KBF0g6HM-GVO2wxMEqYhgDCKevgVEwNMqBF0giU0gutpr0YBmXNqgq982TNXNqtqfXY8SQr8o8SYFq28EqYhHqeVebSYDrS8"
#form_data就是账号密码加密后,可以先手动登录自己的账号,然后把正确的复制下来
session=requests.session()
session.headers['user-agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
session.headers['content-type']='application/x-www-form-urlencoded'
session.headers['x-zse-83']='3_2.0'
session.post("https://www.zhihu.com/udid")
#user-agent用来指明此次浏览是由浏览器想服务器发出的,而不是爬虫
#content——type指明提交的表单是什么类型,除此之外还有json,data文件等,可以理解成这次post请求文体是什么文体,如果不加,就会看不懂提交的信息
#上面用来指出浏览器版本,如果不加,就会有unicode显示版本过低,请升级客户端
#session.headers['cookie']='_zap=702c95d6-feed-4114-a522-33b08af6a806; d_c0="ALAdYBN-ARGPTiUGqEmJ9IcLWHGVsbzFcgc=|1584937934"; _xsrf=ryoIdmYN2J3LECxqiKLL1LEEDNe0ly60; _ga=GA1.2.1683595909.1585124085; tst=r; q_c1=4a655c30fa21447e8aaf9affa7f17c64|1587868087000|1587868087000; _gid=GA1.2.1146795363.1588664809; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1588812544,1588814039,1588814541,1588815259; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1588815259; _gat_gtag_UA_149949619_1=1; capsion_ticket="2|1:0|10:1588815259|14:capsion_ticket|44:YWQ5ZjgwN2ZiNDUzNDBkZGE5YzYxODkyOTJhNjBjOWY=|69fbb345abc193702995ea9d5aa1991f6f33b81884b5f1fd718dd6a69b490c3a"; SESSIONID=Y39DICx2MAItzpMAjJdidKyarRsr3wuxsDokFOBjCV3; KLBRSID=d6f775bb0765885473b0cba3a5fa9c12|1588815260|1588811046; JOID=VlocBUw-sTusXkY_bTwULx21AAFxYYkN6RQDTFBw9nnXJTV0J6_QhvBbSztjKlj_AOXyjuFWEn7DYFdscdn3KzY=; osd=U1gVBEg7szKtWkM9ZD0QKh-8AQV0Y4AM7REBRVF083veJDFxJabRgvVZQjpnL1r2AeH3jOhXFnvBaVZodNv-KjI='
info=session.get("https://www.zhihu.com/api/v3/oauth/captcha?lang=cn")#当这个请求为false的时候没有验证码
print(info.text)
result=session.post(url=url,data=form_data)
print(result.text)
infomation=session.get('https://www.zhihu.com/')
print(infomation.text )

以上就是利用cookie登录知乎的方法了,有问题可以评论留言,欢迎一起讨论。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值