SliderTools 滑块验证码工具
什么是 SliderTools?
SliderTools 是 AsyncTest 在自定义脚本中提供的 滑块验证码处理工具,用于自动识别滑块验证码的目标位置,并生成模拟人类操作的滑动轨迹数据。
你可以通过 at.SliderTools() 创建一个实例来使用。
基本流程
处理滑块验证码通常分为两步:
- 识别滑块位置:通过背景图片识别滑块缺口的目标 X 坐标
- 生成滑动轨迹:根据目标坐标生成模拟人类行为的轨迹数据
python
slider = at.SliderTools()
# 1. 识别滑块位置
target_x = slider.get_slider_data(bg_image_bytes)
# 2. 生成轨迹数据
trace_data = slider.get_trace_data(target_x)方法列表
get_slider_data()
识别滑块验证码背景图中的缺口位置
python
slider = at.SliderTools()
target_x = slider.get_slider_data(bg_bytes)参数:
bg_bytes: 滑块验证码背景图片的字节数据
返回值: 缺口的目标 X 坐标(整数)
示例:
python
# 假设已获取到背景图片的字节数据
slider = at.SliderTools()
target_x = slider.get_slider_data(bg_image_bytes)
print(f"滑块目标位置: {target_x}")get_trace_data()
根据目标坐标生成完整的滑动轨迹数据(包含轨迹列表和时间戳)
python
slider = at.SliderTools()
trace_data = slider.get_trace_data(code, width=300, height=180)参数:
code: 滑块目标 X 坐标(通常由get_slider_data()返回)width: 背景图片宽度(默认300)height: 背景图片高度(默认180)
返回值: 字典,包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
bgImageWidth | int | 背景图片宽度 |
bgImageHeight | int | 背景图片高度 |
startTime | str | 滑动开始时间(ISO 8601 格式) |
stopTime | str | 滑动结束时间(ISO 8601 格式) |
trackList | list | 滑动轨迹点列表 |
示例:
python
slider = at.SliderTools()
trace_data = slider.get_trace_data(150)
print(trace_data)
# {
# "bgImageWidth": 300,
# "bgImageHeight": 180,
# "startTime": "2025-02-25T08:30:00.123Z",
# "stopTime": "2025-02-25T08:30:02.456Z",
# "trackList": [
# {"x": 0, "y": 0, "type": "down", "t": 1500},
# {"x": 15, "y": 0, "type": "move", "t": 1520},
# ...
# {"x": 150, "y": 1, "type": "up", "t": 3200}
# ]
# }generate_human_track()
生成模拟人类操作的滑动轨迹点列表
python
slider = at.SliderTools()
track = slider.generate_human_track(target_x)参数:
target_x: 滑块目标 X 坐标
返回值: 轨迹点列表,每个轨迹点包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
x | int | X 坐标 |
y | int | Y 坐标 |
type | str | 事件类型(down / move / up) |
t | int | 时间戳(毫秒) |
轨迹模拟特征:
- 先快后慢的加速曲线
- 超过目标位置后回调修正(模拟人类过冲行为)
- 随机的 Y 轴抖动
- 随机的时间间隔
示例:
python
slider = at.SliderTools()
track = slider.generate_human_track(150)
# [
# {"x": 0, "y": 0, "type": "down", "t": 1500}, # 按下
# {"x": 15, "y": 1, "type": "move", "t": 1520}, # 移动
# {"x": 45, "y": 0, "type": "move", "t": 1545}, # 移动(加速)
# ...
# {"x": 162, "y": -1, "type": "move", "t": 2100}, # 超过目标(过冲)
# {"x": 155, "y": 0, "type": "move", "t": 2150}, # 回调修正
# ...
# {"x": 150, "y": 1, "type": "move", "t": 2400}, # 到达目标
# {"x": 150, "y": 1, "type": "up", "t": 2700} # 释放
# ]create_check_payload()
生成完整的验证请求载荷(包含轨迹和时间信息)
python
slider = at.SliderTools()
payload = slider.create_check_payload(target_x, width=300, height=180)参数:
target_x: 滑块目标 X 坐标width: 背景图片宽度(默认300)height: 背景图片高度(默认180)
返回值: 与 get_trace_data() 相同
说明: get_trace_data() 是对此方法的封装,功能完全一致。
完整使用示例
自动处理滑块验证码
python
import json
# 1. 获取滑块验证码图片(假设通过接口获取)
response_data = await at.response.async_json()
bg_image_url = response_data.get("data", {}).get("bg_image")
# 2. 下载背景图片(假设已获取到图片字节数据)
bg_image_bytes = ... # 背景图片字节数据
# 3. 实例化工具并识别滑块缺口位置
slider = at.SliderTools()
target_x = slider.get_slider_data(bg_image_bytes)
print(f"识别到滑块位置: {target_x}")
# 4. 生成滑动轨迹
trace_data = slider.get_trace_data(target_x)
print(f"生成轨迹点数: {len(trace_data['trackList'])}")
# 5. 将轨迹数据保存到临时变量,供验证接口使用
at.temp.set("slider_payload", json.dumps(trace_data))自定义图片尺寸
python
# 如果滑块验证码的背景图尺寸不是默认的 300x180
slider = at.SliderTools()
target_x = slider.get_slider_data(bg_image_bytes)
trace_data = slider.get_trace_data(target_x, width=400, height=200)仅生成轨迹数据
python
# 如果已知目标位置,可以直接生成轨迹
slider = at.SliderTools()
track = slider.generate_human_track(200)
print(f"轨迹点数: {len(track)}")
print(f"起始事件: {track[0]}")
print(f"结束事件: {track[-1]}")注意事项
- 需要先通过
at.SliderTools()实例化后再调用方法 get_slider_data()依赖图像识别库,需要传入有效的图片字节数据- 生成的轨迹包含随机性,每次调用结果不同,更接近真实人类行为
- 轨迹模拟了过冲回调行为,有助于通过反作弊检测
- 时间戳为 ISO 8601 格式(UTC 时区)
总结
SliderTools 提供了完整的滑块验证码处理能力:
- 通过
at.SliderTools()实例化后使用 - 通过
get_slider_data()自动识别缺口位置 - 通过
get_trace_data()生成模拟人类行为的滑动轨迹 - 轨迹包含加速、过冲、回调等拟人特征