1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

python自动化测试之破解图文验证码

关于Python自动化测试的介绍

我是本际云服务器推荐网的小编小本本,今天给大家介绍一下Python自动化测试的相关事宜。在测试中,经常遇到验证码这一块的问题,因此本文将详细解答如何破解图文验证码。

python自动化测试之破解图文验证码

Web自动化验证码解决方案

对于Web应用程序,为了增加系统的安全性,通常会设置各种类型的验证码,比如识别数字字母的图片、点击指定文字的图片、算术计算结果等等。这对于测试人员来说,是一个相当困难的问题。在测试过程中,一般有以下几种解决方案:

  1. 让开发去掉验证码
  2. 设置一个万能的验证码
  3. 通过cookie绕过登录
  4. 自动识别技术识别验证码

验证码解决方案示例

下面是一个识别验证码的Python程序示例,代码如下:

import os
import subprocess
from PIL import Image

def 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))
            #自己调色,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 t
    else:
        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))
            #自己调色,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,就返回数字,如果不是就返回fail
    if t.isdigit()and len(t)==4:
        return t
    else:
        return fail

综上所述,本文就是介绍到这里了,相信对于需要进行Python自动化测试的读者来说,本文所提供的解决方案会非常有帮助。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7139.html