学习笔记(2):模拟登陆抽屉网(ajax)

import requests

'''
目的:模拟登陆抽屉网
工具:python3
所用模块:requests ----->模拟浏览器的请求,并且得到返回消息

'''

# 1.登陆地址的获取:
#       抽屉网的登陆页面并不是刷新整个页面,属于ajax局部请求,要首先找到登陆地址,手工模拟登陆,输入错误信息
#       在network中,出现了login项,点开发现页面请求 Request URL: https://dig.chouti.com/login
#       于是乎知道了登陆地址,然后下拉找到请求体,里面包含了我们输入的错误的登陆信息。


# 2.获取cookie:
#      要想获得网站信任,还必须拿到服务器给我们的cookie,而且是被网站授权的,输入正确登陆信息,登陆信息

resp = requests.post(
    url='https://dig.chouti.com/login',
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
    },
    data={
        'phone': '86123455', #注意,按照登陆格式,手机号前面加上86,且为字符串格式
        'password':'1234556',
        'oneMonth': 1
    }
)
cook = resp.cookies.get_dict()  #拿到被授权的cookies,resp.cookies 返回的是一个对象,它的方法get_dict()得到cookies字典
print(cook)
print(resp.status_code)  #状态码 200 访问成功


# 3.我们拿到被授权信任的cookies后就可以绕开登陆,直接进入自己的个人页面,比如说  我的钱包


resp = requests.post(
    url='https://dig.chouti.com/user/pay/account/1',
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
    },
    cookies = cook
)

print(resp.text)  #获取返回的html文本
print(resp.status_code)

#结果返回文本的标题是404,但访问状态却是200,说明被拒绝了访问,但是我们的确是通过输入正确的密码得到了被授权的cookies
#不应该被拒绝访问的,大部分网站的确如此。

# 4.排错:
#       网站大多都是依赖cookies识别用户的,而我们的确是通过输入正确的信息得到了cookies,但却失败了,
#       说明cookies还是出问题了。cookies字典里面有很多项,其中一个必然是必要的,我们要在正确的登陆状态下,将
#       这个字典键找出来。输入正确的登陆信息进入网站,找到文章列表,找到文章的推荐点赞选项,随机点一个,然后分析链接的去处得到
#       https://dig.chouti.com/link/vote?linksId=19901931,然后再在请求体里面找到cookies字典,一个个实验里面的选项。


resp = requests.post(
    url='https://dig.chouti.com/link/vote?linksId=19901931',
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
    },
    cookies = {'gpsd':'3f4e4613fca69b6da0501a5686c36b10'} #先测试cookies的第一个gpsd
)
print(resp.text)

#注意运行前请先将之前的代码注释!
#结果如下
#{"result":{"code":"9999", "message":"推荐成功", "data":{"jid":"cdu_52741899231","likedTime":"1527689471149000","lvCount":"50","nick":"哈罗","uvCount":"3","voteTime":"小于1分钟前"}}}
#推荐成功!
#说明这个gpsd是最重要的,其它不重要,只要通过这个就可以免登陆了。
#然后我们再次运行第二步里面的代码得到的cookies值,发现登陆首页gpsd选项根本不一样,说明我们按照正确登陆方式获取的cookies没被授权,那现在这个正确的cooies
#又是从哪里来的呢?
#我们忽略了一步,我们是直接进入登陆url的,即https://dig.chouti.com/login,但是正常的顺序应该是先登陆首页,再进入登陆页面,正确的cookies也只能在这一步
#产生了;
#如果真如我们分析一样,流程大体如下:
#登陆网站首页 ---> 获取了一个cookies1 ----> 再进入登陆页面输入正确的登陆信息 -----> 获取了我们以为已经被授权的cookies2,
#但其实这里面被动了手脚,真正被信任的还是cookies1里面的gpsd,登陆那一步,只是为了让这个gpsd得到网站的授权。
#可以进行实验。

#将第二步正确登陆获得的gpsd替换掉第4步的gpsd(请先将之前的点赞给取消掉!将第三步代码注释掉)
#发现访问失败。
#所以我们要得到登陆首页的gpsd,然后携带这个gpsd正确登陆,使这个gpsd得到网站信任。

# 5.正确流程如下:(运行时请注释上面代码)

#   一,登陆首页,获取第一个cookies的gpsd
resp = requests.get(
    url='https://dig.chouti.com/',
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
    }

)

cook1 = resp.cookies.get_dict()
print(cook1)


#  二,携带第一次获取的cookies,正确登陆
resp = requests.post(
    url='https://dig.chouti.com/login',
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
    },
    data={
        'phone': '86123243244',
        'password':'12324234',
        'oneMonth': 1
    },
    cookies = cook1
)
cook2 = resp.cookies.get_dict()
# print(cook)
# print(resp.text)
gpsd = cook1['gpsd']
print(gpsd)
print(cook2)

#  三,可以利用已经被授权的cookies的gpsd进行点赞操作
response = requests.post(
    url='https://dig.chouti.com/link/vote?linksId=19901811',
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
    },
    cookies = {'gpsd':cook1.get('gpsd')}

)
print(response.text)
print(response.status_code)

猜你喜欢

转载自blog.csdn.net/a_lazy_zhu/article/details/80517946