提前声明:该专栏涉及的所有案例均为学习使用,如有侵权,请联系本人删帖!
一、前言
在前面的文章中,我们直接筛入cookie登录网站来请求网站内容,那么这次我们通过代码自动实现网站的模拟登陆过程。实际上自动化登录,也是一个或多个数据包顺序请求校验的过程。
网站:
aHR0cDovL3d3dy5xaWFuLWd1YS5jb20vP2NobD1iYWlkdS1xaWFuZ3VhY2ktcGlucGFpY2k=
二、网站分析
点击登录。打开F12进行抓包,将日志勾选(防止进入页面,包消失)
输入一个错误的手机号和密码,抓包
- 然后输入正确的账号和密码,会返回一个登录成功的cookie
看到这里,我们可以得到结论。输入一个正确的手机号和密码,然后post提交到该网址,登录成功后服务器下发cookie。
三、代码编写思路
首先,我们模拟登陆post请求的代码,在post请求的时候,我们已经看到一个cookie,该cookie可以固定
然后进入一个页面,携带该cookie,捕获信息
四、完整代码
# -*- coding: utf-8 -*-
import time
import requests
class Login():
def __init__(self):
self.cookie = '_data_chl=key=baidu-qianguaci-pinpaici; ASP.NET_SessionId=ug4rm3gewgv3gqeywbio2pur; Hm_lvt_c6d9cdbaf0b464645ff2ee32a71ea1ae=1634095315,1634095315,1634095502; Hm_lpvt_c6d9cdbaf0b464645ff2ee32a71ea1ae=1634095975;'
def login(self):
"""模拟登陆,生成新cookie"""
url = 'http://api.qian-gua.com//Login/Login'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400',
'cookie': self.cookie
}
data = {
'pwd': "密码",
'tel': "手机号"
}
response = requests.post(url, headers=headers, data=data)
if response.json()['Code'] == 200:
print('登录成功')
cookie_User = response.cookies.get("User")
self.cookie += 'User={}'.format(cookie_User)
else:
print('登录失败')
def check_cookie(self):
"""校验cookie是否有效"""
while True:
url = 'http://api.qian-gua.com/Rank/GetBloggerRank?pageSize=50&pageIndex=1&dateCode=20210518&period=1&originRankType=12&rankType=2&tagId=0'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400',
"cookie": self.cookie
}
response = requests.get(url, headers=headers)
print(response.text)
if response.json()['Code'] == 401:
print('重新开始登录')
self.login()
else:
print('cookie有效')
time.sleep(1000)
if __name__ == '__main__':
l = Login()
l.check_cookie()
成功,第一次cookie不可用,然后触发模拟登陆!然后携带登陆成功的cookie成功返回结果!