# coding:utf-8
import json
import requests
from io import BytesIO
import base64
# 请求头
import tesserocr
from PIL import Image
headers = {
'Connection': 'keep-alive',
'Accept': '*/*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36',
'Origin': 'http://www.shenghui56.com',
'Referer': 'http://www.shenghui56.com/',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
# 获取验证码
def query_key():
r = requests.get('****************', headers=headers,
verify=False)
data = json.loads(r.content).get("obj")
url = data.get("image")
# 在线获取图片对象
image_data = base64.b64decode(url) # 获取解码后的bytes
bytes_io = BytesIO()
bytes_io.write(image_data) # 写入bytes,把它当作文件读取
img = Image.open(bytes_io) # 读取'图片'文件
img = img.convert("L") # 转为灰度图像
# 二值处理
threshold = 100 # 设置二值的阈值100
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
img = img.point(table, "1") # 返回给定查找表对应的图像像素值的拷贝,变量table为图像的每个通道设置256个值,
# 为输出图像指定一个新的模式,模式为“L”和“P”的图像进一步转换为模式为“1”的图像
# 解析验证码
key = tesserocr.image_to_text(img)
# 返回key
return key, data
# 获取信息
def query_data(no, key, data):
print(key.strip())
params = (
('orderid', no),
('verityCodeKey', key),
('identifier', data.get("identifier")),
)
r = requests.get('*****************', headers=headers,
params=params, verify=False)
return r.text
if __name__ == '__main__':
the_key, data = query_key()
a = query_data("285686d57a7185788", the_key, data)
print(a)