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

news2024/9/21 0:45:52

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

🐴简介: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:唯一建,用于登录接口的请求参数

#返回参数:
{
    "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、获取验证码信息

    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.coloradmin.cn/o/1116808.html

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

相关文章

Ubuntu桌面环境的切换方法

你在找它吗? 国内麒麟、深度等系统虽然界面更炫,但——软件仓库与Ubuntu官方已不兼容。国内系统遇到稳定性问题,还是得拿Ubuntu做参照。今天本来介绍下这款Linux桌面。 为什么在 Ubuntu 上考虑 LXQt? 性能:LXQt设计为…

基于SSM的教务管理系统运行教程

文章目录 1、前期必备1.1、所需软件版本说明1.2、下载源码1.3、下载开发工具1.4、下载JDK并配置环境变量1.5、安装数据库和数据库管理工具1.6、安装配置Maven 2、将SQL文件导入到数据库2.1、新建MySQL连接2.2、新建数据库并导入SQL 3、用Eclipse运行程序3.1、导入educationalMa…

操作系统【OS】操作系统的引导

激活CPU。 激活的CPU读取ROM中的boot程序,将指令寄存器置为BIOS(基本输入输出系统)的第一条指令, 即开始执行BIOS的指令。硬件自检。 启动BIOS程序后,先进行硬件自检,检查硬件是否出现故障。如有故障,主板会发出不同含…

【JavaEE】Java多线程编程案例 -- 多线程篇(3)

Java多线程编程案例 1. 单例模式1.1 代码的简单实现1.2 懒汉模式的线程安全代码 2. 阻塞队列2.1 阻塞队列的概念2.2 使用库中的BlockingDeque2.3 模拟实现阻塞队列2.4 生产者消费者模型 3. 定时器3.1 概念3.2 使用库的定时器 - Timer类3.3 模拟实现定时器 4. 线程池4.1 概念4.2…

JetBrains系列IDE全家桶激活

jetbrains全家桶 正版授权,这里有账号授权的渠道: https://www.mano100.cn/thread-1942-1-1.html 附加授权后的一张图片

YOLOv8改进实战 | 更换主干网络Backbone(二)之轻量化模型GhostnetV2

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

9 线程池

为什么要使用线程池? 1 重复利用已创建的线程,减少线程创建和销毁带来的开销 2 提高响应速度:任务可以不用等待线程创建就能立即执行(T1 创建线程 T2执行任务 T3销毁线程),若T1T3>T2,可以通过…

macOS Tor 在启动期间退出

macos Tor 在启动期间退出。这可能是您的 torrc 文件存在错误,或者 Tor 或您的系统中的其他程序存在问题,或者硬件问题。在您解决此问题并重新启动 Tor 前,Tor 浏览器将不会启动。退出Tor、卸载Tor、删除目录 TorBrowser-Data、重启电脑 访…

关于antdpro的EdittableProTable编辑时两个下拉搜索框的数据联动以及数据回显(以及踩坑)

需求:使用antdpro的editprotable编辑两个下拉框,且下拉框是一个搜索下拉框。下拉框1和2的值是一个编码和名字的联动关系,1变化会带动2,2变化会带动1的一个联动作用。(最后有略完整的代码,但是因为公司项目问…

059:mapboxGL监听键盘事件,通过eastTo控制左右旋转

第059个 点击查看专栏目录 本示例是介绍演示如何在vue+mapbox中监听键盘事件,通过eastTo控制左右旋转。 本例通过easeTo方法来加减一定数值的bearing角度,通过.addEventListener的方法来监听键盘的按键动作。这里一定要设置interactive: false, 否则展现不出来旋转效果。 直…

小微企业低成本获客攻略,媒介盒子无偿分享

品牌推广已经成为企业获客的主要手段,品牌推广能够使企业将自身的品牌、产品信息传递到受众面前,但是小微企业在公司成立之初往往资金有限,那么小微企业如何用低成本精准获客呢?可以试试软文。接下来媒介盒子就告诉大家&#xff0…

IO入门day1

课程分为三部分:IO文件-动态库、静态库制作,进程(本地进程间通信),线程(线程通信) 特点:学习大量的函数接口调用-函数名及功能、man手册查看参数 一、IO介绍 1、概念 对文件的输入输…

Vue3中使用富文本编辑器

在vue3中我们可以使用wangeditor/editor、wangeditor/editor-for-vue来实现其功能 npm地址:https://www.npmjs.com/package/wangeditor/editor-for-vue/v/5.1.12?activeTabreadme 官网:Editor 1. 安装 pnpm add wangeditor/editor # 或者 npm inst…

ESRI ArcGIS Desktop 10.8.2图文安装教程及下载

ArcGIS 是由美国著名的地理信息系统公司 Esri 开发的一款地理信息系统软件,它是目前全球最流行的 GIS 软件之一。ArcGIS 提供了图形化用户界面和数据分析工具,可以帮助用户管理、分析和可视化各种空间数据。ArcGIS Desktop是一个完整的桌面GIS软件套件&a…

2023“龙芯杯”信创攻防赛 | 赛宁网安技术支持

2023年10月19日,为深入贯彻国家网络强国战略思想,宣传国家网络安全顶层设计,落实《网络安全法》《数据安全法》等法律法规。由大学生网络安全尖锋训练营主办,龙芯中科技术股份有限公司承办,山石网科通信技术股份有限公…

解决XXLJOB重复执行问题--Redis加锁+注解+AOP

基于Redis加锁注解AOP解决JOB重复执行问题 现象解决方案自定义注解定义AOP策略redis 加锁实践 现象 线上xxljob有时候会遇到同一个任务在调度的时候重复执行,如下图: 线上JOB服务运行了2个实例,有时候会重复调度到同一个实例,有…

【标准化封装 SOT系列 】 B SOT-223

SOT-223 pin 间距 2.3mm 名称pin 数厂家 body DE矩形 (mm)SOT-2234ADI – LTC196 . 6.3/6.71*3.3/3.71

基于广义正态分布优化的BP神经网络(分类应用) - 附代码

基于广义正态分布优化的BP神经网络(分类应用) - 附代码 文章目录 基于广义正态分布优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.广义正态分布优化BP神经网络3.1 BP神经网络参数设置3.2 广义正态分布算…

接口测试 Jmeter 接口测试 —— 请求 Headers 与传参方式

一、 背景: 在使用 Jmeter 进行接口测试时,有些小伙伴不知道 Headers 和请求参数 (Parameters,Body Data) 的联系,本文主要讲 Content-Type 为 application/x-www-form-urlencoded 和 application/json 的场景。 1、使用 Parame…

Cesium Vue(七)— GEOJSON数据展示

1. GeoJSON GeoJSON 是一种用于对各种地理数据结构进行编码的格式。 简而言之,GeoJSON为你提供了一种简单的格式来表示简单的地理特征以及它们的非空间属性。 结构: {"type": "Feature","geometry": {"type"…