『python爬虫』requests实战-comicai绘画ai通过cookie签到(保姆级图文)

本文讲述了如何通过Python的requests库进行ComicAI网站登录、查询积分和签到,涉及了HTTP请求头、cookie管理和API调用。
摘要由CSDN通过智能技术生成


欢迎关注 『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'  # 登录url
    rep = 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 requests

def 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'  # 登录url
    rep = 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爬虫』 专栏,持续更新中
『未完待续』


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值