当前位置: 首页 > news >正文

Web自动化测试之图文验证码的解决方案

对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码, 验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动验证的。 诸如此类的验证码,对我们的系统增加了安全性的保障,但是对于我们测试人员来讲,在自动化测试的过程中,无疑是一个棘手的问题。

1、Web 化验证码解决方案

一般在我们测试过程中,登录遇到上述的验证码的时候,有以下种解决方案:

  • 第一种、让开发去掉验证码
  • 第二种、设置一个万能的验证码
  • 第三种、通过 cookie 绕过登录
  • 第四种、自动识别技术识别验证码

2、验证码解决方案

# coding:utf-8
import os
import subprocess
from PIL import Imagedef get_captcha(driver, captcha_id, full_screen_img_path, captcha_img_path, captcha_final_path, txt_path, ocr_path):# 浏览器界面截图driver.save_screenshot(full_screen_img_path)# 找到验证码图片,得到它的坐标element = driver.find_element_by_id(captcha_id)left = element.location['x']top = element.location['y']right = element.location['x'] + element.size['width']bottom = element.location['y'] + element.size['height']left, top, right, bottom = int(left), int(top), int(right), int(bottom)img = Image.open(full_screen_img_path)img = img.crop((left, top, right, bottom))# 得到验证码图片img.save(captcha_img_path)# 打开验证码图片img = Image.open(captcha_img_path)# 颜色直方图,255种颜色,255为白色# 新建一张图片(大小和原图大小相同,背景颜色为255白色)img_new = Image.new('P', img.size, 255)for x in range(img.size[1]):for y in range(img.size[0]):# 遍历图片的xy坐标像素点颜色pix = img.getpixel((y, x))# print(pix)# 自己调色,r=0,g=0,b>0为蓝色if pix[0] < 20 and pix[1] < 20 and pix[2] > 50:# 把遍历的结果放到新图片上,0为透明度,不透明img_new.putpixel((y, x), 0)img_new.save(captcha_final_path, format='png')# 通过tesseract工具解析验证码图片,生成文本os.system(ocr_path)# 读取txt文件里面的验证码with open(txt_path, 'r') as f:if f.read():t = f.read().strip()# 去掉中间空格if ' ' in t:t = t.replace(' ', '')if t.isdigit() and len(t) == 4:return telse:return 'fail'def check_resp(result, msg):if msg in result:return 'pass'else:return 'failed'# 接口 - 识别验证码
def get_captcha(captcha_img_path, captcha_final_path, txt_path, ocr_path):# 打开验证码图片img = Image.open(captcha_img_path)# 新建一张图片(大小和原图大小相同,背景颜色为255白色)img_new = Image.new('P', img.size, 55)for x in range(img.size[1]):for y in range(img.size[0]):# 遍历图片的xy坐标像素点颜色pix = img.getpixel((y, x))# print(pix)# 自己调色,r=0,g=0,b>0为蓝色if pix[0] < 20 and pix[1] < 20 and pix[2] > 50:# 把遍历的结果放到新图片上,0为透明度,不透明img_new.putpixel((y, x), 0)img_new.save(captcha_final_path, format='png')# 通过tesseract工具解析验证码图片,生成文本,【Tesseract-OCR必须和jpg的根目录必须相同,如C盘、D盘!!!】os.system(ocr_path)# 读取txt文件里面的验证码with open(txt_path, 'r') as f:if r.read():t = f.read().strip()# 去掉中间空格if ' ' in t:t = t.replace(' ', '')# 如果是数字且长度为4,就返回数字,如果不是就返回 failif t.isdigit() and len(t) == 4:return telse:return fail

 下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

 

资料获取方式 :

 

相关文章:

Web自动化测试之图文验证码的解决方案

对于web应用程序来讲&#xff0c;处于安全性考虑&#xff0c;在登录的时候&#xff0c;都会设置验证码&#xff0c; 验证码的类型种类繁多&#xff0c;有图片中辨别数字字母的&#xff0c;有点击图片中指定的文字的&#xff0c;也有算术计算结果的&#xff0c;再复杂一点就是滑…...

软考高级系统架构设计师系列论文九十:论分布式数据库的设计与实现

