关于图片验证码的文章我想大家都应该看过类 似的文章了。在我们做UI自动化的时候经常会遇到图片验证码的问题。当开发不给咱们提供万能验证码或者测试第三方网站比如知乎的时候我们就需要自己去识别验证码。OCROCR是一种图像文字识别的技术例如图中的验证码我们用肉眼识别就是c5s3但机器可不比咱们肉眼。所以我们要利用OCR技术让我们的Python 脚本自动通过图片识别出对应的文字。常见的识别类库在Python中其实有许多识别类库这里只介绍博主自己实践过的成功率还不错的: 百度OCR。简单来说就是百度提供了一个SDK让我们传入图片数据从而拿到识别的结果OCR的细节我们不需要关心。申请开通OCR首先我们得有一个百度账号这个相信大家都有没有的可以申请一个。01 登录百度控制台进入https://login.bce.baidu.com/并登录。02 选择文字识别03 创建应用04 填写相关应用信息创建好了之后可以看到具体的应用信息记住这3个关键信息待会会用到appidapikeysecret key熟悉OCR文档官方文档地址: https://cloud.baidu.com/doc/OCR/s/wkibizyjk文档会写得比较清楚简单的说就是通过你的appid、api key和secret key获取一个client接着你就可以调用client的api去获取图片中的文字了官方的SDK还是比较贴心的。01 安装SDKpip install baidu-aip讲完了文字怎么识别接着就来说说标题中的动态图片验证码。动态图片验证码这个概念是我自己命名的一般来说我们的一张图片都是对应唯一一个url的比如https://yuque.com imagedshqadiau (这个地址是我编的)。一般来说image字段的值不同图片也就不同都是一串随机的或者规律的不重复数据确保图片不会重复。但是博主最近遇到了这样一种情况输入一个url每次输入拿到的图片都不一样。这样就会带来一个很严重的问题页面上你虽然读取了图片的信息。我们把图片的url传递给百度sdk的时候url由于再次调用导致图片发生了变化。比如网站上显示的是: c5s3调用百度sdk的时候百度会通过url读取图片但再次读取图片可能变成了lfew。不信大家可以看看这个图片地址:怎么解决呢好在百度sdk他不仅仅支持url还支持图片文件和base64的图片数据。我们看看官方文档:再回到Selenium里面我们怎么才能获取到验证码那张图片呢思考一下1.读取img标签的src然后下载图片保存图片文件再转为base64。很显然这个方法行不通为什么呢因为img的src属性就是刚才这个url你去获取一遍url它同样会变化。2.截图裁剪出验证码部分扔给百度去识别。可行是可行但是会不会太复杂了如果我只对验证码的img元素进行截图生成base64的数据是不是更方便其实呢Selenium作为一款老牌的自动化测试工具很多方法供大于求了。所以它是有这样的功能的Selenium对指定区域截图我们都知道Selenium有一些截图方法。driver.get_screenshot_as_file(filename)但其实针对元素也是有截图方法的伪代码如下:# 通过id获取到图片 img driver.find_element_by_id(image) # 调用WebElement的screenshot_as_png属性方法获取到png的数据因为百度需要png data img.screenshot_as_png接着我们就可以用这个获取到的图片数据去找百度要答案了完整版代码:from aip import AipOcr from selenium import webdriver client AipOcr(你的appid, 你的app_key, 你的secret_key) driver webdriver.Chrome() driver.get(https://iam.pt.ouchn.cn/am/UI/Login) img driver.find_element_by_id(kaptchaImage) data img.screenshot_as_png res client.basicGeneral(data, {}) print(res)可以看到只识别到了CFX而且图片没有继续变化了。毕竟文字识别是从图片里面找文字而且文字会有一些横线这样的干扰所以如果一次不行可以多试几次。思路就是写一个while循环不断尝试去识别验证码并登录接着判断是否登录成功没成功则重复上一个步骤。以我个人的经验一般1-10次就可以成功。好了以上是博主简单替大家尝试一下UI自动化过程中对于验证码的识别主要重点在于验证码的识别和对部分区域截图。最后下方这份完整的软件测试 视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。