如何使用Selenium自动化测试工具获取动态图片验证码?
关于图片验证码的文章,我想大家都应该看过类似的文章了。
在我们做UI自动化的时候,经常会遇到图片验证码的问题。
当开发不给咱们提供万能验证码,或者测试第三方网站比如知乎的时候,我们就需要自己去识别验证码。
OCR
OCR是一种图像文字识别的技术,例如图中的验证码,我们用肉眼识别就是c5s3,但机器可不比咱们肉眼。所以我们要利用ocr技术,让我们的Python脚本自动通过图片识别出对应的文字。
常见的识别类库
在Python中其实有许多识别类库,这里只介绍博主自己实践过的成功率还不错的: 百度ocr。
简单的说,就是百度提供了一个SDK,让我们传入图片数据,从而拿到识别的结果。ocr的细节我们不需要关心。
申请开通OCR
首先我们得有一个百度账号,这个相信大家都有,没有的可以申请一个。
登录百度控制台,进入https://login.bce.baidu.com/并登录。
选择文字识别:
创建应用:
填写相关应用信息:
创建好了之后可以看到具体的应用信息,记住这3个关键信息。待会会用到。
·appid
·apikey
·secret key
熟悉OCR文档
官方文档地址: https://cloud.baidu.com/doc/OCR/s/wkibizyjk
文档会写的比较清楚,简单的说就是通过你的appid,api key和secret key获取一个client,接着你就可以调用client的api去获取图片中的文字了。官方的SDK还是比较贴心的。
·安装 SDK
pip install baidu-aip
讲完了文字怎么识别,接着就来说说标题中的动态图片验证码。
动态图片验证码
这个概念是我自己命名的,一般来说,我们的一张图片都是对应唯一一个 url 的,比如:
https://yuque.com?image=dshqadiau
(这个地址是我编的)一般来说 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 作为一款老牌的自动化测试工具,很多方法供大于求了。所以它是有这样的功能的!
最后:
可以我的个人V:atstudy-js,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。
这些测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
如何使用Selenium自动化测试工具获取动态图片验证码?相关推荐
- 【Python爬虫】<万物可爬>Selenium+自动化测试工具 获取数据
目录 第一个爬虫程序: Web请求的全过程剖析: HTTP协议: 请求: 请求头中常见的重要内容: 请求方式: 响应: Requests: 数据解析: 数据提取的三种解析方式: 正则表达式: 爬取案例 ...
- Python高级特性与网络爬虫(二):使用Selenium自动化测试工具爬取一号店商品信息
上一篇介绍了Ajax动态渲染的页面的分析和爬取,通过JavaScript动态渲染的页面的方式不只有ajax这一种,还有很多其他的方式,分析他们的网页结构和加密参数难度非常大,为了解决这样的页面的数据爬 ...
- 第六章 selenium自动化测试工具:天下工具为我所用
简介 Selenium是一个Web的自动化测试工具,类型像我们玩游戏用的按键精灵,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器). Selenium 可以根据我们的指令,让浏览器自 ...
- Selenium自动化测试工具的介绍与使用
Selenium自动化测试 什么是自动化测试 自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行 结果.总的概括即:将人为驱动的测试行为转化为机器执行 ...
- 禅道与selenium自动化测试工具
文章目录 一.禅道 1.禅道是什么工具? 二.selenium 1.什么是自动化测试? 2.自动化测试工具(为什么要选择selenium工具) 3.自动化测试的分类 4.自动化测试的优势 5.什么项目 ...
- Selenium自动化测试-7.获取元素属性信息
------·今天距2020年76天·------ 这是ITester软件测试小栈第60次推文 大家好 我是vivi小胖虎 做自动化测试 往往避免不了 获取元素信息 获取元素属性 获取元素状态 今天就 ...
- Vue——如何获取动态图片地址
问题 当我们在Vue页面显示当前登录用户的头像时,该如何加载后端传过来的动态图片地址呢? 这时是固定地址,第一时间我们想到直接在src前加:,使用vue的双向数据绑定即可,但是试了多次没有效果,原来要 ...
- Python + Selenium(九)- 解决图片验证码登录或注册问题
1. 解决思路 首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载. 解决方案:截图然后根据该图片的定位和长高,使用工具进行裁剪 裁剪完毕之后,使用工具解析该图片. ...
- Java-生成动态图片验证码
先看效果: 获取验证码接口: @Overridepublic Map getPictureCode() {GifCaptcha gifCaptcha = new GifCaptcha(130, 48, ...
最新文章
- 服务器负载不高 响应慢_京东面试官问我什么是负载均衡,兄弟们我这样说对嘛?...
- springboot接口慢_【SpringBoot】 一种解决接口返回慢的方式
- python+selenium+unittest测试框架1-unittest单元测试框架和断言
- 计算机包含着什么,计算机基础的包含是什么?
- oracle怎么设置脚本,ORACLE安装预设置脚本
- index.php p=,弃用p值:你准备好了吗?
- 阶段3 2.Spring_07.银行转账案例_6 测试转账并分析案例中的问题
- IBM AIX5.3 linux下C/C++实现HTTPS接口
- python壁球小游戏——pygame之旅
- 两个实用型教学网站:菜鸟教程与W3School,估计是国内做得做好的了
- 教你如何挑选趁手的笔记本电脑!
- ARM开发比51开发高级吗—嵌入式就业技能分类
- SQL Server数据库的创建方法
- 你可以和十八岁一无所有的男生谈恋爱,但是当他二十八岁的时候还是一无所有,我劝你趁着离开。...
- zabbix的mysql模板_使用Zabbix自带MySQL模板监控MySQL
- 谈谈我对软件开发项目管理的理解
- 如何搭建自己的网站(二)
- Day429430431.订单服务 -谷粒商城
- Go 开源说第二期:GORM 剖析与最佳实践
- hfc网络文件服务器怎么用,HFC网络,HFC网络结构组成是什么?
热门文章
- Mysql中find_in_set()函数与in()函数的用法
- Redis设计与实现之跳跃表
- (java)leetcode121 买卖股票的最佳时机1(Best Time to Buy and Sell Stock)针对数组的峰值和谷底的操作
- SQL Server 数据库设计(ER图)
- The World's 100 Greatest Classical Composers
- 集成方法-随机森林和AdaBoost
- android 自定义侧边栏,android界面设计(一)侧边栏的两种实现方式
- AFNetworking2.4.1解析
- 【Linux】Ubuntu下搜狗拼音输入法
- cmd命令查看端口和进程信息