一、简介如下图是百度的多段轨迹验证码图例这个轨迹验证码是分段显示的你必须根据轨迹先滑动一定的距离然后才会显示第二段轨迹的的图片。由于这样的独特设计也让这个验证码的轨迹识别难度直线上升。二、识别代码经过我们这几天的熬夜奋战终于解决了这款轨迹验证码的识别问题正确率也达到了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, codingutf-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, formatformat_str) img.save(output_buffer, quality100, formatformat_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(rE:\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(urlurl, jsondata, headersheader) # 获取响应数据识别结果 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