当前位置: 首页 > article >正文

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

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

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

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.kler.cn/a/611968.html

相关文章:

  • Crypto Architecture Kit简介
  • DiskGenius 硬盘管理工具下载+D盘空间扩容给C盘教程
  • ZIP_STORED和ZIP_LZMA没有compresslevel参数!
  • Scala 简介
  • 数据库的DDL操作
  • Flutter视频播放优化
  • 【数学建模】(智能优化算法)元胞自动机在数学建模中的应用
  • LeetCode 20 Valid Parentheses 有效的括弧 Java
  • 5款视觉OCR开源模型
  • 输入百分比校验(数字非负数保留2位不四舍五入)
  • c# 动态库重名冲突处理方法 (起别名)
  • 面试记录3
  • 深度学习查漏补缺:3.从 Sigmoid 到 GELU
  • 使用Hash和HTML5的History API实现前端路由
  • IIR(无限冲激响应)滤波
  • 爬虫面试题
  • 大模型tokenizer重构流程
  • 【初探数据结构】直接插入排序与希尔排序详解
  • 解决conda的R包安装的依赖问题-以tidyverse为例
  • UniApp 生命周期钩子的应用场景