一、准备
1、环境基础:Python3+pycharm+selenium +接口识别request+Pillow 库(图片切割),chrome浏览器的驱动环境
2、易源网站-算法的接口(收费的),这里需要注册后购买验证码接口算法,准备用户id(App_ID)和 密码(App_serect)
二、实现
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)
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")# 保存到硬盘上
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、