python 计算验证 识别,Python自动化测试-验证识别

1、准备html

一、环境基础:Python3 + pycharm + selenium + request + Pillow,chrome浏览器的驱动程序python

1)python:这里用的是Python3.7的,安装略;web

2)pycharm:编辑器创建Python工程,安装略;算法

3)selenium:Python3环境应该自带pip.exe,只需在cmd命令窗口输入pip install selenium 进行安装;chrome

4)request:用于接口识别,只需在cmd命令窗口输入pip install request 进行安装;json

5)Pillow:用于图片切割,只需在cmd命令窗口输入pip install pillow 进行安装;api

6)chrome浏览器的驱动程序:到:http://chromedriver.storage.googleapis.com/index.html? 下载合适的 chromedriver.exe,64位的向下兼容,能够下载32的。解压后放在Python安装目录下,见 https://www.cnblogs.com/yuntimer/p/11178530.html。数组

二、易源网站-算法的接口(收费的)浏览器

1)须要注册后购买验证码接口算法,通常测试人员不会花时间去写图片识别的算法;app

2)准备 用户id(my_appId)和 密码(my_appSecret),网站里有用户使用说明;

3)识别率高达 90%,只能识别 中文、数字、英文。

2、实现

一、在易源网站-图片验证码识别-请求示例,下载Python-SDK,解压后放在Python安装目录库下(如:D:\Python37\Lib)。

二、使用selenium启动chrome浏览器,进入验证码填写页面:

'''调用chrome浏览器,打开最大化浏览器'''

driver = webdriver.Chrome() # 打开浏览器

driver.get("验证码页面地址")# 打开地址

driver.maximize_window()

time.sleep(2)

三、截图浏览器中的图片,进行切割(Pillow库),编写图片切割函数:

'''截图浏览器中的图片,进行切割(Pillow库),从网页中提取出验证码图片'''

def jietu():

driver.save_screenshot("D:/yemian.png")

'''使用坐标方式,拿到验证码左上角坐标'''

left_top = driver.find_element_by_id("captchaImg").location

print("左上角坐标",left_top)

x1 = left_top['x']# 验证码框的左上角的x轴坐标

y1 = left_top['y']# 验证码框的左上角的y轴坐标

'''取出右下角坐标'''

img = driver.find_element_by_id("captchaImg")# 定位图片

x2 = img.size['width']+x1 # 获取图片的宽度+ x1 =====》右坐标

y2 = img.size['height']+y1 # 获取图片的高度+ y1 =====》 下坐标

print("四个点的坐标",x1,y1,x2,y2)

'''利用这四个坐标切割图片'''

yan_img = Image.open("D:/yemian.png")# 打开图片

yan_ma = yan_img.crop((x1,y1,x2,y2))

yan_ma.save("D:/yanzhengma.png")# 保存到硬盘上

四、针对验证码进行识别,(易源的接口),易源网站-图片验证码识别中有对应的使用方法:

易源网站示例:

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) # 返回信息

自写实现方法:

'''再针对验证码进行识别(易源的接口)'''

def shibieyanzhengma():

# 使用接口环境访问接口地址===>前提要注意联网

yun1 = ShowapiRequest("http://route.showapi.com/184-4","my_appId","my_appSecret")

# 增长接口请求的参数

yun1.addBodyPara("typeId","36")#“36”:英数组合,6位验证码

yun1.addBodyPara("convert_to_jpg","0")#“0”:不须要图片转换

# 告诉接口识别的验证码图片文件

yun1.addFilePara("image","D:/yanzhengma.png")

# 访问接口

result = yun1.post().json()

print(result)

# 从json提炼出有效的数据

text = result['showapi_res_body']['Result']

print("验证码是",text)

return text

3、脚本

注:上面实现方法写的是 验证码识别英数_文件 类型的验证码。

一、验证识别-英数组合6位:

__author__ = "三天乐趣"

from PIL import Image

from selenium import webdriver

from ShowapiRequest import ShowapiRequest

import time

'''一、调用chrome浏览器,打开最大化浏览器'''

driver = webdriver.Chrome() # 打开浏览器

driver.get("验证码页面地址")# 打开地址

driver.maximize_window()

time.sleep(2)

'''二、截图浏览器中的图片,进行切割(Pillow库),从网页中提取出验证码图片'''

def jietu():

driver.save_screenshot("D:/yemian.png")

'''使用坐标方式,拿到验证码左上角坐标'''

left_top = driver.find_element_by_id("captchaImg").location

