首页 > 编程语言 > 详细

Python自动化-验证识别

时间:2019-08-25 15:20:38      阅读:130      评论:0      收藏:0      [点我收藏+]

一、准备

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、易源网站-算法的接口(收费的),这里需要注册后购买验证码接口算法,准备 用户id(my_appId)和 密码(my_appSecret),网站里有用户使用说明。

二、实现

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

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

技术分享图片
1 ‘‘‘调用chrome浏览器,打开最大化浏览器‘‘‘
2 driver = webdriver.Chrome() # 打开浏览器
3 driver.get("验证码网址页面")# 打开地址
4 driver.maximize_window()
5 time.sleep(2)
View Code

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

技术分享图片
 1 ‘‘‘2、截图浏览器中的图片,进行切割(Pillow库),从网页中提取出验证码图片‘‘‘
 2 def  jietu():
 3     driver.save_screenshot("D:/yemian.png")
 4     ‘‘‘使用坐标方式,拿到验证码左上角坐标‘‘‘
 5     left_top = driver.find_element_by_id("captchaImg").location
 6     print("左上角坐标",left_top)
 7     x1 = left_top[x]# 验证码框的左上角的x轴坐标
 8     y1 = left_top[y]# 验证码框的左上角的y轴坐标
 9     ‘‘‘取出右下角坐标‘‘‘
10     img = driver.find_element_by_id("captchaImg")# 定位图片
11     x2 = img.size[width]+x1  # 获取图片的宽度+ x1 =====》右坐标
12     y2 = img.size[height]+y1 # 获取图片的高度+ y1 =====》  下坐标
13     print("四个点的坐标",x1,y1,x2,y2)
14     ‘‘‘利用这四个坐标切割图片‘‘‘
15     yan_img = Image.open("D:/yemian.png")# 打开图片
16     yan_ma = yan_img.crop((x1,y1,x2,y2))
17     yan_ma.save("D:/yanzhengma.png")# 保存到硬盘上
View Code

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位:

 

 

 

 

待更新

 

Python自动化-验证识别

原文:https://www.cnblogs.com/yuntimer/p/11407733.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!