登录接口带验证码自动化(tesseract-OCR)

news2025/4/1 17:32:13

登录接口是很多网站和应用程序中必不可少的一部分。为了增加安全性,很多登录接口还会加入验证码的验证步骤,以防止恶意登录行为。

通常,遇到这样情况时有以下解决办法

1、使用万能验证码:如果遇到前台输入的是万能验证码,那就不要做验证码校验直接通过;

2、特定用户跳过验证码:如果遇到指定用户登录,那么不管输入什么验证码,验证码校验都通过;

3、通过OCR识别解决验证码问题;

4、将token变为变量,后续时长更新;

本文主要介绍第三种方式:

安装Pillow和pytesseract模块

pip install pytesseract   -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install pillow        -i https://pypi.tuna.tsinghua.edu.cn/simple

安装tesseract-OCR

下载地址Index of /tesseracthttps://digi.bib.uni-mannheim.de/tesseract/

网站较慢,可从网盘获取

通过网盘分享的文件:tesseract-ocr-w64-setup-v5.3.0.20221214.exe
链接: https://pan.baidu.com/s/1DdDZsANpdY3Yg2uDxXbZgw 提取码: 4742 
 

下载最新版本即可,直接next安装完成,

配置环境变量

1、添加到环境变量的系统变量(PATH)去(根据实际填写)

2、增加一个TESSDATA_PREFIX变量名,变量值是  实际安装路径\tessdata 

3、打开终端,输入:tesseract -v,可以看到版本信息 

代码演示

   def test_get_token(self):
        json_path = read_json_path()
        path = get_yaml_data(read_yaml_file())["Token"]["get_uuid"]["path"]
        # 发送 GET 请求,请求路径由 self.select_env() 方法返回的环境URL与 path 拼接而成
        re = requests.get(self.select_env() + path)
        # 将响应转换为 JSON 格式
        response_data = re.json()

---------------此处开始是相关的代码
        # 获取Base64编码的图片数据
        img_data = response_data["img"].split(",")[1]
        # 将Base64字符串解码为字节数据
        img_bytes = base64.b64decode(img_data)
        # 创建一个图像对象
        img = Image.open(BytesIO(img_bytes))

        # 进行图像增强处理
        img = img.convert("L")  # 转为灰度图像
        img = img.filter(ImageFilter.MedianFilter())  # 去噪声
        # 可以尝试不同的阈值来改进图像处理
        threshold = 180  # 调整阈值进行实验
        img = img.point(lambda p: p > threshold and 255)
        # 配置参数,增强验证码识别的准确性
        custom_config = r'--oem 3 --psm 6'
        # 使用pytesseract进行验证码识别
        captcha_text = pytesseract.image_to_string(img, config=custom_config)

        print(captcha_text)
        # 显示图像,查看图像质量
        img.show()

---------------此处是相关的代码的结束

        headers = read_json_file_dict(f'{json_path}/json/token_data.json', 'header')
        logging.info(f"  headers 是 {headers}")

        data = read_json_file_dict(f'{json_path}/json/token_data.json', 'body')
        public_key = read_file(f"{json_path}/cipher_public.pem")
        username = encryption(self._USERNAME, public_key)
        password = encryption(self._PASSWORD, public_key)

        # 去除前后的空格和换行符
        code = captcha_text.replace("\n", "")
        uuid = response_data["uuid"]
        logging.info(f"  username 是 {username}")
        logging.info(f"  password 是 {password}")
        logging.info(f"  uuid 是 {uuid}")
        logging.info(f"  code 是 {code}")

        data["uuid"] = uuid
        data["username"] = username
        data["usercode"] = username
        data["password"] = password
        data["code"] = code

        # 将字典转换成 JSON 格式的字符串
        data = json.dumps(data)
        logging.info(f"  data是 {data}")
        path = get_yaml_data(read_yaml_file())["Token"]["get_token"]["path"]
        logging.info(f"  path 是 {path}")
        # 发送 POST 请求,请求路径由 self.select_env() 方法返回的环境URL与 path 拼接而成
        re = requests.post(self.select_env() + path, headers=headers, data=data)
        # 将响应转换为 JSON 格式
        response_data = re.json()
        token = response_data["data"]["access_token"]
        return token

注意,

运行前,需修改pytesseract.py文件中

tesseract_cmd 的实际路径

说明

我演示的环境中,验证码会通过base64进行编码,所以我们先做的就是将接口中的编码信息拿到,然后进行解码操作,再将解码信息创建为图片对象,然后进行ocr识别,最后将识别的信息填入登录请求体中;

最后 

免费的ocr不好使,哈哈哈,尽量选择第一、二种方式;或者使用付费的ocr进行识别,增加准确度;

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

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

相关文章

【Python】pillow库学习笔记2-ImageFilter类和ImageEnhance类

PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法。 3.ImageFilter类 ImageFilter类共提供10种预定义图像过滤方法: 方法表示描述ImageFilter.BLUR图像的模糊效果ImageFilter.CONTOUR图像的轮廓效果ImageFilter.DETAIL图像的细节效果ImageFi…

3.Matplotlib:绘图参数文件和绘图的主要函数

一 绘图参数文件 1.绘图参数文件是什么 可以通过在程序中添加代码对参数进行配置,但是如果一个项日对于 Matplotlib 的特性参数总会设置相同的值,就没有必要在每次编写代码的时候都进行相同的配置。在代码之外使用一个永久的文件设定 Matplotlib 参数默认…

飞书只有阅读权限的文档下载,飞书文档下载没有权限的文件

