Python爬虫:ad广告引擎的模拟登录

news/2024/7/19 11:47:27 标签: python, 爬虫, 开发语言

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️
🐴作者:秋无之地

🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。

🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、留言💬、关注🤝,关注必回关

一、确定目标

1、先打开目标网站,找到目标所在的页面

2、找到所需的参数

根据上图可知,整个登录流程需要的参数有:账号、密码、验证码,而且验证码还是图形算式验证码。

3、了解登录流程,找到对应的接口

打开F12 ,刷新页面可以看到验证码的生成接口,返回的是验证码的图片信息和一个uuid的参数

4、测试登录,找到登录的接口

所以,整个登录的流程一共就2个接口,分别如下:

生成验证码接口:

https://ad.clroi.com/prod-api/code

登录接口:

https://ad.clroi.com/prod-api/auth/login

二、分析接口

1、生成验证码接口

接口的请求方式为:get

请求头参数也是常见的几个,没有加密的参数

Host、Referer、User-Agent:建议必带

 返回的参数:

1、img:验证码图片,不过需要加前缀"data:image/gif;base64,"才能组成完整的图片链接

2、uuid:唯一建,用于登录接口的请求参数

python">#返回参数:
{
    "msg": "操作成功",
    "img": "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",
    "code": 200,
    "captchaOnOff": true,
    "uuid": "50d10c7521ad42f8b313aa8bb19c2b04"
}

这是,验证码接口就解决了,简单吧!

2、登录接口

接口的请求方式为:post

请求头参数也是常见的几个,没有加密的参数

Host、Referer、User-Agent:建议必带

请求体参数:

1、code:验证码的结果

2、password:密码

3、username:账号

4、uuid:验证码接口返回的参数

这时候有人会问了,上面验证码接口的一个图片链接,现在传递的参数是一个字符串,怎么办?

方法有好多种:

  1. 找打码平台,例如百度AI打码
  2. 使用ocr识别(需要训练)
  3. 将图片截图发到手机里,人工识别后回传信息给程序继续下一步登录

返回参数:

1、access_token:登录的token,需要加前缀"Bearer "后续请求数据接口才能用

2、code:200表示成功,500表示失败

三、代码编写

1、获取验证码信息

python">    def get_code(self):
        '''
        获取登录验证码
        :return:
        '''
        try:
            url = "https://ad.clroi.com/prod-api/code"
            header = {
                "Referer": "https://ad.clroi.com/login?redirect=%2Findex",
                "Host":"ad.clroi.com",
                "User-Agent":self.ua,
                "Accept":"application/json, text/plain, */*",
            }
            resp = requests.get(url,headers=header).json()
            if resp['code']==200:
                code_img = "data:image/gif;base64," + resp['img']
                code_uuid = resp['uuid']
                #破解验证码
                code_num = self.down_code_img(code_img=code_img)
                print("验证码:",code_num," ,uuid:",code_uuid)
                auth = self.get_token(login_code=code_num, uuid=code_uuid)
            else:
                auth = ""
            return auth
        except Exception as e:
            print(e)
            return ""

2、登录获取token

    def get_token(self,login_code=None,uuid=None):
        '''
        获取token
        :return:
        '''
        try:
            url = "https://ad.clroi.com/prod-api/auth/login"
            header = {
                "User-Agent":self.ua,
                "Content-Type":"application/json;charset=UTF-8",
            }
            data = {"username": "XXXX", "password": "XXXX", "code": login_code, "uuid": uuid}
            resp = requests.post(url,headers=header,json=data).json()
            print(resp)
            if resp['code']==200:
                auth = "Bearer " + resp['data']['access_token']
                return auth
        except Exception as e:
            print(e)

四、总结

模拟登录的步骤不难,主要是以下三点:

  1. 确定目标
  2. 分析接口
  3. 代码编写

版权声明

本文章版权归作者所有,未经作者允许禁止任何转载、采集,作者保留一切追究的权利。


http://www.niftyadmin.cn/n/5108274.html

相关文章

Vue基础语法2事件修饰符按键修饰符常用控件自定义指令全局样式绑定

目录 1.样式绑定 2. 事件修饰符 3. 按键修饰符 4. 常用控件 4.1 常用控件示例 4.2 修饰符 5. 自定义指令 5.1 局部 5.2 全局 1.样式绑定 class绑定 使用方式:v-bind:,expression的类型:字符串、数组、对象style绑定 v-bind:style&q…

node 第十天 原生node封装一个简易的服务器

原生node封装一个简易的服务器, 把前面几天的知识揉和起来做一个服务器基础实现, 首页访问, 静态资源服务器, 特定接口封装, 404app.js 服务器入口文件 app.js node app.js即可启动服务器 const { start } require(./modules/server); start();require_modules.js 整合模块导…

怎么从A和B仓库执行分别fetch操作?

目录 1.问题2.描述3.解决问题 1.问题 我希望从A仓库拉代码后推送到B仓库,结果A仓库代码新增分支后 在执行fetch时默认仓库地址为B仓库,导致fetch失败。 2.描述 在实际项目开发中我们可能会出现需要将同一个服务的代码推送到不同的代码仓库&#xff0c…

xxl-job任务调度2.0.2升级到2.3.0版本,执行器改造过程中经验总结

xxl-job任务调度2.0.2升级到2.3.0版本 一、背景二、开始改造1、修改pom.xml2、修改Handler3、启动服务并验证4、解决异常5、再次启动服务并验证 一、背景 现在要对一批老项目中的执行器进行升级,原来老项目中的执行器,依赖的任务调度中心xxl-job版本是2…

【Python机器学习】sklearn.datasets样本生成操作

如何在没有真实数据的情况下,依然能够测试和优化机器学习模型? 在机器学习的实验或研究中,有时候手头并没有合适的数据集进行模型训练和测试。这时候合成或模拟数据集就显得尤为重要。sklearn.datasets模块就是这样一个强大的工具,它提供了一系列函数,不仅可以用于生成各…

行业追踪,2023-10-20

自动复盘 2023-10-20 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

牛客WY15 幸运的袋子 C++实现

幸运的袋子 袋子里的数字和大于数字积,才会是一个幸运的袋子。从这句话中,我们可以得到一个消息,也就是袋子里的数字必须要有1(因为是袋子里全是正整数)。 由这个条件,我们很容易想到先进行排序&#xff0…

协同过滤推荐算法UserCF、ItemCF

目录 相似度计算基于用户的协同过滤(UserCF)算法评估基于物品的协同过滤(ItemCF)协同过滤算法的权重改进协同过滤算法的问题分析思考学习参考 相似度计算 杰卡德(Jaccard)相似系数 Jaccard 系数是衡量两个…