print("左上角坐标",left_top)

x1 = left_top['x']# 验证码框的左上角的x轴坐标

y1 = left_top['y']# 验证码框的左上角的y轴坐标

'''取出右下角坐标'''

img = driver.find_element_by_id("captchaImg")# 定位图片

x2 = img.size['width']+x1 # 获取图片的宽度+ x1 =====》右坐标

y2 = img.size['height']+y1 # 获取图片的高度+ y1 =====》 下坐标

print("四个点的坐标",x1,y1,x2,y2)

'''利用这四个坐标切割图片'''

yan_img = Image.open("D:/yemian.png")# 打开图片

yan_ma = yan_img.crop((x1,y1,x2,y2))

yan_ma.save("D:/yanzhengma.png")# 保存到硬盘上

'''三、再针对验证码进行识别(易源的接口)'''

def shibieyanzhengma():

# 使用接口环境访问接口地址===>前提要注意联网

yun1 = ShowapiRequest("http://route.showapi.com/184-4","my_appId","my_appSecret")

# 增长接口请求的参数

yun1.addBodyPara("typeId","36")

yun1.addBodyPara("convert_to_jpg","0")

# 告诉接口识别的验证码图片文件

yun1.addFilePara("image","D:/yanzhengma.png")

# 访问接口

result = yun1.post().json()

print(result)

# 从json提炼出有效的数据

text = result['showapi_res_body']['Result']

print("验证码是",text)

return text

# 运行

if __name__=="__main__":

jietu()

# 调用验证码函数获取结果

yanzhengma = shibieyanzhengma()

# 将验证码放到网页上

driver.find_element_by_name("inputCode").send_keys(yanzhengma)

# time.sleep(3)

# driver.quit()

效果1:

e2ff68ff125560f68ba90ff1001ab22f.png

二、验证码识别-算数识别_base64:

__author__ = "三天乐趣"

from PIL import Image

from selenium import webdriver

from ShowapiRequest2 import ShowapiRequest

import time

import base64

'''一、调用chrome浏览器,打开最大化浏览器'''

driver = webdriver.Chrome() # 打开浏览器

driver.get("验证码页面地址")# 打开地址

driver.maximize_window()

time.sleep(2)

'''二、截图浏览器中的图片,进行切割(Pillow库),从网页中提取出验证码图片'''

def jietu():

driver.save_screenshot("D:/yemian.png")

'''使用坐标方式,拿到验证码左上角坐标'''

left_top = driver.find_element_by_xpath("/html/body/div[1]/div/div/div[2]/form[1]/div[3]/div[2]/img").location

print("左上角坐标",left_top)

x1 = left_top['x']# 验证码框的左上角的x轴坐标

y1 = left_top['y']# 验证码框的左上角的y轴坐标

'''取出右下角坐标'''

img = driver.find_element_by_xpath("/html/body/div[1]/div/div/div[2]/form[1]/div[3]/div[2]/img")# 定位图片

x2 = img.size['width']+x1 # 获取图片的宽度+ x1 =====》右坐标

y2 = img.size['height']+y1 # 获取图片的高度+ y1 =====》 下坐标

print("四个点的坐标",x1,y1,x2,y2)

'''利用这四个坐标切割图片'''

yan_img = Image.open("D:/yemian.png")# 打开图片

yan_ma = yan_img.crop((x1,y1,x2,y2))

yan_ma.save("D:/yanzhengma.png")# 保存到硬盘上

with open("D:/yanzhengma.png",'rb') as f:

data64 = base64.b64encode(f.read())

text64 = data64.decode()# 转换成图片的base64字符串

print(text64)

return text64

'''三、再针对验证码进行识别(易源的接口)'''

def shibieyanzhengma():

# 使用接口环境访问接口地址===>前提要注意联网

yun1 = ShowapiRequest("http://route.showapi.com/184-6","my_appId","my_appSecret")

# 增长接口请求的参数

yun1.addBodyPara("img_base64",jietu())

print(yun1.post().text)

# 从json提炼出有效的数据

result = yun1.post().json()

text = result['showapi_res_body']['Result']

print("验证码是",text)

return text

# # 运行

if __name__=="__main__":

# # 调用验证码函数获取结果

yanzhengma = shibieyanzhengma()

# 将验证码放到网页上

driver.find_element_by_name("captcha").send_keys(yanzhengma)

# time.sleep(3)

# driver.quit()

效果2:

8fadf0b737aa74a71f1af47fea6b88b3.png

谢谢,继续努力!

2019-08-25

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值