

验证码地址:登录-石材宝


注意事项:安装ddddcor及pillow库
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
import ddddocr
from PIL import Image
import re
def recognize_calc_captcha(image_path):
"""
识别数字计算验证码并返回计算结果
:param image_path: 验证码图片路径
:return: 计算结果(整数/浮点数),识别失败返回 None
"""
try:
# 1. 初始化ddddocr识别器(自动加载模型,首次运行会下载)
ocr = ddddocr.DdddOcr()
# 2. 读取验证码图片(二进制方式读取,兼容性更好)
with open(image_path, 'rb') as f:
image_bytes = f.read()
# 3. 执行OCR识别,得到验证码字符串(如"5+7=")
captcha_str = ocr.classification(image_bytes)
# 4. 清理字符串:只保留数字、+、-、×、÷、*、/(处理不同写法的运算符)
# 正则匹配:提取数字和常见运算符
clean_str = re.sub(r'[^0-9\+\-\×÷\*/]', '', captcha_str)
# 统一运算符格式(把×换成*,÷换成/,适配Python计算)
clean_str = clean_str.replace('×', '*').replace('÷', '/')
clean_str = re.findall(r"(\d+\D\d+)", clean_str)[0]
print(f"清理后的计算表达式:{clean_str}")
# 5. 校验表达式合法性(至少包含一个运算符)
if not re.search(r'[\+\-\*/]', clean_str):
print("识别结果无有效运算符,识别失败")
return None
# 6. 安全计算表达式结果(避免恶意表达式,此处仅针对验证码场景)
result = eval(clean_str)
# ========== 核心修复:统一转为float后判断是否为整数 ==========
# 先转为float,再调用is_integer(),避免int类型报错
float_result = float(result)
if float_result.is_integer():
result = int(float_result) # 整数结果转int(如5.0→5)
else:
result = float_result # 非整数保留float(如7/2=3.5)
return result
except FileNotFoundError:
print(f"错误:图片文件 {image_path} 不存在")
return None
except SyntaxError:
print("错误:识别的表达式语法错误")
return None
except Exception as e:
print(f"识别失败,异常信息:{str(e)}")
return None
except FileNotFoundError:
print(f"错误:图片文件 {image_path} 不存在")
return None
except SyntaxError:
print("错误:识别的表达式语法错误")
return None
except Exception as e:
print(f"识别失败,异常信息:{str(e)}")
return None
def main(args):
pass