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

一、数据接口分析

主页地址:某交易所

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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中国乡村振兴战略下传统村落文化旅游设计日

中国乡村振兴战略下传统村落文化旅游设计日

unity Dropdown默认选择不选择任何选项

当我们使用Dropdown下拉框时&#xff0c;有时不需要有默认选项&#xff0c;把 value设置为-1就可以了&#xff0c; 但是用代码设置value-1是没有效果的&#xff0c;

AI 绘画Stable Diffusion 研究(九)sd图生图功能详解-老照片高清修复放大

大家好&#xff0c;我是风雨无阻。 通过前面几篇文章的介绍&#xff0c;相信各位小伙伴&#xff0c;对 Stable Diffusion 这款强大的AI 绘图系统有了全新的认知。我们见识到了借助 Stable Diffusion的文生图功能&#xff0c;利用简单的几个单词&#xff0c;就可以生成完美的图片…

运行软件mfc140u.dll丢失怎么办?mfc140u.dll的三个修复方法

最近我在使用一款软件时遇到了一个问题&#xff0c;提示缺少mfc140u.dll文件。。这个文件是我在使用某个应用程序时所需要的&#xff0c;但是由于某种原因&#xff0c;它变得无法正常使用了。经过一番搜索和了解&#xff0c;我了解到mfc140u.dll是Microsoft Visual Studio 2015…

【JVM】JVM中的分代回收

文章目录 分代收集算法什么是分代分代收集算法-工作机制MinorGC、 Mixed GC 、 FullGC的区别是什么 分代收集算法 什么是分代 在java8时&#xff0c;堆被分为了两份&#xff1a; 新生代和老年代【1&#xff1a;2】 其中&#xff1a; 对于新生代&#xff0c;内部又被分为了三…

拒绝摆烂!C语言练习打卡第三天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4…

Docker:Windows container和Linux container

点击"Switch to Windows containers"菜单时&#xff1a; 提示 然后 实际上是运行&#xff1a;com.docker.admin.exe start-service

【广州华锐视点】帆船航行VR模拟实操系统

帆船航行VR模拟实操系统由广州华锐视点开发&#xff0c;是一种创新的教学工具&#xff0c;它利用虚拟现实技术&#xff0c;为学生提供了一个沉浸式的学习环境。通过这种系统&#xff0c;学生可以在虚拟的环境中进行帆船航行的实训&#xff0c;从而更好地理解和掌握帆船航行的技…

【Linux】DNS协议——应用层

目录 DNS协议 DNS背景 域名简介 域名解析过程 使用dig工具分析DNS过程 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;协议&#xff0c;是一个用来将域名转化为IP地址的应用层协议。 DNS背景 TCP/IP中通过IP地址和端口号的方式&#xff0c;来确定网…

Airbnb开源数据可视化工具Visx

一、什么是visx visx 是用于 React 的富有表现力的底层可视化组件集合,结合了 d3 的强大功能来生成可视化,以及 React 更新 DOM 的诸多优势。 在 Airbnb 内部,visx 的目标是统一整个公司的可视化堆栈,在此过程中,创建了 visx 项目,从而有效的将 D3 的强大功能与 React …

TCP/IP 下的计算机网络江湖

〇、引言 在当今数字化时代,计算机网络宛如广袤江湖,涵盖着五大门派:物理层、数据链路层、网络层、传输层和应用层。每个门派独具技能,共同构筑着现代网络的框架。物理层宛如江湖基石,将比特流传输;数据链路层如武林传承,组织数据帧传递;网络层则像导航大师,寻找传送路…

urllib.request.urlretrieve()下载资源到本地

urllib.request.urlretrieve&#xff08;&#xff09;下载资源到本地 代码示例&#xff1a; 本实例已下载Cifair10数据集为例&#xff0c;下载完毕后进行加压缩包 import urllib.request as ur import os import sys import tarfile import glob import pickle import numpy a…

手撕单链表

目录 链表的概念和结构 单链表的实现 申请新结点 打印 尾插 头插 尾删 头删 ​编辑 查找 在pos位置前插入元素 在pos位置后插入元素 删除pos位置的元素 删除pos位置之后的位置的元素​编辑 完整代码 SListNode.h SListNode.c 链表的概念和结构 链表是一种物理存储…

在 SwiftUI 中创建一个环形 Slider

文章目录 前言初始化环形轮廓将进度值和拇指位置绑定添加触摸手势为不同的坐标值设置滑块位置总结 前言 Slider 控件是一种允许用户从一系列值中选择一个值的 UI 控件。在 SwiftUI 中&#xff0c;它通常呈现为直线上的拇指选择器。有时将这种类型的选择器呈现为一个圆圈&#…

git Authentication failed

情况是这样的&#xff0c;之前看代码只是clone了一份&#xff0c;但随着分支越来越多&#xff0c;有时候切换分支时必须先把修改的代码 stash 一下&#xff0c;觉得很麻烦&#xff0c;于是又clone了一份代码。然后pull代码是正常的&#xff0c;当push 代码的时候&#xff0c;去…

软件压力测试对软件产品起到什么作用?

一、软件压力测试是什么? 软件压力测试是一种通过模拟正常使用环境中可能出现的大量用户和大数据量的情况&#xff0c;来评估软件系统在压力下的稳定性和性能表现的测试方法。在软件开发过程中&#xff0c;经常会遇到一些性能瓶颈和稳定性问题&#xff0c;而软件压力测试的作…

uni-app弹窗列表滚动, 弹框下面的内容也跟随滚动解决方案

滑动弹窗里的列表&#xff0c;弹框下面的内容也会跟着滑动&#xff0c;导致弹窗中的列表不能正常滚动 1.弹窗组件代码&#xff0c;需要在最外层的view中加入touchmove.stop.prevent"moveHandle"&#xff0c;且弹窗中需要滚动的列表要使用scroll-view标签包裹起来&…

虚拟拍摄,如何用stable diffusion制作自己的形象照?

最近收到了某活动的嘉宾邀请&#xff0c;我将分享&#xff1a; 主题&#xff1a;生成式人工智能的创新实践 简要描述&#xff1a;从品牌营销、智能体、数字内容创作、下一代社区范式等方面&#xff0c;分享LLM与图像等生成式模型的落地应用与实践经验。 领域/研究方向&#xff…

【JavaScript】使用js实现滑块验证码功能与浏览器打印

滑块验证码 效果图&#xff1a; 实现思路&#xff1a; 根据滑块的最左侧点跟最右侧点&#xff0c; 是否在规定的距离内【页面最左侧为原点】&#xff0c;来判断是否通过 html代码&#xff1a; <!DOCTYPE html> <html><head><title>滑动图片验证码&…

基于docker搭建pytest自动化测试环境(docker+pytest+jenkins+allure)

pytest搭建自动化测试环境&#xff08;dockerpytestjenkinsallure&#xff09; 这里我以ubuntu18为例 如果有docker环境&#xff0c;可以直接拉取我打包好的镜像docker pull ziyigun/jenkins:v1.0 1 搭建Docker 1.1 安装docker # 配置docker安装环境 sudo apt-get install ap…