Python实现DAS单点登录

news2025/1/17 15:43:25

❇️ 流程

  1. 进入登录页面 (DAS验证的登录页面)

  2. 获取验证码图像,百度OCR识别

  3. 登录


🏞️ 环境

  • Windows 11

  • Python 3.12

  • PyCharm 2023


🧵 准备工作

安装必要依赖库

  • bs4

  • Jupyter

  • 推荐安装 Jupyter(Anaconda 或 PyCharm 均可)进行 request 调试

pip install bs4 pip install jupyter

网址

  • DAS登录地址

  • 验证码地址

  • 用户信息 (账号、密码)

在浏览器中打开 开发者工具 或 Ctrl + F12 ,进行一次登录操作后,可以在对应的网址请求数据中查看到 DAS 的地址。

注册百度智能云账号

  • 免费使用百度OCR文字识别

  • 获取百度 token (间隔30天需要更新一次)

  • 创建OCR应用(每月免费使用200次),获取应用ID、API Key、Secert Key


方法实现

百度API调用

token码获取

def access_token() -> None:
    """
    获取 access_token
    :return: None
    """
    API_Key: str = ""
    Secret_Key: str = ""
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={API_Key}&client_secret={Secret_Key}'
    response = requests.get(host)
    file = open("./data/access token.txt", "w")
    file.write(f"{datetime.now().strftime('%Y-%m-%d')}\n{response.json()['access_token']}")
    file.close()

OCR文字识别

def OCR() -> str:
    """
    文字验证码识别
    :return: 验证码
    """
    # 二进制方式打开图片文件
    f = open('./img/captcha.jpg', 'rb')
    img = base64.b64encode(f.read())
    params = {"image": img}
    f.close()

    # 每 30 天刷新一次 access_token 码,暂未修改,可自行完成
    if datetime.now().day == 1:
        access_token()

    TokenFile = open("./data/access token.txt", "r")
    Token = TokenFile.readlines()[1]
    TokenFile.close()
    
    # # 获取到验证码后删除该文件
    # if path.exists("./img/captcha.jpg"):
    #     remove("./img/captcha.jpg")

    url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token={Token}"
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(url, data=params, headers=headers)
    if response:
        print(response.json())
        return response.json()['words_result'][0]['words']

网址数据

网址、请求头

class URL:
    """ 网址数据 """
    genCodeURL: str = ""  # 验证码地址
    loginURL: str = "/cas/login"  # 登录地址

    header: dict = {
        "User-Agent": "",
        'Accept': "",
        'Cookie': ""
    }

验证码保存

def saveCaptchaCode(session, response: requests) -> None:
    """
    验证码保存
    :param session: 会话
    :param response: 请求
    :return: None
    """
    re = session.get(URL.genCodeURL, headers=response.request.headers)
    with open("./img/captcha.jpg", "wb") as f:
        f.write(re.content)

用户信息

class User:
    user: int = 
    password: str = ""

下面部分依据不同网站的请求数据为准,不必做参考。

execution 为登录页面中的 input 数据在本人请求的网站中为必要参数。

execution = BeautifulSoup(entry_login.text, "html.parser").find('input', {"name": "execution"}).get("value")

网页请求

创建 session 会话

session = requests.session()
  1. 【第一次请求】进入登陆页面,获取验证码

对网址发送 get 请求进入到登陆页面,拿到验证码地址。

entry_login: requests = session.get(URL.loginURL, headers=URL.header)

2. 【第二次请求】获取验证码

再对验证码地址发送一次 get 请求,保存验证码。

saveCaptchaCode(session, entry_login)

更新登录请求数据

data: dict = {
    "username": User.user,
    "password": User.password,
    "captchaCode": OCR().replace(" ", ""),
    "execution": execution,
    "_eventId": "submit",
    "geolocation": ""
}

在网页中对验证码进行点击会更新,这里对验证码地址进行一次 get 请求也相当于用户点击并刷新了验证码,此时的验证码将是最新的。

你可以依次打开登陆页面和验证码页面,此时登录页面与验证码页面的验证码是不同的,但你可以输入验证码页面的内容成功登陆。

3. 【第三次请求】登陆

对目标网址发送 post 请求,实现登陆操作。

post_server = session.post(URL.loginURL, headers=entry_login.request.headers, data=data)
 

不同网站登陆成功后的页面显示效果并不相同,如我请求的网站显示的类似等待的动态图标(一开始以为没登陆成功),你可以输出 post 登录后的URL是否跳转

post_server.url


🔗 参考链接

python-代码实现全自动带验证码登录post请求

南科大 CAS 单点登录之模拟登录

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

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

相关文章

WSL2配置Linux、Docker、VS Code、zsh、oh my zsh(附Docker开机自启设置)

0. 写在前面 本篇笔记来自于UP主麦兜搞IT的合集视频Windows10开发环境搭建中的部分内容 1. 安装WSL2 按照微软官方文档进行操作,当然也可以直接wsl --install 也可以按照 旧版手动安装的步骤 来进行操作 选择安装的是Ubuntu 20.04 LTS 注:WSL默认安装…

Vue + Echarts页面内存占用高问题解决

Vue Echarts页面内存占用高问题解决 1.问题描述 目前使用的是Vue2 Echarts4.x的组合,页面如下所示。 就是一个类似于神策的数据看板页面,左侧是一个导航栏,右侧看板页面中包含很多个报表图片,其中报表页面中对Echarts图表进…

Vision Mamba:使用双向状态空间模型进行高效视觉表示学习

模型效果 将DeiT和Vim模型之间的性能和效率比较,为了进行准确性比较,我们首先在IN1K分类数据集上预训练DeiT和Vim,然后在不同的下游密集预测任务上微调通用主干,即,语义分割、目标检测、实例分割。结果表明&#xff0c…

