自动化测试之验证码识别
前序工作:使用jpress进行测试(需要注册安装),需要安装Java,tomcat,mysql,这里请自行百度安装。然后运行tomcat,以管理员身份运行cmd打开mysql,进入。
打开mysql
以管理员身份运行cmd
直接进入对应盘(以D盘为例)-----输入d:
进入d盘其他目录------cd D:\mysql\mysql-5.7.35-winx64\bin
输入net start mysql
在浏览器输入http://localhost:8080/jpress/user/register
记录下自动化测试时两种常用的验证码识别方法
方法1–使用pytesseract识别
这里使用jpress网站进行测试:话不多说,直接上代码
#coding:utf-8
###############测试获取简单验证码
import time
from time import sleep
import pytesseract
from selenium import webdriver
from PIL import Image
#测试截取验证码
def test1():
#打开谷歌浏览器
browser=webdriver.Chrome(r'd:/chromedriver.exe')
#打开首页
browser.get('http://localhost:8080/jpress/user/register')
#窗口最大化
browser.maximize_window()
#获取验证码图片
t=time.time()
picture_name1=str(t)+'.png'
#截屏
browser.save_screenshot(picture_name1)
#验证码id
ce=browser.find_element_by_id("captchaimg")
print(ce.location)
print(ce.rect)
##########第一种写法
k=1.5
#确定左顶点坐标
left=ce.location['x']*k
top=ce.location['y']*k
#确定右底点坐标
right=ce.size['width']*k+left
height=ce.size['height']*k+top
# 将图片打开
im = Image.open(picture_name1)
# 抠图
img = im.crop((left,top,right,height))
##########第二种写法
# location=ce.location
# size=ce.size
# k = 1.5
# rangle = (location['x'] * k, location['y'] * k, location['x'] * k + size['width'] * k, location['y'] * k + size['height'] * k)
# #将图片打开
# im=Image.open(picture_name1)
# #抠图
# img=im.crop(rangle)
t=time.time()
#抠图后保存为第二张图片吧
picture_name2=str(t)+'.png'
img.save(picture_name2)#截取到的验证码图片
browser.close()
def test2():
#打开截取的图片
image1=Image.open(r'ss.png')
print(image1)
#转换输出验证码
str=pytesseract.image_to_string(image1)
print(str)
方法2–使用第三方api识别(这里用的showapi)
这里需要登录网址https://www.showapi.com/apiGateway/view/?apiCode=184&pointCode=4
注册后下载sdk,然后添加上述代码,替换对应位置my_appId"
,"my_appSecret
,"替换为你的文件"
# python3.6.5
# 需要引入requests包 :运行终端->进入python/Scripts ->输入:pip install requests
from ShowapiRequest import ShowapiRequest
r = ShowapiRequest("http://route.showapi.com/184-4","my_appId","my_appSecret" )
r.addFilePara("image", "替换为你的文件")
r.addBodyPara("typeId", "34")
r.addBodyPara("convert_to_jpg", "0")
r.addBodyPara("needMorePrecise", "0")
res = r.post()
print(res.text) # 返回信息
方法3–使用第三方api识别(这里用的超级鹰)
第一种方法可能会遇到一些常见的问题,我写在其他博客里啦(给自己打广告哈哈)
问题1:pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it’s not in your path
https://blog.csdn.net/qq_37866023/article/details/119361868
问题2:python3.8安装pyautogui失败,报错Requirement already satisfied解决
https://blog.csdn.net/qq_37866023/article/details/119360796
问题3:selenium中使用location无法定位验证码
https://blog.csdn.net/qq_37866023/article/details/119353060
问题4:pyautogui中moveTo无法定位