首页 > 其他分享 >自动化测试中的验证码处理

自动化测试中的验证码处理

时间:2024-11-01 23:41:43浏览次数:2  
标签:测试 driver 验证码 captcha file 自动化 path name

在自动化测试中,处理验证码往往是一个挑战,尤其是图形验证码。每次刷新生成的验证码内容各不相同。获取验证码的方法通常有两种:

获取验证码图片链接:例如 src="http://example.com/getcaptcha/123",但这种方法有时并不可靠,因为通过链接访问的验证码可能与当前页面显示的验证码不一致。

使用Selenium截屏:首先截取整个可视区域,然后定位验证码元素,获取其位置和大小,接着使用PIL模块裁剪出验证码图像,最后进行图像识别。

方法一:获取验证码图片地址并下载
以下是获取验证码图片地址并下载的代码示例:

python

import random # 导入 random 模块
from utils.file import save_image # 引入下载图片的函数

获取验证码图片地址

captcha_src = driver.find_element_by_id('captchaImage').get_attribute('src') # 获取验证码图片地址
img_url = captcha_src + '.png' # 拼接下载地址
file_name = random.randint(0, 100000) # 生成随机文件名
file_path = 'img\login' # 保存路径
save_image(img_url, file_name, file_path) # 下载图片
下载图片的函数
python
更多内容访问ttocr.com或联系1436423940
import urllib.request
import os

def save_image(img_url, file_name, file_path):
try:
if not os.path.exists(file_path):
os.makedirs(file_path) # 创建文件夹
file_suffix = os.path.splitext(img_url)[1] # 获取文件后缀
filename = os.path.join(file_path, f"{file_name}{file_suffix}") # 拼接文件名
urllib.request.urlretrieve(img_url, filename=filename) # 下载图片
print('图片保存成功')
except Exception as e:
print('保存图片时发生错误:', e)
方法二:使用Selenium截屏并裁剪验证码
除了下载验证码图片,我们还可以直接在页面上截屏并裁剪出验证码。这是更为常用的方法,具体步骤如下:

python

from PIL import Image
import random
import pytesseract # 导入识别验证码的库
import time

def image_cj(driver, save_path, captcha_id):
try:
# 生成随机文件名
file_name = random.randint(0, 100000)
file_url = os.path.join(save_path, f"{file_name}.png")
driver.save_screenshot(file_url) # 截取整个页面

    captcha_elem = driver.find_element_by_id(captcha_id)  # 定位验证码元素
    location = captcha_elem.location  # 获取元素坐标
    size = captcha_elem.size  # 获取元素大小

    # 计算裁剪区域
    left = location['x']
    top = location['y']
    right = left + size['width']
    bottom = top + size['height']

    # 裁剪验证码
    img = Image.open(file_url)
    img_captcha = img.crop((left, top, right, bottom))
    captcha_file_name = f"{file_name}_captcha.png"
    img_captcha.save(os.path.join(save_path, captcha_file_name))  # 保存裁剪后的验证码
    return captcha_file_name
except Exception as e:
    print('裁剪验证码时发生错误:', e)

获取验证码内容并输入
接下来,我们可以使用Tesseract识别验证码的内容,并将其输入到登录框中:

python

def recognize_and_input_captcha(driver, save_path, captcha_file_name):
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # Tesseract路径
captcha_image_path = os.path.join(save_path, captcha_file_name)

# 识别验证码内容
image = Image.open(captcha_image_path)
captcha_text = pytesseract.image_to_string(image)
print('识别出的验证码内容:', captcha_text.strip())

# 输入验证码
driver.find_element_by_id('verfieldUserText').send_keys(captcha_text.strip())  # 填写验证码

登录流程
最后,将所有步骤整合到登录流程中:

python

from selenium import webdriver
import time

driver = webdriver.Chrome() # 启动浏览器
driver.get('http://example.com/login') # 打开登录页面

输入用户名和密码

