Requests对图片验证码的处理
在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过request做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用;
通过request对图片验证码的识别方法(带有噪点的图片)
一、通过在本地安装OcrServer工具识别图片验证码
网盘下载ocrserver工具
链接:https://pan.baidu.com/s/1uNo2dLGeB4uLf1wm4TmLPA
提取码:xd5e
如下图:解压后双击OcrServer.exe;然后电脑的右下角会显示该服务的IP和端口
二、通过python编写脚本,并配合OcrServer工具,识别出图片验证码的值
前置条件:导入需要的插件
import base64 import request
1、发送图片验证码的接口,返回图片的响应后保存到指定文件夹
# 获取验证码图片,并保存下来为123.png response = requests.get('获取验证码图片的URL地址') img = response.content with open('../sample/123.png','wb') as f: f.write(img)
2、打开并读取图片后,通过base64对图片进行编码
# 读取图片后,通过base64对图片进行编码 png = open('123.png','rb') res = png.read() s = base64.b64encode(res) png.close() # print(s.decode('ascii'))
3、在本地打开OcrServer.exe插件后,发送编码后的图片到指定的url地址,返回值为json格式
# 在本地打开OcrServer.exe插件后,发送编码后的图片到指定的url地址,返回值为json格式:{"code":"验证码图片的值"} response = requests.post(url="http://127.0.0.1:12349",data=s) code_num = response.json() print(code_num['code'])
4、查看识别的验证码图片的值
获取到的验证码图片如下图
代码执行后输出的结果如下图
全部代码如下图示例:可写成一个封装类,用来调用
import base64 import requests # 获取验证码图片,并保存下来为123.png response = requests.get('获取图片验证码的url地址') img = response.content with open('../sample/123.png','wb') as f: f.write(img) # 读取图片后,通过base64对图片进行编码 png = open('123.png','rb') res = png.read() s = base64.b64encode(res) png.close() # print(s.decode('ascii')) # 在本地打开OcrServer.exe插件后,发送编码后的图片到指定的url地址,返回值为json格式{“code”:"验证码图片的值"} response = requests.post(url="http://127.0.0.1:12349",data=s) code_num = response.json() print(code_num['code'])
通过编写python代码,导入第三方库(),识别图片验证码(没有噪点的图片)
没有噪点的图片;如下图:
纯数字:下面代码的图片名称以为666.png代替
纯中文:下面代码的图片名称以为999.png代替
1、首先下载 Pillow库和 pytesseract库,用来识别图片验证码
pip install Pillow pip install pytesseract
2、通过导入第三方库,然后编写如下代码识别图片验证码;
示例代码:下面以纯数字的图片验证码举例
from PIL import Image import pytesseract # pytesseract和PIL只能对图片验证码没有噪点的识别成功 path = '666.png' captcha = Image.open(path) result = pytesseract.image_to_string(captcha,lang="chi_sim") print(result)
执行结果:识别成功
示例代码:下面以纯中文的图片验证码举例
from PIL import Image import pytesseract # pytesseract和PIL只能对图片验证码没有噪点的识别成功 path = '999.png' captcha = Image.open(path) result = pytesseract.image_to_string(captcha,lang="chi_sim") print(result)
执行结果:识别成功