爬虫逆向实战(十二)--某交易所登录

news2024/9/20 18:38:23

一、数据接口分析

主页地址:某交易所

1、抓包

通过抓包可以发现登录是通过表单提交的
在这里插入图片描述

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看“载荷”模块,可以发现有两个加密参数passwordexecution
    在这里插入图片描述
  2. 请求头是否加密?
  3. 响应是否加密?
  4. 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
在这里插入图片描述
通过查看“载荷”模块,可以发现这个请求会携带receiverenuuidmarkrand四个参数。其中mark是账号,rand是随机数,所以这两个参数不需要关心。而receiverenuuid这两个参数,我们仔细观察抓包可以发现,这两个参数来自于一个enuuid的接口
在这里插入图片描述
所以我们可以请求这个接口获取到这两个参数。
当我们在输入框输入图片验证码时,网站会请求sso/validlogin接口,携带输入的验证码来校验我们输入的验证码。
在这里插入图片描述

五、发送请求

1、思路

结合上面的分析,我们可以先请求html静态页面获取到execution参数,然后请求enuuid接口获取到uuidenuuid参数,获取到这两个参数之后,我们就可以获取图片验证码了,请求sso/picture接口获取到图片验证码,然后识别图片验证码(我这里使用的打码平台进行的识别)。携带识别出的验证码请求sso/validlogin接口,返回成功响应后,将密码进行encode64转码,再发包进行登录即可。

2、源代码

"""
Email:912917367@qq.com
Date: 2023/8/14 13:37
"""
import base64
import re
import time

import requests

from utils.chaojiying import ChaojiyingClient


class 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 = username
        self.password = password

    def 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 True
        return False

    def 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():
                break
        self.login()


if __name__ == '__main__':
    spider = Spider('账号', '密码')
    spider.run()

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

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

相关文章

leader-line相关配置问题

安装完两个插件都是教去改config // configureWebpack: config > {// let path require(path)// config.module.rules.push({// test: path.resolve(__dirname, node_modules/leader-line/),// use: [// {// loader: skeleton-loader,// …

校企合作谋发展 合作共赢谱新篇|云畅科技与湖南民族职业学院签订校企合作协议

产业是经济发展的重要引擎&#xff0c;人才是产业发展的重要资源。为积极探索软件人才培育新路径&#xff0c;共商政产学研协同新机制&#xff0c;8月8日&#xff0c;云畅科技与湖南省民族职业学院教育技术学院软件技术专业签订校企合作协议。 会上&#xff0c;学院副校长王志平…

uniapp 企业微信侧边栏开发网页授权 注入企业权限 注入应用权限 获取userid(2)

1、网页授权&#xff0c;获取code 代码&#xff1a; oauthUrl() {const that thisuni.removeStorageSync(code)let REDIRECT_URI encodeURIComponent(window.location.href)let CORPID webConfig.appIdlet url https://open.weixin.qq.com/connect/oauth2/authorize?appi…

keil编译链接文件警告Pattern *.o(RAMCODE) only matches removed unused sections

问题&#xff1a; 从提示看是链接文件中&#xff0c;RAM中原先分配给代码存储的空间没有用上 解决办法&#xff1a;删除掉上图中红框里面代码&#xff1b;

途乐证券-宁德时代发力超充赛道,高压快充概念强势拉升,泰永长征涨停

高压快充概念17日盘中强势拉升&#xff0c;到发稿&#xff0c;泰永长征涨停&#xff0c;万祥科技涨超9%&#xff0c;英可瑞涨逾8%&#xff0c;迦南智能涨超4%。 消息面上&#xff0c;8月16日&#xff0c;宁德时代举行线下新品发布会&#xff0c;正式发布全球首款磷酸铁锂4C超充…

股票交易c接口包含哪些调用函数?

股票交易的C接口中可能包含多个调用函数&#xff0c;具体的调用函数取决于所使用的接口规范和交易所的要求。接下来看看下面是一些可能常见的股票交易C接口调用函数的示例&#xff1a; 1. 连接函数&#xff08;Connect&#xff09;&#xff1a;用于与交易所建立网络连接。 2.…

python3.73安装教程,python3.10安装教程

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python3.73安装教程&#xff0c;python3.10安装教程&#xff0c;现在让我们一起来看看吧&#xff01; Python目前已支持所有主流操作系统&#xff0c;在Linux,Unix,Mac系统上自带Python环境&#xff0c;一般默认装的是P…

