Skip to content

SliderTools 滑块验证码工具

什么是 SliderTools?

SliderTools 是 AsyncTest 在自定义脚本中提供的 滑块验证码处理工具,用于自动识别滑块验证码的目标位置,并生成模拟人类操作的滑动轨迹数据。

你可以通过 at.SliderTools() 创建一个实例来使用。


基本流程

处理滑块验证码通常分为两步:

  1. 识别滑块位置:通过背景图片识别滑块缺口的目标 X 坐标
  2. 生成滑动轨迹:根据目标坐标生成模拟人类行为的轨迹数据
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

返回值: 字典,包含以下字段:

字段类型说明
bgImageWidthint背景图片宽度
bgImageHeightint背景图片高度
startTimestr滑动开始时间(ISO 8601 格式)
stopTimestr滑动结束时间(ISO 8601 格式)
trackListlist滑动轨迹点列表

示例:

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 坐标

返回值: 轨迹点列表,每个轨迹点包含以下字段:

字段类型说明
xintX 坐标
yintY 坐标
typestr事件类型(down / move / up
tint时间戳(毫秒)

轨迹模拟特征:

  • 先快后慢的加速曲线
  • 超过目标位置后回调修正(模拟人类过冲行为)
  • 随机的 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() 生成模拟人类行为的滑动轨迹
  • 轨迹包含加速、过冲、回调等拟人特征