SoftwareTest
有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是自然人访问还是计算机程序访问。
验证码:简称为captcha
- 一种随机生成的信息(数字、字母、汉字、图片、算术题、问答题)或者系统发送到客户终端的信息,为了防止恶意的请求行为,增加应用程序的安全性。
- 防止恶意攻击、盗取信息。
验证码种类:
1)纯数字(有些需要计算)
2)纯英文(可能区分大小写)
3)英数混合(可能有干扰背景)
4)汉字
5)滑动
6)点选(选字、选物)
7)问答题
8)点选(语序选择)
9)空间推理
10)无感知
11)手机验证码
12)语音验证码
13)视频验证码
验证码测试难点:
- Selenium自动化测试与验证码设计初衷是矛盾的:
- Selenium自动化测试:用程序代替人工操作
- 验证码存在的意义:让自然人能操作,程序不能操作。
- Selenium测试处理验证码的原因:
- 在Web应用中,大部分系统在用户登录注册的时候都要求输入验证码,而在设计自动化测试脚本时,就需要临时处理验证码的问题,否则无法继续执行后续测试。
- 在Selenium中并没有对验证码处理的方法。
- Selenium自动化测试与验证码设计初衷是矛盾的:
验证码的常用处理方式:
- 通过配置去掉验证码(测试环境下-采用)
- 开发来提供配置,如配置文件、界面配置、修改数据库等,建议使用。
- 设置万能验证码(生产环境和测试环境下-采用)
- 开发来提供万能验证码,生产和测试环境下采用,必须注意保密,建议使用。
- 验证码识别技术(通过编程语言库,识别率很难达到100%)
- OCR技术:成功率不高,验证码种类繁多,开发成本高,不太建议!
- 记录cookie(通过添加cookie:来跳过登录)
- 通过配置去掉验证码(测试环境下-采用)
验证码测试策略:
- 测试登录功能时,验证码测试策略:
- 去掉验证码(测试环境)、设置万能验证码(生产环境和测试环境)来进行自动化测试。
- 验证码部分采用手工测试方式进行测试。
- 不需要测试登录功能时,验证码测试策略:
- 记录cookie进行跳过登录。
- 测试登录功能时,验证码测试策略:
ddddocr识别验证码:
- ddddocr是由sml2h3开发的专为验证码厂商进行对自家新版本验证码难易强度进行验证的一个python库。
- 1、安装:请在pycharm解释器里安装
- 2、导入ddddocr:
import ddddocr
- 3、定位识别图片元素:
img=driver.find_element(By.....,"..")
- 4、将图片元素截图:
img.screenshot('check.png')
- 5、读图片文件的二进制:img_bytes=open('check.png','rb').read()
- 6、创建ocr对象:ocr=ddddocr.DdddOcr()
- 7、识别验证码:check_code=ocr.classification(img_bytes)
- ddddocr是由sml2h3开发的专为验证码厂商进行对自家新版本验证码难易强度进行验证的一个python库。
filename=os.path.join(os.path.dirname(os.getcwd()),"check.png")#获取当前目录的绝对路径保存图片
ele.screenshot(filename)
img_bin=open(filename,"rb").read()
ocr=ddddocr.DdddOcr()
checkcode=ocr.classification(img_bin)#识别验证码
print(checkcode)#输出验证码
driver.find_element(By.NAME,"captcha").send_keys(checkcode)
driver.find_element(By.XPATH,'//input[@value:="进入管理中心"]').click()
- 小结
- 验证码的常用处理方式
- 去掉验证码
- 设置万能验证码
- 验证码识别技术OCR
- 记录cookie跳过登录的验证码
- ddddocr识别验证码
- 导入ddddocr:
import ddddocr
- 定位识别图片元素:
img=driver.find_element(By.....,"..")
- 将图片元素截图:
img.screenshot('check.png')
- 读图片文件的二进制:img_bytes=open('check.png','rb').read()
- 创建ocr对象:ocr=ddddocr.DdddOcr()
- 识别验证码:check_code=ocr.classification(img_bytes)
- 导入ddddocr:
- 验证码的常用处理方式
上次更新: 2025/5/19 20:55:20