一、准备

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

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

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

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

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

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

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

2、易源网站-算法的接口(收费的)

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

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

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

二、实现

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

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

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

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

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

driver.maximize_window()

time.sleep(2)

3、截图浏览器中的图片,进行切割(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")# 保存到硬盘上

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

易源网站示例:

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

三、脚本

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

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

__author__ = "三天乐趣"

from PIL import Image

from selenium import webdriver

from ShowapiRequest import ShowapiRequest

import time

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

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

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

driver.maximize_window()

time.sleep(2)

'''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")# 保存到硬盘上

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

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:

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

__author__ = "三天乐趣"

from PIL import Image

from selenium import webdriver

from ShowapiRequest2 import ShowapiRequest

import time

import base64

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

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

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

driver.maximize_window()

time.sleep(2)

'''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

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

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:

谢谢,继续努力!

2019-08-25

python识图自动化_Python自动化测试-验证识别相关推荐

  1. python识图 web_python如何调用百度识图api

    一.先去百度识别官网注册开通服务且获得ak和sk 链接:https://cloud.baidu.com/doc/Reference/s/9jwvz2egb 二.代码模板 import cv2 impo ...

  2. python 三维图直方图_Python | 阶梯直方图

    python 三维图直方图 A histogram is a graphical technique or a type of data representation using bars of di ...

  3. python 识图点击_Python图片识别——人工智能篇

    一.安装pytesseract和PIL PIL全称:Python Imaging Library,python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力. 由于PIL仅支 ...

  4. python 识图点击_Python图片识别找坐标(appium通过识别图片点击坐标)

    ***如果只想了解图片相似度识别,直接看第一步即可 ***如果想了解appium根据图片识别点击坐标,需要看第一.二.三步 背景|在做UI测试时,发现iOS自定义的UI控件,appium识别不到.所以 ...

  5. python识图找图_Python实现识别图片中的所有人脸并显示出来

    原标题:Python实现识别图片中的所有人脸并显示出来 # -*- coding: utf-8 -*- # 识别图片中的所有人脸并显示出来 # filename : find_faces_in_pic ...

  6. python识图找图_python识别图片

    import requests from aip import AipOcr image = requests.get('https://static.pandateacher.com/7b5d6d8 ...

  7. python自动化_Python自动化测试入门必读

    入门自动化测试必读 自动化测试概念 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期 ...

  8. python识图找图_利用python进行识别相似图片(二)

    前言 和网上各种首先你要有一个女朋友的系列一样,想进行人脸判断,首先要有脸, 只要能靠确定人脸的位置,那么进行两张人脸是否相似的操作便迎刃而解了. 所以本篇文章着重讲述如何利用openCV定位人脸. ...

  9. python识图打怪_利用python进行识别相似图片(二)

    前言 和网上各种首先你要有一个女朋友的系列一样,想进行人脸判断,首先要有脸, 只要能靠确定人脸的位置,那么进行两张人脸是否相似的操作便迎刃而解了. 所以本篇文章着重讲述如何利用openCV定位人脸. ...

最新文章

  1. esxi vsphere的端口_vSphere Client 6.0 更改 ESXESXi 主机的端口
  2. (五) openwrt打包过程
  3. 【直播课】6小时教你掌握MMdetection工程落地实践
  4. 前端html5CSS3颜色表示法
  5. USB 3.0、USB 3.1到底什么区别?
  6. 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)
  7. linux怎么看文件是否orc格式,hive文件存储格式orc,parquet,avro对比
  8. DeepStream3必须安装Video_Codec_SDK9
  9. 网易易盾—推理拼图验证码的破解
  10. MFC入门(简易计算器)
  11. 计算机说课教案模板,初中信息技术说课稿通用模板大全
  12. VS如何安装到电脑上
  13. Uniapp设置页面的背景图片
  14. 电子邮箱地址怎么填?如何登陆电子邮箱地址?
  15. mysql 1114错误_mysql出现错误编码1114的解决方法
  16. 捋一捋Vue构造函数
  17. 王者服务器维护7月九号,王者荣耀S20赛季确定7月9号开始,钻石夺宝新增猛男专用拖尾特效...
  18. 基于若依系统进行模块化开发(使用eclipse)
  19. [评估指标] 敏感性/特异性/PPV/NPV等指标原理与计算方法
  20. 基于属性的访问控制模型ABAC

热门文章

  1. 一个优秀IT专家的成长历程---献给所有的颓废或即将颓废的人们
  2. 2015年第六届蓝桥杯B组(C/C++)预赛题目及个人答案
  3. Generative Adversarial Networks(CGAN、CycleGAN、CoGAN)
  4. windows环境下将yolo-fatest的caffe模型转化为wk模型
  5. 解析木马攻击与防御发展简史
  6. 什么是计算机网络协议叙述协议的三要素,网络协议的含义及三要素是什么
  7. 计算机桌面刷新位置不可用,Win10开机提示桌面位置不可用的三种解决办法
  8. 人工智能数学基础--不定积分1:概念与性质
  9. OkHttp相关知识(三)
  10. 零基础制作平衡小车【连载】12---平衡小车控制原理