Python实现DAS单点登录

❇️ 流程

  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 为官网获取的SKhost = 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://xiahunao.cn/news/2808531.html

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

相关文章

OpenGL ES (OpenGL) Compute Shader 计算着色器是怎么用的?

OpenGL ES (OpenGL) Compute Shader 是怎么用的? Compute Shader 是 OpenGL ES(以及 OpenGL )中的一种 Shader 程序类型,用于在GPU上执行通用计算任务。与传统的顶点着色器和片段着色器不同,Compute Shader 被设计用于在 GPU 上执行各种通用计算任务,而不是仅仅处理图形…

【计算机网络】深度学习使用应用层的HTTP协议

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【计算机网络】深度学习使用应用层的HTTP协议 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录 一:HTTP是什么二:HTTP请求1.HTTP请求的组成2.HTTP请求的方法…

记录一些mac电脑重装mysql和pgsql的坑

为什么要重装,是想在mac电脑 创建data目录…同事误操作,导致电脑重启不了.然后重装系统后,.就连不上数据库了.mysql和pgsql两个都连不上.网上也查了很多资料.实在不行,.就重装了… 重装mysql. 1.官网下载 https://www.mysql.com/downloads/ 滑到最下面 选择 选择对应的芯片版本…

【深度学习:标记数据】为医生标记数据缓解疼痛

【深度学习:标记数据】为医生标记数据缓解疼痛 问题实验结果结论 我开始在物理学方面进行学术研究,但在第一年就退学了(抱歉,休学了)我的博士学位,并在定量金融领域做了很长一段时间。因此,在我…

【Android安全】Windows 环境下载 AOSP 源码

准备环境 安装 git 安装 Python 硬盘剩余容量最好大于 100G 打开 Git Bash,用 git 克隆源代码仓库 git clone https://android.googlesource.com/platform/manifest.git //没有梯子使用清华源 git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest.git…

异步框架Celery在Django中的运用

参考博客:https://www.cnblogs.com/pyedu/p/12461819.html 参考视频:01 celery的工作机制_哔哩哔哩_bilibili 定义:简单灵活、处理大量消息的分布式系统,专注于实时处理异步队列,支持任务调度 主要架构: …

万界星空科技商业开源MES

一、万界星空科技商业开源MES系统概述: 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、适合二开的开源MES。 1.万界星空开源MES制造执行系统的Java开源版本。 开源mes系统包括系统管理,车间基础数据管理,计…

MySQL知识点总结(五)——锁

MySQL知识点总结(五)——锁 锁分类表锁 & 行锁如何添加表锁?如何添加行锁? 读锁 & 写锁行锁 & 间隙锁(gap lock)& 临键锁(next-key lock) 加锁机制分析可重复读隔离…

加速Python代码的秘密武器,探索Cython的秘密

首先和大家明确一下这个Cython单词的读法,这个单词Cython以前我也不知道怎么读,老后面要用到这个包的时候,老是不清楚读法,才去搜了下,这个单词是读"赛森",就是前面的cy是读"赛"&#…

Java中PDF文件传输有哪些方法?

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…

【GPTs分享】GPTs分享之consensus

大家好,元宵节快乐,今天给大家分享的GPTs是consensus。consensu号称无需关键字即可搜索2亿文章,而且给出的链接绝对保真,不再是胡编乱造的,而且能够根据指定主题辅助编写论文或者博客。 简介 consensus使用chat.cons…

Python入门必学:reverse()和reversed()的区别

Python入门必学:reverse()和reversed()的区别 📅2024年02月25日 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

向量数据库的特性、索引和分析权衡

向量数据库概述 向量数据库的特征 数据库多样性:向量数据库在实现、性能、可扩展性和易用性方面存在差异,支持语义搜索应用。融资与地理位置:多数向量数据库初创公司集中在加州湾区,但资金并不直接反映数据库能力。编程语言&…

解决:“出现问题,Outlook 无法设置你的账户”

原文:https://blog.iyatt.com/?p14213 1 问题描述 Office 专业版 2024 预览版 在 Outlook 输入邮箱后无法进一步配置登录信息(腾讯企业邮箱 Exchange 登录) 2 解决方法 通过控制面板里的邮箱设置可以正常添加登录,而且能…

AtCoder ABC342 A-D题解

华为出的比赛&#xff1f; 好像是全站首个题解哎&#xff01; 比赛链接:ABC342 Problem A: 稍微有点含金量的签到题。 #include <bits/stdc.h> using namespace std; int main(){string S;cin>>S;for(int i0;i<s.size();i){if(count(S.begin(),S.end(),S[i…

探究全链路压力测试的含义与重要性

全链路压力测试是指对整个应用系统的各个环节或组件进行压力测试&#xff0c;以模拟实际生产环境中的用户负载和流量&#xff0c;评估系统在高负载条件下的性能表现。 1. 全链路压力测试的含义 全链路压力测试涉及系统的所有组件和环节&#xff0c;包括前端用户界面、应用服务器…

liunx单机项目部署

文章目录 1.liunx简介2.liunx的jdk安装2.liunx的tomcat安装3.liunx的mysql安装4.单机项目部署 1.liunx简介 Linux&#xff0c;一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&#xff0c;一般搭配GNU套件&#xff0c;故得此称呼&#xff09;&#xff0c;是一种免费…

TCP/IP协议栈:模拟器实现基本的L2和L3功能

在C中实现的TCPI/IP网络堆栈模拟器。该模拟器实现基本的第2层&#xff08;MAC地址&#xff0c;Arp&#xff09;和第3层&#xff08;路由&#xff0c;IP&#xff09;功能。 TCP/IP协议栈是一个网络通信的基础架构&#xff0c;包含了多层次的协议和功能。在模拟实现基本的L2和L3…

详细教程!VMware Workstation Pro16 安装 + 创建 win7 虚拟机!

嚯嚯嚯&#xff0c;很多宝子都想拥有自己不同的操作系统环境&#xff0c;用于学习或项目搭建。买服务器费钱&#xff0c;虚拟机则成为了一个很好的选择。本文详细介绍VMware Workstation Pro 16安装及win7虚拟机创建&#xff0c;保姆级教程奉上&#xff01; 一、准备工作 VMw…

【Java程序设计】【C00310】基于Springboot的人事管理系统(有论文)

基于Springboot的人事管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的人事管理系统&#xff0c;本系统有管理员、员工二种角色权限&#xff1b; 管理员&#xff1a;个人中心、管理员管理、基础数据管理、…