wx搜索公zhong号:"狮心王"回复"飞书文档保存"下载chrome扩展文件 拿到扩展文件之后给chrome添加扩展

【开题报告+论文+源码】基于SpringBoot的智能安全与急救知识科普系统设计与实现

项目背景与意义 在全球范围内,安全与急救知识的普及已成为提升公众安全素养、减少意外伤害发生率、提高突发事件应对能力的重要举措。尤其是在当今社会,人们面临的生活、工作环境日益复杂,交通事故、火灾、溺水、突发疾病等各种意外事件的发生…

蓝桥杯 - 简单 - 布局切换

介绍 为了提高用户体验,网站有时需要多种浏览模式。现在特邀请你为蓝桥官网设计具有经典、浏览和工具三种布局模式。使用户可以根据具体情况选择合适的模式,以便更好地浏览网页内容。 本题需要在已提供的基础项目中使用 JS 完善代码实现布局的切换。 …

测试用例生成平台通过大模型升级查询功能,生成智能测试用例

在测试工作中,查询功能是各类系统的核心模块,传统的测试用例编写往往耗时且重复。如何让老旧平台焕发新活力?本文将结合大模型技术,通过用户输入的字段信息,自动化生成高效、精准的测试用例。同时,我们还将…

python每日十题(9)

外存储器的容量一般都比较大,而且大部分可以移动,便于在不同计算机之间进行信息交流。外存储器中数据被读入内存储器后,才能被CPU读取,CPU不能直接访问外存储器。本题答案为A选项。 进程是指一个具有一定独立功能的程序关于某个数…

macOS 制作dmg磁盘映像安装包

制作dmg磁盘影像安装包需要准备一下材料: 1. 导出的APP 2. 背景图片 3. 应用程序替身 前两种材料很容易得到。 下面介绍一下 应用程序替身制作过程: Finder —> 选中 应用程序 --> 找到顶部菜单栏中 的 前往 ----> 选择上层文件夹选中应用程…

Three.js 快速入门教程【十八】射线拾取模型——鼠标点击屏幕选中模型或物体

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…

如何下载 Postman?快速指南!

Postman 是一款非常受欢迎的 API 测试工具。它最初是作为一个 Chrome 插件发布,后来发展成为一款独立的跨平台软件,支持 Windows、Mac、Linux 等操作系统。 Postman 怎么下载教程(2025最新版)?

Shiro学习(一):Shiro介绍和基本使用

一、Shiro介绍 1、百科对shiro的定义如下: Apache Shiro 一个强大且易于使用的 Java 安全框架,它提供了身份验证、授权、加密和会话管理等功能。Shiro 的设计目标是简化企业级应用程序的安全性开发过程,同时保持代码的简洁和易于维护。 2、…

7.1 分治-快排专题:LeetCode 75. 颜色分类

1. 题目链接 LeetCode 75. 颜色分类 2. 题目描述 给定一个包含红色(0)、白色(1)和蓝色(2)的数组 nums,要求原地对数组进行排序,使得相同颜色的元素相邻,且按红、白、蓝…

开源软件许可证冲突的原因和解决方法

1、什么是开源许可证以及许可证冲突产生的问题 开源软件许可证是一种法律文件,它规定了软件用户、分发者和修改者使用、复制、修改和分发开源软件的权利和义务。开源许可证是由软件的版权所有者(通常是开发者或开发团队)发布的,它…

详解java体系实用知识总结

0.java技术能力框架 基础模块应用模块综合模块技术岗位与面试流程常用工具集系统架构设计计算机基础常用框架微服务架构jvm原理缓存容器化多线程队列云计算(阿里云/aws)设计模式数据库数据结构与算法 1.常用设计模式与应用场景 工厂模式:s…

【区块链安全 | 第二篇】区块链概念详解

文章目录 概述1. 区块链类型2 区块链五层架构3 账本模型4. 节点(Node)5. 区块(Block)6. 区块链(Blockchain)7. 区块链工作流程 核心技术1. 共识机制2. 智能合约 主要组件1. 交易(Transaction&am…

【开源宝藏】30天学会CSS - DAY6 第六课 流光文字动画

第 0 步&#xff1a;项目结构 lighting-text/├─ index.html└─ style.cssindex.html&#xff1a;包含列表 <ul>&#xff0c;其中每个 <li> 放一个字母或符号。style.css&#xff1a;设置背景、文字样式&#xff0c;以及关键帧动画&#xff08;lighting&#xf…

Swift实现嵌套json字典重排序并输出string

在网络请求或接口签名中&#xff0c;通常要求将参数按照一定规则拼接成字符串。一个常见的做法是对字典的 key 进行排序&#xff0c;然后按照 “keyvalue” 的格式拼接&#xff0c;多个参数之间以特定符号&#xff08;例如 &&#xff09;连接。 如果参数中包含嵌套的字典或…

【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细) 开发环境一、前情提要:你…

Flink基础简介和安装部署

文章目录 一、Flink基础简介1、什么是Flink2、Flink流处理特性3、Flink四大基石4、Flink中的角色 二、Flink集群搭建1、Local模式①上传Flink安装包②启动交互窗口③提交任务测试④访问WebUI页面查看⑤退出停止集群 2、Standalone模式①修改配置⽂件 conf/flink-conf.yaml②修改…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.2文本生成逻辑:Top-k采样与温度控制

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.2.2 文本生成逻辑:Top-k采样与温度控制1. 文本生成的核心挑战与数学框架1.1 自回归生成的基本流程2. `Top-k`采样原理与工程实现2.1 数学定义与算法流程2.2 PyTorch实现优化3. 温度控制的数学本质与参…