一、简介
如下图是百度的多段轨迹验证码图例,这个轨迹验证码是分段显示的,你必须根据轨迹先滑动一定的距离,然后才会显示第二段轨迹的的图片。

由于这样的独特设计,也让这个验证码的轨迹识别难度直线上升。
二、识别代码
经过我们这几天的熬夜奋战,终于解决了这款轨迹验证码的识别问题,正确率也达到了90%以上。
下面是python识别验证码的样例代码
import base64
import requests
import datetime
from io import BytesIO
from PIL import Image
t1 = datetime.datetime.now()
#PIL图片保存为base64编码
def PIL_base64(img, coding='utf-8'):
img_format = img.format
if img_format == None:
img_format = 'JPEG'
format_str = 'JPEG'
if 'png' == img_format.lower():
format_str = 'PNG'
if 'gif' == img_format.lower():
format_str = 'gif'
if img.mode == "P":
img = img.convert('RGB')
if img.mode == "RGBA":
format_str = 'PNG'
img_format = 'PNG'
output_buffer = BytesIO()
# img.save(output_buffer, format=format_str)
img.save(output_buffer, quality=100, format=format_str)
byte_data = output_buffer.getvalue()
base64_str = 'data:image/' + img_format.lower() + ';base64,' + base64.b64encode(byte_data).decode(coding)
# base64_str = base64.b64encode(byte_data).decode(coding)
return base64_str
# 加载图片
img1 = Image.open(r'E:\\Python\\lixin_project\\OpenAPI接口测试\\test_img\\84.jpg')
# 图片转base64
img1_base64 = PIL_base64(img1)
验证码识别接口
可以根据自己网络情况选择不同接口
http://bq1gpmr8.xiaomy.net(电信)
http://220.167.181.200:9009(移动、电信、联通)
# 验证码识别接口
url = "http://220.167.181.200:9009/openapi/verify_code_identify/"
data = {
# 用户的key
"key":"onNYnzzAWPO8E0bPDmJv",
# 验证码类型
"verify_idf_id":"84",
# 样例图片
"img_base64":img1_base64,
}
import json
print(json.dumps(data))
header = {"Content-Type": "application/json"}
# 发送请求调用接口
response = requests.post(url=url, json=data, headers=header)
# 获取响应数据,识别结果
print(response.text)
print("耗时:", datetime.datetime.now() – t1)
识别完成后得到是滑动轨迹点的坐标,如下所示。这样就可以根据轨迹点坐标模拟滑动,或者js逆向直接走协议过验证码。
识别结果:[(83, 121), (100, 131), (117, 140), (133, 148), (148, 154), (162, 158), (176, 162), (188, 165), (200, 167), (210, 169), (219, 171), (226, 173), (232, 174), (237, 175), (241, 175), (244, 174), (246, 172), (246, 169), (247, 164), (246, 158), (246, 151), (245, 142), (243, 132), (240, 120), (237, 106), (233, 91), (227, 73), (221, 54), (212, 33), (203, 10)]
我把轨迹点的坐标可视化出来就是如下图所示的样子,图中轨迹点用蓝色点进行了标注。基本上和曲线完美重合。

想了解更多验证码识别请访问:http://bq1gpmr8.xiaomy.net/tool/verifyCodeHomePage2/?_=1771917979926



