爬虫逆向实战(十二)--某交易所登录
一、数据接口分析
主页地址:某交易所
1、抓包
通过抓包可以发现登录是通过表单提交的

2、判断是否有加密参数
- 请求参数是否加密?
通过查看“载荷”模块,可以发现有两个加密参数password和execution

- 请求头是否加密?
无 - 响应是否加密?
无 - cookie是否加密?
无
二、加密位置定位
1、password
(1)看启动器
因为这个登录是表单提交,所以无法通过启动器点位
(2)搜索关键字
通过搜索关键字password =可以找到password的加密位置

2、execution
通过搜索关键字execution可以发现,这个值是直接写在html静态页面中的。

三、扣js代码
从定位到的password加密位置可以发现,网站仅仅使用了一个encode64方法转码,但是为了防止网站是改写的,我们还是先测试一下。将刚刚抓到的包中的password密文进行转码,可以发现成功转码成了明文,这就说明这个网站真的是只转了一下码。所以我们也就没有必要扣js代码了。
execution是直接写在静态页面上的,所以我们只需要先请求静态页面,再使用正则表达式'<input type="hidden" name="execution" value="(.*?)"'把execution的值匹配出来就可以了。
四、验证码
1、接口分析
通过点击图片更换验证码可以发现,每次更换验证码,网站都会发一个包请求sso/picture

通过查看“载荷”模块,可以发现这个请求会携带receiver、enuuid、mark、rand四个参数。其中mark是账号,rand是随机数,所以这两个参数不需要关心。而receiver和enuuid这两个参数,我们仔细观察抓包可以发现,这两个参数来自于一个enuuid的接口

所以我们可以请求这个接口获取到这两个参数。
当我们在输入框输入图片验证码时,网站会请求sso/validlogin接口,携带输入的验证码来校验我们输入的验证码。

