目录
- 实现效果
- 实现思路
- 登录
- 查询积分数量
- 签到
- 实现代码
- 总结
欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
实现效果
实现思路
登录
f12 打开控制台,进入网络清除所有信息后点击登录按钮
通过搜索login(通用写法)/你自己的用户名密码(有些网页没有加密用户名密码的情况),得到了cookie
headers = {'cookie': 'xxxxxxxxxx','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.70 Safari/537.36'}session = requests.session()# 1.登录login_url = 'https://comicai.ai/signin' # 登录urlrep = session.get(url=login_url, headers=headers) # rep是返回的网页源码# 检查响应状态码if rep.status_code == 200:# 获取文本格式的响应数据data_text = rep.text# print("rep-文本格式数据:", data_text) #<Response [200]>else:print("请求失败")
查询积分数量
- 进行分析.我们看到一个积分
- 右键查看网页源码,发现找不到1494,显然数据要靠请求得到,不是写在网页里的,积分显然是在网页加载好后就出现了,我们f5刷新网页,抓包获取积分的请求,得知了
mana
表示积分1494的数值也对得上.
- 得到了请求网址
check_mark_url = 'https://api.comicai.ai/api/v1/user/info'
- 得到了请求标头
# 2.查看分数check_mark_url = 'https://api.comicai.ai/api/v1/user/info'headers = {'Accept': 'application/json, text/plain, */*','Cache-Control': 'no-cache','Origin': 'https://comicai.ai','Referer': 'https://comicai.ai/dashboard','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-site','Token': 'xxxxxxxxxxxxxxxx',#没有Token 会导致{"code":"AUTH_FAILED","message":"auth failed"}{'code': 'AUTH_FAILED', 'message': 'auth failed'}'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.70 Safari/537.36'}mark_rep = requests.get(check_mark_url, headers=headers)if mark_rep.status_code == 200:# 请求成功# 获取文本格式的响应数据# data_text = mark_rep.text# print("mark_rep-文本格式数据:{}".format(data_text) ) #<Response [200]>data_json = mark_rep.json()print("data_json-文本格式数据:{}".format(data_json))asset_mana = data_json['data']['asset']['mana']print("asset_mana-签到前的积分数:{}".format(asset_mana))else:# 请求失败print(f"签到前查询积分失败,状态码:{mark_rep.status_code}")
签到
准备抓包
- 在我们完成签到后,搜索签到后的积分数
1495
可得到 sign是我们完成签到的请求
- 得到请求url
sign_url = "https://api.comicai.ai/api/v1/user/sign"
-
得到请求标头,装进header,这里要注意,这么多的请求标头,哪些参数是必须关键的呢?一个个试探,你删掉一个,看看能不能请求成功,最后发现
"Content-Type","Token","User-Agent"
不可缺少,如果缺少了"Content-Type"
,遇到报错,其中涉及的问题可参考[请求失败返回 ‘message‘: ‘unregister Content-Type: ] -
缺少了
"Content-Type"
headers = {"Content-Type": "application/json", #如果注释了本行代码 请求失败 {'code': 'CODEC', 'message': 'unregister Content-Type: '}"Token": "xxxxxxxxxxxxxxxxxxxxxxx","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36"}data = "{}"response = requests.post(sign_url, headers=headers, data=data)
- 签到时还要记得处理已经签到过的情况,你在签到过的情况下再次请求可得返回的
code
值为USER_REPEAT_SIGN
# 3.签到sign_url = "https://api.comicai.ai/api/v1/user/sign"headers = {"Content-Type": "application/json", #如果注释了本行代码 请求失败 {'code': 'CODEC', 'message': 'unregister Content-Type: '}"Token": "xxxxxxxxxxxxxxxxxx","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36"}data = "{}"response = requests.post(sign_url, headers=headers, data=data)if response.status_code == 200:result = json.loads(response.text)if result.get("code") == "Success":mana = result["data"]["asset"]["mana"]print(f"签到成功,签到后得到的积分数 mana 值为: {mana}")elif result.get("code") == "USER_REPEAT_SIGN":print(f"今天已经签到过了,退出")else:print("请求失败")print(result)else:print(f"请求出错,错误码: {response.status_code}")
实现代码
import json
import requestsdef dailyTask():headers = {'cookie': 'xxxxxxx','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.70 Safari/537.36'}session = requests.session()# 1.登录login_url = 'https://comicai.ai/signin' # 登录urlrep = session.get(url=login_url, headers=headers) # rep是返回的网页源码# 检查响应状态码if rep.status_code == 200:# 获取文本格式的响应数据data_text = rep.text# print("rep-文本格式数据:", data_text) #<Response [200]>else:print("请求失败")# 2.查看分数check_mark_url = 'https://api.comicai.ai/api/v1/user/info'headers = {'Accept': 'application/json, text/plain, */*','Cache-Control': 'no-cache','Origin': 'https://comicai.ai','Referer': 'https://comicai.ai/dashboard','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-site','Token': 'xxxxxxxxxxxxxxxxx',#没有Token 会导致{"code":"AUTH_FAILED","message":"auth failed"}{'code': 'AUTH_FAILED', 'message': 'auth failed'}'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.70 Safari/537.36'}mark_rep = requests.get(check_mark_url, headers=headers)if mark_rep.status_code == 200:# 请求成功# 获取文本格式的响应数据# data_text = mark_rep.text# print("mark_rep-文本格式数据:{}".format(data_text) ) #<Response [200]>data_json = mark_rep.json()print("data_json-文本格式数据:{}".format(data_json))asset_mana = data_json['data']['asset']['mana']print("asset_mana-签到前的积分数:{}".format(asset_mana))else:# 请求失败print(f"签到前查询积分失败,状态码:{mark_rep.status_code}")# 3.签到sign_url = "https://api.comicai.ai/api/v1/user/sign"headers = {"Content-Type": "application/json", #如果注释了本行代码 请求失败 {'code': 'CODEC', 'message': 'unregister Content-Type: '}"Token": "xxxxxxxxxxxxxx","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36"}data = "{}"response = requests.post(sign_url, headers=headers, data=data)if response.status_code == 200:result = json.loads(response.text)if result.get("code") == "Success":mana = result["data"]["asset"]["mana"]print(f"签到成功,签到后得到的积分数 mana 值为: {mana}")elif result.get("code") == "USER_REPEAT_SIGN":print(f"今天已经签到过了,退出")else:print("请求失败")print(result)else:print(f"请求出错,错误码: {response.status_code}")if __name__ == '__main__':dailyTask()print("执行完毕~")
总结
大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!
版权声明:
发现你走远了@mzh原创作品,转载必须标注原文链接
Copyright 2023 mzh
Crated:2023-3-1
欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』