之前分享过ddddocr库,并附带演示了识别纯数字验证码的案例
有很多同学过来问我计算型的验证码怎么识别,
比如像这样的
演示项目地址:
http://vue.ruoyi.vip/login?redirect=%2Findex
先说思路:
如果仍然采用上次介绍的ddddocr库识别图片中的文字,识别出来后我们截取前面的3个字符“4/2”然后进行计算即可,
思路挺简单的,实现起来还是有点麻烦,最主要的原因是这个图片不是正常的字体,弯弯拐拐的,识别错误率很高。
遇到的坑:
-
识别出来不足3个字符,无法计算
-
第二个字符识别出来不是运算符,无法计算
-
第一个和第三个字符识别出来的数字不正确,导致计算结果不对,验证失败
-
python除法运算得到的结果是浮点型,需要转成整型,这个验证码只能输入整数才能通过,比如4/2,python会得到2.0而不是2,导致验证失败
处理后,代码实现:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from ddddocr import DdddOcr
driver = webdriver.Chrome()
driver.get('http://vue.ruoyi.vip/login?redirect=%2Findex')
driver.implicitly_wait(5)
while True:
ele = driver.find_element(by=By.XPATH, value='//*[@id="app"]/div[1]/form/div[3]/div/div[2]/img')
png = ele.screenshot_as_png
text = DdddOcr(show_ad=False).classification(png)
# 判断识别出来的字符串长度大于2
if len(text) > 2:
# 截取前3个字符
exp_str = text[:3]
# 判断如果是“数字 运算符 数字”格式的字符串
if exp_str[0].isdigit() and (exp_str[1] in ["+", "-", "*", "/"]) and exp_str[2].isdigit():
# 除法返回结果是float类型,比如 4/2=2.0 要转成2才能通过验证
result = int(eval(exp_str))
ele_verify = driver.find_element(by=By.XPATH, value='//*[@id="app"]/div[1]/form/div[3]/div/div[1]/input')
ele_verify.clear()
ele_verify.send_keys(result)
driver.find_element(by=By.XPATH, value='//*[@id="app"]/div[1]/form/div[4]/div/button').click()
time.sleep(2)
# 判断是否登录成功进入首页,没有进入就继续识别验证码
if 'https://vue.ruoyi.vip/index' == driver.current_url:
break
else:
# 如果不是“数字 运算符 数字”格式的字符串,继续点击更换验证码识别
ele.click()
else:
# 识别长度不足3位,继续点击更换验证码识别
ele.click()
print('登录成功')
识别效果展示:
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。