登录中经常会遇到验证码,验证码有很多种,常见的就是输入数字or数字字母组合,近期有朋友说他们是算式的不好写,验证码是如图
经过几次讨论搜刮,整理了一份如下代码用于识别验证码算式类的
朋友最终写法:
此段代码增加循环是为了获取不对时,重新获取新的验证码
整理代码如下:
import ddddocr
while True:
# 此为识别验证码的代码,可以把此段封装成一个函数放入这个循环中进行重复调用识别
ocr = ddddocr.DdddOcr(show_ad=False)
with open('812187486dbb51b9a161f1adcf958ba.png', 'rb') as f:
code = f.read()
res = ocr.classification(code)
print("图片验证码为:" + res)
# 以下是识别后的内容进行判断是否符合要求,符合就继续执行下面的代码,不符合就进入循环重新获取验证码识别内容
if len(res) < 3 or res and not res[0].isdigit() or res == '=':
continue
else:
if 'x' and '=' in res:
value_a = int(res.split('x')[0]) * int(res.split('x')[1].rstrip("="))
print('计算结果:' + str(value_a))
elif '-' and '=' in res:
value_a = int(res.split('-')[0]) - int(res.split('-')[1].rstrip("="))
print('计算结果:' + str(value_a))
elif '+' and '=' in res:
value_a = int(res.split('+')[0]) + int(res.split('+')[1].rstrip("="))
print('计算结果:' + str(value_a))
elif '*' and '=' in res:
value_a = int(res.split('*')[0]) * int(res.split('*')[1].rstrip("="))
print('计算结果:' + str(value_a))
else:
if "x" in res:
value_a = int(res.split("x")[0]) * int(res.split("x")[1])
print('计算结果:' + str(value_a))
elif "-" in res:
value_a = int(res.split("-")[0]) - int(res.split("-")[1])
print('计算结果:' + str(value_a))
elif "+" in res:
value_a = int(res.split("+")[0]) + int(res.split("+")[1])
print('计算结果:' + str(value_a))
elif "*" in res:
value_a = int(res.split("*")[0]) * int(res.split("*")[1])
print('计算结果:' + str(value_a))
else:
continue
整体思路就是在ddddocr库识别中识别出来的不够精准时,排除识别的不准确的结果,然后在拿算式格式要求的正确的进行计算执行,提升登录接口验证码输入准确度。