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用法 一、影响用户体验的因素 客户端硬件配置客户端网络速率客户端与服务端距离服务端网络速…

容器库(12)-std::unordered_multiset

unordered_multiset是以key为元素无序的关联容器,搜索、移除和插入操作是平均常数的时间复杂度。unordered_multiset在内部没有按任何顺序排列,而是放在桶当中的,放进哪个桶是通过计算key的hash值来决定的。和unordered_set不同的是&#xff…

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

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

学习 Python operator 模块的 itemgetter

学习 Python operator 模块的 itemgetter 0. 引言1. itemgetter函数说明1-1. 示例代码1-2. 多级排序 0. 引言 operator模块提供了一系列对操作符的函数化接口,例如:加法、乘法、比较操作等。 itemgetter函数是operator模块中的一个功能,它用…

【一】【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…

v-rep--addon--附加组件

附加组件汉化文档 官网 什么是addon 就是一个lua语言文件; 用户通过编写的lua文件来增加coppeliasim的功能。 addon的作用 通过用户编写的lua语言实现添加coppliasim功能。

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 文档,这是一个全…

R语言【BIEN】——BIEN_occurrence_genus():从BIEN数据库下载特定属的观察记录。

Package BIEN version 1.2.6 Description BIEN_occurrence_genus() 从BIEN数据库下载特定属的观察记录。 Usage BIEN_occurrence_genus(genus,cultivated FALSE,new.world NULL,all.taxonomy FALSE,native.status FALSE,natives.only TRUE,observation.type FALSE,poli…

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

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

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

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

ubuntu 安装jdk8

在Ubuntu上安装Java Development Kit (JDK) 8,可以通过以下两种方法进行: 方法一:通过PPA源安装Oracle JDK 8(不推荐,因为Oracle已停止对JDK 8的公开更新支持) 由于Oracle自2019年起对JDK 8的公共更新仅限…

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->…

18.openeuler OECA认证模拟题1

单选 1。openEuler 操作系统中,通过什么命令可以查看操作系统的版本信息() B A、uname B、cat /etc/os-release C、cat /etc/.kyinfo D、lscpu 2.系统启动的过程顺序正确的是() A A、BIOS自检-MBR中的引导装载程序启动-Linux内核运行-用户登录 B、BIOS自检-MBR中…

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

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

亲密关系中的问题

陈海贤老师会帮你解答亲密关系里的典型问题。 用户丫丫: 我想请教一下老师,如果男朋友因为工作或是生活上的事情遇到了挫折而情绪低落,那么我应该怎么有效地安慰他? 答:你想安慰他,其实这件事对于你男朋友…