五、发送请求
1、思路
结合上面的分析,我们可以先请求html静态页面获取到execution参数,然后请求enuuid接口获取到uuid和enuuid参数,获取到这两个参数之后,我们就可以获取图片验证码了,请求sso/picture接口获取到图片验证码,然后识别图片验证码(我这里使用的打码平台进行的识别)。携带识别出的验证码请求sso/validlogin接口,返回成功响应后,将密码进行encode64转码,再发包进行登录即可。
2、源代码
"""
Email:912917367@qq.com
Date: 2023/8/14 13:37
"""
import base64
import re
import timeimport requestsfrom utils.chaojiying import ChaojiyingClientclass Spider:def __init__(self, username, password):self.session = requests.session()self.session.headers = {"Origin": "https://owssso.szse.cn","Referer": "https://owssso.szse.cn/sso/login?service=https://www.szse.cn/application/userCenter/accountinfo/&locale=zh","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",}self.execution = ''self.uuid = ''self.enuuid = ''self.pic_str = ''self.username = usernameself.password = passworddef get_execution(self):url = 'https://owssso.szse.cn/sso/login?service=https://www.szse.cn/application/userCenter/accountinfo/&locale=zh'response = self.session.get(url=url)pattern = r'<input type="hidden" name="execution" value="(.*?)"'self.execution = re.findall(pattern, response.text)[0]def get_uuid(self):url = "https://owssso.szse.cn/sso/enuuid"params = {"service": "https://www.szse.cn/application/userCenter/accountinfo/","locale": "zh","_": int(time.time() * 1000)}response = self.session.get(url, params=params)info_data = response.json()self.uuid = info_data['uuid']self.enuuid = info_data['enuuid']def get_img_code(self):url = "https://owssso.szse.cn/sso/picture"params = {"receiver": self.uuid,"enuuid": self.enuuid,"rand": "0.004521081820116013"}response = self.session.get(url, params=params)with open('img.png', 'wb') as f:f.write(response.content)cjy = ChaojiyingClient('超级鹰账号', '超级鹰密码', '超级鹰应用id')im = open('img.png', 'rb').read()pic_data = cjy.post_pic(im, 1902)self.pic_str = pic_data['pic_str']print(self.pic_str)def check_img_code(self):url = "https://owssso.szse.cn/sso/validlogin"params = {"text": self.pic_str,"receiver": self.uuid,"mark": self.username,"type": "3","_": int(time.time() * 1000)}response = self.session.get(url, params=params)if '正确' in response.json()['message']:return Truereturn Falsedef login(self):encoded_bytes = base64.b64encode(self.password.encode('utf-8'))pwd = encoded_bytes.decode('utf-8')url = "https://owssso.szse.cn/sso/login"params = {"service": "https://www.szse.cn/application/userCenter/accountinfo/","locale": "zh"}data = {"receiver": self.username,"iframe": "false","password": pwd,"text": self.pic_str,"uuid": self.uuid,"type": "PL","execution": self.execution,"_eventId": "submit"}response = self.session.post(url, params=params, data=data)print(response.text)print(response)def run(self):self.get_execution()self.get_uuid()while True:self.get_img_code()if self.check_img_code():breakself.login()if __name__ == '__main__':spider = Spider('账号', '密码')spider.run()
相关文章:
爬虫逆向实战(十二)--某交易所登录
一、数据接口分析 主页地址:某交易所 1、抓包 通过抓包可以发现登录是通过表单提交的 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块,可以发现有两个加密参数password和execution 请求头是否加密? 无响应是…...
【C++入门到精通】C++入门 —— list (STL)
阅读导航 前言一、list简介1.概念2.特点 二、list的使用1.list的构造2.常见的操作⭕std::list类型的增、删、查、改 三、list与vector的对比温馨提示 前言 文章绑定了VS平台下std::list的源码,大家可以下载了解一下😍 前面我们讲了C语言的基础知识&…...
SOLIDWORKS有限元分析
SOLIDWORKS是一款广泛使用的三维计算机辅助设计软件,同时它还具有强大的有限元分析功能。有限元分析是一种工程分析方法,它将复杂的实体分解成许多小的有限元素,以便对其进行数学建模和分析。SOLIDWORKS的有限元分析功能可以帮助工程师预测和…...
Kotlin Flow 冷流
协程:Flow 1、Flow是什么? 处理异步事件流可取消:通过取消协程取消Flow组合操作符:复杂逻辑处理缓冲和背压:发送和接收时用不同速度处理,实现流量控制、避免数据丢失 2、传统事件处理方案:同…...
Android Socket使用TCP协议实现手机投屏
本节主要通过实战来了解Socket在TCP/IP协议中充当的是一个什么角色,有什么作用。通过Socket使用TCP协议实现局域网内手机A充当服务端,手机B充当客户端,手机B连接手机A,手机A获取屏幕数据转化为Bitmap,通过Socket传递个…...
【云原生,k8s】Helm应用包管理器介绍
目录 一、为什么需要Helm? (一)Helm介绍 (二)Helm有3个重要概念: (三)Helm特点 二、Helm V3变化 (一)架构变化 (二)自动创建名…...
两个内网之间的linux服务器如何互相登录?快解析内网穿透
如果两个内网之间的linux服务器需要互相登录,或需要互相访问内网某个端口,担忧没有公网IP,可以使用的方法有 ngrok, 但并不方便,我们只需两条 SSH 命令即可。 SSH 内网端口转发实战SSH 内网端口转发实战 先给出本文主角&…...
sql server 存储过程 set ansi_nulls set quoted_identifier,out 、output
SQL-92 标准要求在对空值(NULL) 进行等于 () 或不等于 (<>) 比较时取值为 FALSE。 当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值,…...
1046:判断一个数能否同时被3和5整除
【题目描述】 判断一个数n 能否同时被3和5整除,如果能同时被3和5整除输出YES,否则输出NO。 【输入】 输入一行,包含一个整数n。( -1,000,000 < n < 1,000,000) 【输出】 输出一行,如果能同时被3…...
优漫动游零基础如何学习好UI设计
智能时代的来临,很多企业都越来越注重用户体验这一块,想要有一个吸引用户的好页面,UI设计师岗位不可或缺,如今越来越多的人想要学习UI设计技术,那么对于零基础小白如何学习好UI设计呢? 零基础小白如何学习好UI设计…...
Android岗位技能实训室建设方案
一 、系统概述 Android岗位技能作为新一代信息技术的重点和促进信息消费的核心产业,已成为我国转变信息服务业的发展新热点:成为信息通信领域发展最快、市场潜力最大的业务领域。互联网尤其是移动互联网,以其巨大的信息交换能力和快速渗透能力…...
Mysql系列:Mysql5.7编译安装--系统环境:Centos7 / CentOS9 Stream
Mysql系列:Mysql5.7编译安装 系统环境:Centos7 / CentOS9 Stream 1:下载mysql源码包 https://dev.mysql.com/downloads/mysql/5.7.htmldownloads 选择MySQL Community Server>source_code>Generic Linux (Architecture Independent)…...
Docker容器与虚拟化技术:Dockerfile部署LNMP
目录 一、理论 1.LNMP架构 2.背景 3.Dockerfile部署LNMP 3.构建Nginx镜像 4.构建MySQL容器 5.构建PHP镜像 6.启动 wordpress 服务 二、实验 1.环境准备 2.构建Nginx镜像 3.构建MySQL容器 4.构建PHP镜像 5.启动 wordpress 服务 三、问题 1.构建nginx镜像报错 …...
elementUI date-picker 日期格式转为 2023/08/08格式
<el-form-item label"基线日期:" prop"baselineDate"><el-date-pickertype"date"v-model"form.baselineDate"placeholder"选择日期"format"yyyy/MM/dd"change"(date, type) > changeTime(date, …...
生成式 AI 在泛娱乐行业的应用场景实践 – 助力风格化视频内容创作
感谢大家阅读《生成式 AI 行业解决方案指南》系列博客,全系列分为 4 篇,将为大家系统地介绍生成式 AI 解决方案指南及其在电商、游戏、泛娱乐行业中的典型场景及应用实践。目录如下: 《生成式 AI 行业解决方案指南与部署指南》《生成式 AI 在…...
elementPlus——图标引入+批量注册全局组件——基础积累
因为我们要根据路由配置对应的图标,也要为了后续方便更改。因此我们将所有的图标注册为全局组件。(使用之前将分页器以及矢量图注册全局组件的自定义插件)(所有图标全局注册的方法element-plus文档中已给出) 全局注册…...
国标GB28181安防视频平台EasyGBS显示状态正常,却无法播放该如何解决?
国标GB28181视频平台EasyGBS是基于国标GB/T28181协议的行业内安防视频流媒体能力平台,可实现的视频功能包括:实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。国标GB28181视频监控平台部署简单、可拓展性强,支持将…...
TIOVX:opencv的Mat类图像零拷贝转为openvx的vx_image格式,通过Not节点无效果问题记录
问题描述 代码中,创建了一个opencv的Mat图像(并打印了所有的像素值),然后通过vxCreateImageFromHandle函数将Mat图像转为了vx_image图像(通过映射的方式打印了所有的像素值,通过日志可以看出与之前打印相同)。然后创建graph,将其作…...
变压器故障诊断(python代码,逻辑回归/SVM/KNN三种方法同时使用,有详细中文注释)
视频效果:变压器三种方法下故障诊断Python代码_哔哩哔哩_bilibili代码运行要求:tensorflow版本>2.4.0,Python>3.6.0即可,无需修改数据路径。 1.数据集介绍: 采集数据的设备照片 变压器在电力系统中扮演着非常重要的角色。…...
ASEMI探索整流桥GBU814的独特优势和应用领域
编辑-Z 整流桥GBU814在众多电子元件中独树一帜,可在多种设备中发挥其重要作用。作为一款集高效性能和可靠稳定性于一身的整流桥,GBU814已在全球范围内赢得了广泛的好评。在这篇文章中,我们将详细介绍GBU814整流桥的优势和应用领域。 让我们首…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
