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

news2024/11/18 7:46:17

目录

    • 实现效果
    • 实现思路
      • 登录
      • 查询积分数量
      • 签到
    • 实现代码
    • 总结


欢迎关注 『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爬虫』 专栏,持续更新中
『未完待续』


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1499117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot中实现图片上传功能的两种策略

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

学习Java的第二天

如何使用文本文档在cmd里打印出HelloWorld 1、创建一个文本文档&#xff0c;并命名为HelloWorld&#xff0c;将后缀改为java&#xff08;需要自己去把后缀打开显示出来&#xff09; 2、打开编辑 也可以双击打开 3、在里面写出以下代码 上面红框里为你要打印的语句&#xff0c;…

英伟达板子4----存储满了系统黑屏

记录一个bug&#xff0c;因为最近在做边缘端视频处理的内容&#xff0c;就把视频存储在边端设备&#xff0c;但是发现由于边缘端设备的存储太小了&#xff0c;导致把ubuntu端的存储&#xff08;只有28个Gib&#xff09;给吃满了。 然后搜了一篇博客说重启就能释放一些空间&…

KONG - API转发流程梳理

kong简介 Kong 是一个开源的API网关&#xff0c;集成了服务注册和发现、负载均衡、健康检查等功能&#xff0c;还可以通过插件来提供限流、熔断、监控、日志等能力&#xff0c; 在kong的微服务架构中&#xff0c;kong担当了注册中心的角色&#xff0c;服务提供者(Provider)首…

【b站咸虾米】ES6 Promise的用法,ES7 async/await异步处理同步化,异步处理进化史

课程地址&#xff1a;【ES6 Promise的用法&#xff0c;ES7 async/await异步处理同步化&#xff0c;异步处理进化史】 https://www.bilibili.com/video/BV1XW4y1v7Md/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 图文地址&#xff1a;https://www.b…

Java 集合类的高级特性介绍

在 Java 编程中&#xff0c;了解集合类的高级特性对于编写高效和可维护的代码至关重要。以下是一些你应该知道的 Java 集合类的高级特性&#xff0c;以及简单的例子来说明它们的用法。 1. 迭代器&#xff08;Iterators&#xff09;和列表迭代器&#xff08;ListIterators&#…

算法归纳【数组篇】

目录 二分查找1. 前提条件&#xff1a;2. 二分查找边界 2.移除元素有序数组的平方长度最小的子数组59.螺旋矩阵II54. 螺旋矩阵 二分查找 参考链接 https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF 1. 前提条件&#xff1a; 数…

git revert 撤回之前的几个指定的提交

文章目录 Intro操作命令-n 选项 参考 Intro 在开发过程中&#xff0c;有的时候一开始只是一个小需求&#xff0c;可以改着改着事情超出了控制&#xff0c;比如说我一开始只是想调整一个依赖包的版本&#xff0c;可是改到后来类库不兼容甚至导致项目无法启动。 这个时候我就想&…

华为OD机试 - 服务器广播 - 矩阵(Java 2024 C卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷…

从数据到智能:探讨大数据在AI领域的核心作用

前言 大数据和人工智能已经成为当今社会的两大热门话题。它们之间究竟有何关系&#xff1f;又如何在各个领域发挥着重要作用&#xff1f; 概念区别与联系 一、大数据与人工智能的基本概念 大数据&#xff0c;顾名思义&#xff0c;指的是海量的、类型繁多的数据集合。这些数据…

万界星空科技MES系统中的车间管理的作用

在了解mes生产管理系统的作用包括哪些方面之前&#xff0c;我们先来了解一下作为生产管理信息化的关键部分&#xff0c;车间管理系统包含哪几个部分&#xff1a;一、mes系统中的车间管理通常包含以下部分&#xff1a; 1、设备管理&#xff1a;用于监控车间内的设备状态&#xf…

【日常聊聊】2024 年 AI 辅助研发趋势

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 方向一&#xff1a;AI辅助研发的技术进展 方向二&#xff1a;行业应用案例 方向三&#xff1a; 面临的挑战与机遇 方向四&a…

学习人工智能:吴恩达《AI for everyone》2019 第3周:实现智能音箱和自动驾驶的几个步骤;无监督学习;增强学习

吴恩达 Andrew Ng&#xff0c; 斯坦福大学前教授&#xff0c;Google Brain项目发起人、领导者。 Coursera 的联合创始人和联合主席&#xff0c;在 Coursera 上有十万用户的《机器学习》课程&#xff1b;斯坦福大学计算机科学前教授。百度前副总裁、前首席科学家&#xff1b;谷…

【深度优先】【图论】【C++算法】2045. 到达目的地的第二短时间

作者推荐 视频算法专题 LeetCode2045. 到达目的地的第二短时间 城市用一个 双向连通 图表示&#xff0c;图中有 n 个节点&#xff0c;从 1 到 n 编号&#xff08;包含 1 和 n&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中每个 edges[i] [ui, vi] 表…

开源分子对接程序rDock使用方法(1)-Docking in 3 steps

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、Docking in 3 steps 标准对接rDock 的基本对接步骤及注意事项 二、 三步对接案例Step 1. 结构文件准备Step 2. 产生对接位点Step 3. 运行分子对接3.1 检查输入文件3.2 测试-只进行打分3.3 运行…

Linux/Validation

Enumeration nmap 第一次扫描发现系统对外开放了22&#xff0c;80&#xff0c;4566和8080端口&#xff0c;端口详细信息如下 系统对外开放了4个端口&#xff0c;从nmap的结果来看&#xff0c;8080无法访问&#xff0c;手动尝试后4566也无法访问&#xff0c;只能从80端口开始 …

用MATLAB求解微分方程

第一篇为 基础概念 &#xff0c;第二篇为 R-K法的具体实现方法。 &#xff08;一&#xff09;常微分方程的MATLAB求解 概要&#xff1a; 常微分方程的MATLAB求解分为解析解、数值解解析解(只有少数微分方程组有解析解)&#xff1a;dsolve函数数值解&#xff1a;solver函数&a…

Python实例☞数据类型及运算符案例

实例一&#xff1a; ❶要求☞从键盘获取一个4位整数&#xff0c;并分别输出个、十、百、千位 ❷程序代码☞ ①第一种方法 print(请输入一个4位整数&#xff1a;) xeval(input()) print(个位数为&#xff1a;,x%10) print(十位数为&#xff1a;,(x//10)%10) print(百位数为&am…

Transformer中的FeedForward

Transformer中的FeedForward flyfish class PoswiseFeedForwardNet(nn.Module):def __init__(self, d_ff2048):super(PoswiseFeedForwardNet, self).__init__()# 定义一维卷积层 1&#xff0c;用于将输入映射到更高维度self.conv1 nn.Conv1d(in_channelsd_embedding, out_ch…

自律篇001-养成自律的秘密武器1-目标规划表

&#x1f680;以前在某书上看到一些博主非常自律&#xff0c;比如每天5点多起床看书&#xff0c;或者每天坚持健身&#xff0c;直到练出马甲线&#xff0c;还有一边工作一边考研等等&#xff0c;自己也曾尝试过做一些目标规划&#xff0c;但结果都不尽人意。写计划的时候往往信…