driver.find_element_by_id('loginNameText').send_keys('username')
driver.find_element_by_id('passwordText').send_keys('password')
time.sleep(2)

截图并输入验证码

captcha_file_name = image_cj(driver, 'img\login', 'captchaImage')
recognize_and_input_captcha(driver, 'img\login', captcha_file_name)

提交登录

driver.find_element_by_id('loginButton').click()

检查登录状态

if "欢迎" in driver.page_source:
print('登录成功!')
else:
print('登录失败,验证码可能输入错误。')

标签:测试,driver,验证码,captcha,file,自动化,path,name
From: https://www.cnblogs.com/ocr1/p/18521490

相关文章

  • 验证码处理在自动化测试中的应用
    在进行自动化测试时,处理验证码是一项常见的挑战,特别是图形验证码。每次刷新都会生成新的验证码,因此我们可以采用以下两种方法来获取验证码:获取验证码图片链接:例如src="http://example.com/getcaptcha/123",但这种方式并不总是可靠,因为通过链接访问的验证码可能与当前页面显示的不......
  • 【shell脚本】使用 Shell 脚本比较和同步目录:自动化文件管理的利器
    原创日常运维文档在系统管理中,比较两个目录的内容是一项常见任务,尤其在数据备份和服务器维护时,它显得尤为重要。为此,我们可以使用Shell脚本来简化这个过程,实现自动化。下面将对一个名为compare_files.sh的脚本进行详细介绍,该脚本能够比较目录大小并使用rsync检查内容一......
  • D55【python 接口自动化学习】- python基础之模块与标准库
     day55练习:实现求导学习日期:20241101学习目标:模块与标准库--70小试牛刀:如何使用Python为函数求导?学习笔记:需求分析使用第三方模块实现函数求导编写程序并测试#求导fromsympyimportDerivative,Symbolx=Symbol('x')y=x*x+3*x+2d=Derivative(y,x)pri......
  • D52【python 接口自动化学习】- python基础之模块与标准库
    day52标准库学习日期:20241029学习目标:模块与标准库--67标准库:Python默认提供的便携功能有哪些?学习笔记标准库中的常见组件如何通过官方文档学习标准fromurllib.requestimporturlopenwithurlopen('http://www.baidu.com')asf:print(f.read(300)......
  • 基于Java中的SSM框架实现企业办公自动化系统项目【项目源码+论文说明】计算机毕业设计
    基于java中的SSM框架实现企业办公自动化系统演示【内附项目源码+LW说明】摘要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对小型企业办公信息管理混乱,出错......
  • ROS2小乌龟测试
    ROS2小乌龟测试下载turtlesim功能包source/opt/ros/humble/setup.bashgitclonehttps://github.com/ros/ros_tutorials.git-bhumble-devel#创建工作空间mkdir-pturtle_dev/src&&cdturtle_dev/src解决依赖rosdepinstall-i--from-pathsrc--rosdistroeloque......
  • 【MemTester】内存测试工具Memtester使用方法
    1.MemTester简介MemTester是一个用于压力测试内存子系统的工具,它特别有效于发现间歇性和非确定性的故障。以下是MemTester的一些主要特点和功能:内存错误捕获:MemTester主要用于捕获内存错误和识别一直处于高或低电平的坏位。多种测试项目:它提供了一系列测试项目,包括随机值测试......
  • 实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)
    注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路如有侵犯,请联系作者下架某盾的增强版滑块已经上线很久了,最近心血来潮想看一下这个验证码是骡子是马,我也翻阅了很多市面上的教程,都对该验证码有一定的简介,部分还停留在理论层面,本文将从浅到深......
  • USB 几种常规眼图测试
    USB眼图测试通常用于评估USB信号的质量和传输性能。眼图测试主要分为以下几类:PHY测试:这是USB物理层(PHY)的眼图测试,主要针对信号完整性和抖动等参数进行测量。PHY测试会直接分析数据线(如D+/D-)的信号波形,评估信号在传输过程中受到的干扰、失真以及反射。通过这些测试,可以确定PHY是......