首页 > 其他分享 >Selenium21--验证码测试

Selenium21--验证码测试

时间:2022-12-17 12:22:33浏览次数:33  
标签:Selenium21 登录 img -- driver 验证码 测试 import

验证码简介

  • 有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是自然人访问还是计算机程序访问。
  • 验证码:简称为captcha
    • 一种随机生成的信息(数字、字母、汉字、图片、算术题、问答题)或者系统发送到客户终端的信息,为了防止恶意的请求行为,增加应用程序的安全性。
    • 防止恶意攻击、盗取信息。

验证码种类

验证码测试难点

  • Selenium自动化测试与验证码设计初衷是矛盾的:

    • selenium自动化测试:用程序替代人工操作
    • 验证码存在的意义:让自然人能操作,程序不能操作
  • Selenium测试处理验证码的原因:

    • 在web应用中,大部分系统在用户登录注册的时候都要求输入验证码,而在设计自动化测试脚本时,就需要临时处理验证码的问题,否则无法继续执行测试
    • 在selenium中并没有对验证码处理的方法

验证码的常见处理方式

  • 通过配置去掉验证码(测试环境下-采用)
    • 开发来提供配置,例如配置文件、界面配置、修改数据库等,建议使用
  • 设置万能验证码(生产环境和测试环境下-采用)
    • 开发来提供万能验证码,生产和测试环境下采用,必须注意保密,建议使用
  • 验证码识别技术(通过编程语言库)
    • OCR技术:成功率不高,验证码种类繁多,开发成本高,不建议
  • 记录cookie(通过添加cookie来跳过登录)

验证码测试策略

  • 测试登录功能时,验证码测试策略:
    • 去掉验证码(测试环境下)、设置万能验证码(生产环境和测试环境)来进行自动化测试
    • 验证码部分采用手工测试方式进行测试
  • 不需要测试登录功能时,验证码测试策略
    • 记录cookie进行跳过登录

配置去掉验证码

  • ECSHop界面上的验证码可以配置取消
    • 登录进入后台→系统设置→验证码管理

万能验证码

  • ECShop后台登录页,万能验证码是开发人员写在程序代码里的“0”,所以不管图片上是什么内容,用这个验证码始终可以登录成功。

ddddocr识别验证码

  • ddddocr是由sml2h3开发的专为验证码厂商进行对自家新版本验证码难易强度进行验证的一个python库。
    安装ddddcor
pip install ddddcor

导入ddddcor

import ddddcor

定位识别图片元素

img = driver.find_element(By.方法,参数)

将图片元素截图

img.screenshot("check.png")

读图片文件的二进制

img_bytes = open('check.png','rb').read()

创建ocr对象

ocr = ddddocr.Ddddocr()

识别验证码

check_code = ocr.classsification(img_bytes)
"""
	识别ECshop后台登录页的验证码
"""
import os
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
driver = webdriver.Firefox() # 启动浏览器
driver.get('http://localhost/upload/admin/privilege.php?act=login') # 打开后台首页
driver.find_element(By.NAME,"username").send_keys('admin') # 定位管理员姓名文本框输入用户名
driver.find_element(By.NAME,"password").send_keys('admin123')# 定位管理员密码文本框输入密码
filename = os.path.join(os.path.dirname(os.getcwd()),"screenshots","check.png") # 创建变量存放本地图片地址
driver.find_element(By.XPATH,'//img[@alt="CAPTCHA"]').screenshot(filename) # 获取验证码图片
img_binary = open(filename,'rb').read() # 读取验证码信息转为二进制模式
ocr = ddddocr.Ddddocr() # 创建验证码识别对象
captcha = ocr.classification(img_binary) # 识别验证码图片上的内容
driver.find_element(By.NAME,'captcha').send_keys(captcha) # 定位验证码文本框,输入识别出的验证码信息
driver.find_element(By.XPATH,'//input[@value="进入管理中心"]').click() # 定位进入管理中心按钮,并点击
driver.quit() # 退出浏览器

标签:Selenium21,登录,img,--,driver,验证码,测试,import
From: https://www.cnblogs.com/sean-test/p/16988818.html

相关文章

  • 题解 SP10264 METEORS - Meteors
    整体二分经典题,所以我们用分块解决Solution和整体二分类似,我们把\(k\)次操作分成\(\sqrtk\)块,每一块一起考虑。对于区间加,可以转化为差分,那么在每个块一起作差分后......
  • C/C++停车场管理系统
    C/C++停车场管理系统6.11停车场管理系统[问题详述]停车场有30个车位。每天早上6:00开放,晚上12:00关闭,关闭后禁止车辆出入。停车每小时收费PH(PH=6)元,每天停车......
  • 预编译#error的使用
    1、引言说到预编译,大家立刻就能想到#define、#if、#ifdef和#ifndef等熟悉的预编译命令。其实#include,我们通常放在源文件用来包含头文件,它也是预编译命令。当然这不是这篇......
  • LeetCode HOT 100:合并区间
    题目:56.合并区间题目描述:给你一个二维数组,类似于[[1,3],[2,6],[6,10],[15,18]],其中每一个元素表示一个区间,区间0下标表示区间左边界,1下标表示区间右边界。题目要求......
  • 【HTML基础篇002】HTML之form表单超详解
    ......
  • 前置知识:一文上手pytorch
    目录前言Pytorch基础前言Transformers库建立在Pytorch框架之上(Tensorflow的版本功能并不完善),我们需要通过Pytorch的DataLoader类来加载数据、使用Pytorch的优化器对......
  • cgroup限制进程cpu
    编写一个死循环脚本[root@workstation~]#catcircle.sh#!/bin/basha=1whiletruedo leta++done查看top使用cgroup进行资源控制[root@workstationcpu]#mk......
  • golang的标准库---bytes
    bytes—byteslice便利操作该包定义了一些操作byteslice的便利操作。因为字符串可以表示为[]byte,因此,bytes包定义的函数、方法等和strings包很类似,所以讲解时会和......
  • 前端知识案例67-javascript基础语法-object create()
    ......
  • 前端知识案例75-javascript基础语法-成员方法
    ......