等保案例 5

用户简介 四川省人民代表大会常务委员会&#xff0c;作为省人民代表大会地常设机关&#xff0c;随着政府部门信息化程度地提高&#xff0c;对信息系统地依赖程度越来越高&#xff0c;同时由于网络安全形势日益严峻、新型攻击层出不穷&#xff0c;单位信息化所面临地各种风险也…

【闪击Linux系列P6】自动化构建工具-make/Makefile详解

前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01;本章主要内容面向接触过Linux的老铁&#xff0c;主要内容含 欢迎订阅 YY 滴Linux专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 订阅专栏阅读&#xff1a;YY的《…

〔012〕Stable Diffusion 之 中文提示词自动翻译插件 篇

✨ 目录 &#x1f388; 翻译插件&#x1f388; 下载谷歌翻译&#x1f388; 谷歌翻译使用方法&#x1f388; 谷歌翻译使用效果 &#x1f388; 翻译插件 在插件列表中搜索 Prompt Translator可以看到有2个插件选项&#xff1a;一个是基于谷歌翻译 〔推荐〕、一个基于百度和deepl…

什么是字体堆栈(font stack)?如何设置字体堆栈?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是字体堆栈&#xff08;Font Stack&#xff09;&#xff1f;⭐ 如何设置字体堆栈&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 …

客服专用耳机哪个品牌好用,打电话好用的蓝牙耳机推荐

如果你喜欢户外运动时戴耳机&#xff0c;那绝对不能错过骨传导耳机&#xff01;这种开放式耳道设计在跑步时非常实用&#xff0c;因为它可以让你快速察觉行人和车辆的动静&#xff0c;大大减少安全隐患。而且&#xff0c;这种耳机无需插入耳朵&#xff0c;可以让你的耳道长时间…

聊聊火车的发展

目录 1.火车的概念 2.火车的发展历史 3.火车对战争的影响 4.火车对人们出行造成的影响 1.火车的概念 火车是一种由机械动力驱动的陆上交通工具&#xff0c;通常用来运输人员和货物。它由一列或多列的连接在一起的车厢组成&#xff0c;有轨道作为其行驶的基础&#xff0c;并通…

AI商业化如何落地?看设计师如何利用AI细化工作流

自从AI爆火之后&#xff0c;人类是否会被AI取代一直都是打工人格外关注的问题。 而最近&#xff0c;在小编深入探索到我们用户的使用情况后&#xff0c;发现已经有人拿神采PromeAI直接实现了商业应用&#xff0c;将AI的设计创意应用得淋漓尽致&#xff0c;并且直接进军房地产及…

nvm-----node版本管理器

使用nvm来进行切换不同的node版本 我们在开发的时候有会很多的新老项目&#xff0c;有些老项目会要求使用低版本的node&#xff0c;但是新项目又会要求高版本的node&#xff0c;这个时候就是很纠结了。因为低版本的项目你用高版本的node进行启动会有启动失败或者代码保存的时候…

PO、BO、VO、DTO、DAO、POJO

文章目录 PO&#xff08;Persistant Object&#xff09;持久对象DO&#xff08;Data Object&#xff09;数据对象AO&#xff08;Application Object&#xff09;应用对象BO&#xff08;Business Object&#xff09;业务对象VO&#xff08;Value Object&#xff09;表现对象DTO&…

海外应用ASO优化的小技巧3

编写准确的应用程序描述&#xff0c;有4000个字符限制。用户可以访问应用程序的主要功能和信息&#xff0c;要说服并推动用户去下载我们的应用&#xff0c;需要使用自然流利的语言。 1、填写应用描述的方案。 我们需要知道该应用有什么用&#xff0c;能够解决什么问题&#xf…

latex 笔记:cs论文需要的排版格式

主要针对英文文献 1 基本环境 连字符 不同长度的"-"表示不同含义。 一个"-"长度的连字符用于词中两个"-"长度的连字符常用于制定范围三个"-"长度的连字符是破折号数学中的负数要用数学环境下的-得到 强调 在正式文章中, 通常不…

C++提高编程——模板

C提高编程 本阶段主要针对C泛型编程和STT技术做详细讲解&#xff0c;探讨C更深层的使用 1模板 1.1模板的概念 模板就是建立通用的模具&#xff0c;大大提高复用性 例如生活中的模板 寸照片模板&#xff1a; 1.2函数模板 C另一种编程思想称为 泛型编程&#xff0c;主要利…