软考高级系统架构设计师系列论文九十:论分布式数据库的设计与实现 一、分布式数据库相关知识点二、摘要三、正文四、总结一、分布式数据库相关知识点 软考高级系统架构设计师系列之:分布式存储技术...

Day 84:网络结构与参数

单层数据 package dl;/*** One layer, support all four layer types. The code mainly initializes, gets,* and sets variables. Essentially no algorithm is implemented.*/ public class CnnLayer {/*** The type of the layer.*/LayerTypeEnum type;/*** The number of …...

vue2.6及以下版本导入 TDesign UI组件库

TDesign 官方文档:https://tdesign.tencent.com/vue/components/button 我们先打开一个普通的vue项目 然后 如果你是 vue 2.6 或者 低于 2.6 在终端执行 npm i tdesign-vue如果你是 2.7 或者更高 执行 npm i tdesign-vuenaruto这里 我们 以 2.6为例 因为大部分人 用vue2 都是…...

VR/AR/眼镜投屏充电方案(LDR6020)

VR眼镜即VR头显&#xff0c;也称虚拟现实头戴式显示设备&#xff0c;随着元宇宙概念的传播&#xff0c;VR眼镜的热度一直只增不减&#xff0c;但是头戴设备的续航一直被人诟病&#xff0c;如果增大电池就会让头显变得笨重影响体验&#xff0c;所以目前最佳的解决方案还是使用VR…...

区分什么是Java内存模型(JMM)和 JVM运行时数据区

文章目录 一、概念区分1、什么是内存模型&#xff1f;什么是&#xff08;内存区域&#xff09;运行时数据区&#xff1f;2、为什么要有Java内存模型&#xff1f;2.1、硬件的效率与一致性2.2、 CPU和缓存的一致性2.2.1、为什么需要CPU cache&#xff1f;2.2.2、三级缓存&#xf…...

Flask狼书笔记 | 04_表单

文章目录 4 表单4.1 HTML表单4.2 使用Flask-WTF4.3 处理表单数据4.4 表单进阶实践小记 4 表单 表单是和用户交互最常见的方式之一&#xff0c;本章涉及的Python包由WTForms、Flask-WTF、Flask-CKEditor。&#xff08;p104&#xff09; 4.1 HTML表单 通过<form>标签创建…...

RabbitMQ+springboot用延迟插件实现延迟消息的发送

延迟队列&#xff1a;其实就是死信队列中消息过期的特殊情况 延迟队列应用场景&#xff1a; 可以用死信队列来实现&#xff0c;不过死信队列要等上一个消息消费成功&#xff0c;才会进行下一个消息的消费&#xff0c;这时候就需要用到延迟插件了&#xff0c;不过要线在docker上…...

多线程和并发(1)—等待/通知模型

一、进程通信和进程同步 1.进程通信的方法 同一台计算机的进程通信称为IPC&#xff08;Inter-process communication&#xff09;&#xff0c;不同计 算机之间的进程通信被称为 RPC(Romote process communication)&#xff0c;需要通过网络&#xff0c;并遵守共同的协议。**进…...

浏览器的事件循环

其实在我们电脑的操作系统中&#xff0c;每一个运行的程序都会由自己的进程&#xff08;可能是一个&#xff0c;也可能有多个&#xff09;&#xff0c;浏览器就是一个程序&#xff0c;它的运行在操作系统中&#xff0c;拥有一组自己的进程&#xff08;主进程&#xff0c;渲染进…...

跳跃游戏 II【贪心算法】

跳跃游戏 II class Solution {public int jump(int[] nums) {int cur 0;//当前最大覆盖路径int next 0;//下一步的最大覆盖路径int res 0;//存放结果&#xff0c;到达终点时最少的跳跃步数for (int i 0; i < nums.length; i) {//遍历数组&#xff0c;以给出数组以一个…...

promise

promise 属于事件循环的微任务&#xff0c;具体详见&#xff1a;事件循环 Promise 语法: const p1 new Promise((reslove,reject)>{console.log(2);reslove(1) }).then((data)>{console.log(3);console.log(data) }).catch((data)>{console.log(3); }) promise.th…...

前端面试:【网络协议与性能优化】HTTP/HTTPS、TCP/IP和WebSocket

嗨&#xff0c;亲爱的Web开发者&#xff01;在构建现代Web应用时&#xff0c;了解网络协议是优化性能和确保安全性的关键。本文将深入探讨HTTP/HTTPS、TCP/IP和WebSocket这三个网络协议&#xff0c;帮助你理解它们的作用以及如何优化Web应用的性能。 1. HTTP/HTTPS协议&#xf…...

设计模式之工厂模式(万字长文)

文章目录 概述工厂模式的优点包括工厂模式有几种主要的变体看一个具体需求使用传统的方式来完成传统的方式的优缺点 简单工厂模式基本介绍使用简单工厂模式简单工厂模式的优缺点优点&#xff1a;缺点&#xff1a; 工厂方法模式看一个新的需求思路 1思路 2工厂方法模式介绍工厂方…...

CNN 02(CNN原理)

一、卷积神经网络(CNN)原理 1.1 卷积神经网络的组成 定义 卷积神经网络由一个或多个卷积层、池化层以及全连接层等组成。与其他深度学习结构相比&#xff0c;卷积神经网络在图像等方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他浅层或深度神经…...

Android View动画整理

View 动画相关内容可参考官网 动画资源 此前也有写 View 动画相关的内容&#xff0c;但都只是记录代码&#xff0c;没有特别分析。以此篇作为汇总、整理、分析。 Android View 动画有4中&#xff0c;分别是 平移动画 TranslateAnimation缩放动画 ScaleAnimation旋转动画 Rot…...

阿里云架构

负载均衡slb 分类以及应用场景 负载均衡slb clb 传统的负载均衡(原slb) 支持4层和7层(仅支持对uri(location),域名进行转发) 一般使用slb(clb) alb 应用负载均衡 只支持7层,整合了nginx负载均衡的各种功能,可以根据用户请求头,响应头 如果需要详细处理用户请求(浏…...

【C语言】操作符大全(保姆级介绍)

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将详细介绍各种操作符的功能。 目录&#xff1a; &#x1f4d8; 前言① 算术操作符②移位操作符③位操作符④赋值操…...

ruoyi-cloud部署

默认你已经安装mysql&#xff0c;nacos&#xff0c;seata&#xff0c;sentinel等&#xff08;没有的可以先找教程安装&#xff09; 1、下载源码&#xff1a;git clone https://gitee.com/zhangmrit/ruoyi-cloud 2、项目依赖导入&#xff0c;选择自己的maven环境等&#xff0c;创…...

Vue3(开发h5适配)

在开发移动端的时候需要适配各种机型&#xff0c;有大的&#xff0c;有小的&#xff0c;我们需要一套代码&#xff0c;在不同的分辨率适应各种机型。 因此我们需要设置meta标签 <meta name"viewport" content"widthdevice-width, initial-scale1.0">…...

图的存储:邻接矩阵法

1.邻接矩阵的实现 邻接矩阵的定义&#xff1a;在无向图和有向图中&#xff0c;使用二维数组表示各个顶点的相邻情况&#xff1a;1代表相邻&#xff0c;0表示不相邻。 代码实现&#xff1a; #define MaxVertexNum 100//顶点数目的最大值 typedef struct {char Vex [MaxVertexN…...

如何优雅的使用Git?

第一部分&#xff1a;Git的基本概念和初始设置 Git是一个分布式版本控制系统&#xff0c;它允许多人共同工作&#xff0c;同时跟踪和管理项目的版本历史。使用Git&#xff0c;您可以恢复旧版本、创建新分支进行实验&#xff0c;并与其他开发者进行协作&#xff0c;而不会影响主…...

【【STM32分析IO该设置什么模式的问题】】

STM32分析IO该设置什么模式的问题 我们分析而言 我们对于PA0 的设计就从此而来 对于边沿触发的选择我们已经有所了解了 我们下拉&#xff0c;但是当我们摁下开关的时候 从0到1 导通了 所以这个是下拉 上升沿触发 而对于KEY0 我们摁下是使得电路从原来悬空高阻态到地就是0 所以…...

飞天使-k8s基础组件分析-服务与ingress

文章目录 服务的介绍服务代理服务发现连接集群外服务服务发布无头服务 服务&#xff0c;pod和dns的关系端口转发通过expose 暴露应用服务案例INGRESSMetalLB使用参考文档 服务的介绍 服务的作用是啥&#xff1f; 提供外部调用&#xff0c;保证podip的真实性看看服务解决了什么…...

Unity——拖尾特效

拖尾是一种很酷的特效。拖尾的原理来自人类的视觉残留&#xff1a;观察快速移动的明亮物体&#xff0c;会看到物体移动的轨迹。摄像机通过调整快门时间&#xff0c;也可以拍出具有拖尾效果的照片&#xff0c;如在城市的夜景中&#xff0c;汽车的尾灯拖曳出红色的线条。 在较老…...

java开发之fastjson

依赖 <!-- fastjson依赖 --> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> <…...

第一个C语言程序:HelloWorld

第一个C语言程序 注释 注释 对代码的解释和说明 特点 ○ 不会被执行 目的 让人们能够更加轻松地看懂代码 分类 行注释 // 快键键 ctrl/ 块注释 /**/ 快捷键 shiftalta 示例代码&#xff1a; #include <stdio.h>int main() {// 行注释/*块注释*/printf("hello w…...

golang 使用 viper 加载配置文件 自动反序列化到结构

文章博客地址:golang 使用 viper 加载配置 自动反序列化到结构 golang使用 viper 无需设置 mapstructure tag 根据配置文件后缀 自动返序列化到结构解决结构有下划线的字段解析不成功问题 viper 正常加载配置文件 golang viper 其中可以用来 查找、加载和反序列化JSON、TOML…...

C#设计模式六大原则之--接口隔离原则

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守&#xff0c;而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内&#xff0c;努为做到一个良好的设计。本文主要介绍一下.NET(C#)…...

【面试题】:axios二次封装都进行了哪些配置以及如果项目里面有两个baseURL你怎么解决?

一.axios的概念 Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 二.axios的特点&#xf…...

个人制作一个网站的费用/交换友情链接的方法

http://www.cnblogs.com/hh54188/archive/2011/04/09/1996469.html 动画队列解释 animate 必需的 params 参数定义形成动画的 CSS 属性。 可选的 speed 参数规定效果的时长。它可以取以下值&#xff1a;"slow"、"fast" 或毫秒。 可选的 callback 参数是动…...

深圳网站建设小江/泉州网站seo外包公司

智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff0c;可…...

河北中保建设集团网站首页/400个成品短视频

2019独角兽企业重金招聘Python工程师标准>>> Connector配置 Connector 属于 StandardService 里的一个组件&#xff0c;可以在 server.xml 中配置&#xff0c;指定协议、端口、超时时间等。 1 2 3 4 <Service name"Catalina"><Connector port&q…...

网站建设 技术支持 阿里/韩国电视剧

一.网络架构层次模型 1.网络层次架构组成如图&#xff1a; 核心层&#xff1a;放置外网互联路由器设备 核心层的功能主要是实现骨干网络之间的优化传输&#xff0c;骨干层设计任务的重点通常是冗余能力、可靠性和高速的传输 汇聚层&#xff1a;放置的三层交换机 汇聚层是楼群或…...

网站制作建设有哪些/软文客

写在最前&#xff1a;该篇文章还未完成&#xff0c;待进一步更新...。。一、初始 MycatMHALVS1、为什么选择 Mycat&#xff1f;互联网的高速发展使分布式技术兴起&#xff0c;当系统的压力越来越大时&#xff0c;人们首先想到的解决方案就是想上扩展(scale up)&#xff0c;简单…...

电脑如何做穿透外网网站/如何制作一个网页页面

从域控架构到中央集成式架构&#xff0c;跨域融合已经加速到来&#xff0c;从单一域控制器&#xff0c;到多域融合中央计算&#xff0c;市场门槛进一步抬升&#xff0c;市场也进入新一轮「攻坚」阶段。 高工智能汽车研究院发布《2023-2025年智能网联产业趋势报告》显示&#x…...