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://www.mzph.cn/news/704383.shtml

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

相关文章

数学建模【相关性模型】

一、相关性模型简介 相关性模型并不是指一个具体的模型,而是一类模型,这一类模型用来判断变量之间是否具有相关性。一般来说,分析两个变量之间是否具有相关性,我们根据数据服从的分布和数据所具有的特点选择使用pearson&#xff…

Linux系统——Nginx小总结

目录 一、影响用户体验的因素 二、网络连接——Apache/Nginx服务请求过程 三、I/O模型——Input/Output模型 1.同步/异步 2.阻塞/非阻塞 3.同步异步/阻塞非阻塞组合 四、Nginx用法 一、影响用户体验的因素 客户端硬件配置客户端网络速率客户端与服务端距离服务端网络速…

【JS】事件绑定方法自带一个形参e“function(e)”,what is e?

在学习js的时候 我跳过了一部分章节的内容,导致现在学习react的时候很多内容都不知所措,因为这些教程都是建立在它认为你js所有内容都掌握的前提下,当然这是我自身的原因。需要反省。 下面是正题: 我们知道js有很多事件&#…

【一】【SQL】表的增删查改(部分)

表之“增”操作 建表的操作 mysql> create table students(-> id int unsigned primary key auto_increment,-> sn int unsigned unique key,-> name varchar(20) not null,-> qq varchar(32) unique key-> ); Query OK, 0 rows affected (0.03 sec)mysql&g…

Day01:Web应用架构搭建站库分离路由访问配置受限DNS解析

目录 常规的Web应用搭建 三种常规网站搭建模式 程序源码 中间件配置 数据库类型 文件访问路径 总结 章节知识点: 应用架构:Web/APP/云应用/三方服务/负载均衡等 安全产品:CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令:文件…

Pytorch添加自定义算子之(1)-安装配置Eigen库

一、安装对应的ubuntu环境 推荐使用Docker FROM nvcr.io/nvidia/pytorch:23.01-py3 RUN pip install tensorboardX RUN pip install pyyaml RUN pip install yacs RUN pip install termcolor RUN pip install opencv-python RUN pip install timm0.6.12 WORKDIR /app COPY . …

Python入门必学:print函数--从基础语法到高级用法

Python入门必学:print函数–从基础语法到高级用法 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得到您…

2024 春招市场行情报告:鸿蒙人才遭“爆抢”

前言 2024年可以说是布道鸿蒙开发行业的最佳时机,华为在千帆启航仪式会中发布会中表示,已有200家头部企业加入原生开发当中,并且一直有高薪抢人的局面,这一信息已经引起业界很大关注。 因此有很多公司开始准备要招聘鸿蒙工程师&…

机器学习YOLO操作全流程​​编

YOLO介绍 Ultralytics YOLOv8,是最新的著名实时目标检测和图像分割模型。它基于深度学习和计算机视觉的最新进展,提供了无与伦比的速度和精度性能。由于其精简的设计,适用于各种应用,并且可以轻松适配不同的硬件平台,从边缘设备到云端API。 探索 YOLOv8 文档,这是一个全…

【MySQL】探索表结构、数据类型和基本操作

表、记录、字段 数据库的E-R(entity-relationship,实体-关系)模型中有三个主要概念: 实体集 、 属性 、 关系集 。 一个实体集对应于数据库中的一个表,一个实体则对应于数据库表 中的一行,也称为一条记录。…

【Linux基础】Linux自动化构建工具make/makefile

背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后…

2/26作业

1.link_stack.c #include "link_stack.h" //申请栈顶指针 top_p creat_top() { top_p top (top_p)malloc(sizeof(top_t)); if(topNULL) { printf("空间申请不成功\n"); return NULL; } top->len 0; top->…

Android基础进阶 - RecyclerView列表加载多类型视图

你是否会经常见到在同一个 RecyclerView 列表中加载多种不同的布局效果?最近写了一篇 ConcatAdapter 相关内容,发现虽然之前一直在使用多类型视图列表,但从未记录过,故重新记录于此 RecyclerView基础 Android进阶之路 - Recycler…

leet hot 100-6 三数之和

三数之和 原题链接思路代码 原题链接 leet hot 100-5 15. 三数之和 思路 从前往后定义第一个数字 first 开始遍历整个数组 然后要求 frist和上一个数字不重复否则就是重复组合 从frist往后遍历第二个数字 同样要求第二个数字不能重复 再定义第三个数字从后往前面数 三个数字…

Stable Diffusion 绘画入门教程(webui)-ControlNet(Shuffle)

Shuffle(随机洗牌),这个预处理器会把参考图的颜色打乱搅拌到一起,然后重新组合的方式重新生成一张图,可以想象出来这是一个整体风格控制的处理器。 那么问题来了,官方为啥会设计个这样的处理器呢,主要是给懒人用的&am…

内网穿透的应用-如何在群晖配置WebDAV实现云同步Zotero科研文献与笔记【内网穿透】

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…

git push 总是需要输入密码或者个人访问令牌personal access token解决方案

文章目录 遇到问题解决方法 遇到问题 git push的时候总是需要输入密码或者个人访问令牌personal access token 解决方法 ChatGPT给出的解决方案,解决了我的问题。 如果在使用 git push 命令时总是需要输入个人访问令牌,这可能是因为您的 GitHub 账号…

力扣hot100题解(python版7-9题)

7、接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,…

HTTP 与HTTPS笔记

HTTP 80 HTTP是一个在计算机世界里专门在【两点】之间【传输】文字、图片、音频、视频等【超文本】数据的约定和规范。 HTTP状态码 1xx 提示信息,表示目前是协议处理的中间状态,还需要后续的操作;2xx 200 204 026 成功3xx 重定向&#xff…

【激光SLAM】基于图优化的激光SLAM 方法(Grid-based)

文章目录 Graph-based SLAM数学概念 非线性最小二乘(Non-Linear Least Square)解决的问题误差函数线性化流程 非线性最小二乘在SLAM中的应用图的构建(SLAM前端)误差函数误差函数的线性化固定坐标系构建线性系统求解 Cartographer介绍 Graph-based SLAM …