linux之前后端项目部署与发布

目录 前言 简介 一、安装Nginx 二、后端部署 2.1多个tomcat负载均衡 2.2 负载均衡 2.3 后端项目部署 三、前端部署 1.解压前端 2.Nginx配置文件修改 3.IP域名映射 4.重启Nginx服务 前言 上篇博主已经讲解过了单机项目的部署linux之JAVA环境配置JDK&Tomcat&a…

人人都是项目管理者,项目管理的基础入门

一、教程描述 本套教程旨在系统介绍项目管理的方法论,帮助大家认识、熟悉、体验、思考项目管理,全面掌握项目管理的流程与方法,快速成长为时代紧缺型的项目管理人才。本套项目管理入门教程,大小805.40M,共有13个文件。…

YOLO目标检测——电力绝缘子缺陷检测数据集【含对应voc、coco和yolo三种格式标签集】

实际项目应用:电力绝缘子缺陷检测数据集的应用范围涵盖了电力设备制造、供应、维护、监控等多个领域,对提升电力系统的安全性、可靠性和效率具有重要意义数据集说明:无缺和有缺陷两种标签类别。标签说明:使用lableimg标注软件标注…

【GO语言卵细胞级别教程】07.捕获异常和自定义错误

【GO语言卵细胞级别教程】07.捕获异常和自定义错误 🥰博主:GokuCode 🥰微信公众号:【给点知识】分享小知识,快速成长,欢迎关注呀!(底部点击二维码) 🥰本项目演示代码仓库…

FL Studio 老用户免费更新FL Studio 21.2.3.4004 中文版及FL Studio 21更新日志

FL Studio 21是一款非常流行的数字音频工作站软件,它可以帮助音乐制作人和音乐爱好者创作出高质量的音乐作品。在FL Studio 21中,有许多插件可以帮助用户实现各种音乐效果,例如合成器、鼓机、效果器等等。 FL Studio 21.2.3.4004 加入了新的插…

学会字符转换

字符转换 题目描述:解法思路:解法代码:运行结果: 题目描述: 输入⼀一个字符串,将字符串中大写字母全部转为小写字母,小写字母转成大写字母,其他字符保持不变。注:字符串…

Python爬虫实战:图片爬取与保存

引言: 在本文中,我们将学习如何使用Python创建一个简单的图片爬虫。 我们将利用requests库来发送HTTP请求,BeautifulSoup库来解析HTML页面,以及os和shutil库来下载和保存图片。通过这个教程,你将学会如何爬取网…

【JavaScript 漫游】【021】EventTarget 接口

事件的本质是程序各个组成部分之间的一种通信方式,也是异步编程的一种实现。DOM 支持大量的事件。 EventTarget 接口概述 DOM 的事件操作(监听和触发),都定义在 EventTarget 接口。所有节点对象都部署了这个接口,其他…

8.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-游戏底层功能对接类GameProc的实现

内容参考于:易道云信息技术研究院VIP课 上一个内容:通过逆向分析确定游戏明文接收数据过程 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:bcf7559184863febdcad819e48aaa…

选座位 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 疫情期间,需要大家保证一定的社交距离,公司组织开交流会议,座位有一排共N个座位,编号分别为[0…N-1],要…

mvn版本导致的Failed to execute goal on project问题与解决

目录 一,报错情况与原因二,maven的下载与安装1,卸载maven2,安装mvn3,指定mvn的默认版本: 一,报错情况与原因 使用命令mvn package时会报如下错误: Failed to execute goal on proj…

关于js [GDOUCTF 2023]hate eat snake

查看页面源代码 发现snake.js文件 打开js文件 第7行定义了游戏的速度this.speed this.oldSpeed speed || 10 ; 全文搜索speed,在第237行发现自增代码this.speed; 注释或者删除自增代码 回到游戏页面 重玩游戏,等待60s即可 得到flag

C语言--贪吃蛇

目录 1. 实现目标2. 需掌握的技术3. Win32 API介绍控制台程序控制台屏幕上的坐标COORDGetStdHandleGetConsoleCursorinfoCONSOLE_CURSOR_INFOSetConsoleCursorInfoSetConsoleCursorPositionGetAsyncKeyState 4. 贪吃蛇游戏设计与分析地图<locale.h>本地化类项setlocale函…

matlab经验模式分解的R波检测算法

1、内容简介 略 56-可以交流、咨询、答疑 2、内容说明 略 心血管疾病是威胁人类生命的主要疾病之一&#xff0c;而心电信号&#xff08;electrocardiogram, ECG&#xff09; 则是评价心脏功能的主要依据&#xff0c;因此&#xff0c;关于心电信号检测处理的研究一直为各方所…

js设计模式:状态模式

作用: 将对象的行为和状态进行分离,状态是由行为操作决定的,而不是直接控制。 同时,行为也是由状态决定的,每个状态都有自己的行为和相应的方法 行为与状态分离,可以使代码方便维护 示例: <!DOCTYPE html> <html lang"en"><head><meta cha…

基于YOLOv5+PySide6的火灾火情火焰检测系统设计深度学习

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225火灾 获取完整源码源文件已标注的数据集&#xff08;1553张&#xff09;配置跑起来说明 可有偿49yuan一对一远程操作&#xff0c;在你电脑跑起来 效果展示&#xff1a; ​数据集在下载的文件夹&#xff1a;yolov5-5.0\…

Vue3中的select 的option是多余的?

背景&#xff1a; 通过Vue3中填充一个下拉框&#xff0c;在打开页面时要指定默认选中&#xff0c;并在选项改变时把下拉框的选中值显示出来 问题&#xff1a; 填充通常的作法是设置 <option v-for"option in cities" :value"option.value" >&a…