当前位置:首页 > 知识 > 

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

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

利用cookie登录知乎详解个人总结 新手向 先看一下知乎的登陆界面 这是初始登录界面,我们可以看到有三个请求,并且注意此时并没有出现验证码 可以很清晰的看到初始登录没有验证码

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

先看一下知乎的登陆界面

这是初始登录界面,我们可以看到有三个请求,并且注意此时并没有出现验证码

可以很清晰的看到初始登录没有验证码,而且有三个请求,分别是batch、captcha,而captcha的意思是验证码,然后我们具体看这个请求的回应,

回应是false

其实,当回应是false的时候,就不会显示验证码,如果不信,你自己可以多试一试,有验证码的时候都是true,也就是说,如果我们要想让验证码不出现的话,必须让这个请求的回应是false,而回应是false的情况下,一定是这个网站我们经常去或者说我们保存过cookie,所以我们在编写爬虫或者自动化测试的时候,一定要在这个请求中加入cookie。

既然上面解决了怎样不出现验证码,我们继续思考登录,显而易见我们需要点击登录来找到与登录有关的请求,如下图

sing_in是登录的请求

作为登录一定是post请求,而且在编写程序的时候一定要完善这个请求的请求头,具体就是把你这个登录请求的请求头复制粘贴过去,另外既然是请求一定会有from_data(他的content_type要求的是form),同样也是把表单粘贴过去

具体看下面代码的注释

```python

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(

#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

一下是完整代码:

```python

from requests import Response, Session

url=

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(

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

print(info.text)

result=session.post(url=url,data=form_data)

print(result.text)

infomation=session.get(

print(infomation.text )

```

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

以上就是(利用cookie登录知乎详解个人总结 新手向)全部内容,收藏起来下次访问不迷路!