找回密码
 立即注册
首页 业界区 科技 Manus滑动验证码模块过程

Manus滑动验证码模块过程

挡缭 昨天 23:35

Manus滑动验证码模块过程

   Manus作为通用AI智能体,其模拟浏览器滑动验证码的核心逻辑是:以视觉识别为基础,模拟人类操作习惯,在受控虚拟机环境中执行滑块拖动,通过前端交互验证与后端参数校验,最终完成验证。

image

整体思路是清晰的

image

代码

  1. <font size="3">import cv2
  2. import numpy as np
  3. import requests
  4. from PIL import Image
  5. from io import BytesIO
  6. def get_slider_offset(background_url, slider_url):
  7. # 下载图片
  8. bg_resp = requests.get(background_url)
  9. sl_resp = requests.get(slider_url)
  10. bg_img = cv2.imdecode(np.frombuffer(bg_resp.content, np.uint8), cv2.IMREAD_COLOR)
  11. sl_img = cv2.imdecode(np.frombuffer(sl_resp.content, np.uint8), cv2.IMREAD_COLOR)
  12. # 转换为灰度图
  13. bg_gray = cv2.cvtColor(bg_img, cv2.COLOR_BGR2GRAY)
  14. sl_gray = cv2.cvtColor(sl_img, cv2.COLOR_BGR2GRAY)
  15. # 边缘检测
  16. bg_edge = cv2.Canny(bg_gray, 100, 200)
  17. sl_edge = cv2.Canny(sl_gray, 100, 200)
  18. # 模板匹配
  19. res = cv2.matchTemplate(bg_edge, sl_edge, cv2.TM_CCOEFF_NORMED)
  20. min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
  21. return max_loc[0]
  22. if __name__ == "__main__":
  23. # 这里需要填入实际的图片 URL,或者从页面中提取
  24. # 由于目前无法直接获取 URL,我将尝试通过截图分析
  25. pass</font><font size="3">
  26. </font><font size="3">
  27. </font><font size="3">
  28. </font>
复制代码
  1. <font size="3"><strong>分析</strong>
  2. import cv2
  3. import numpy as np
  4. def detect_gap(screenshot_path):
  5. # 读取截图
  6. img = cv2.imread(screenshot_path)
  7. if img is None:
  8. print("Error: Could not read screenshot.")
  9. return None
  10. # 转换为灰度图
  11. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  12. # 使用 Canny 边缘检测
  13. edges = cv2.Canny(gray, 100, 200)
  14. # 在截图中心区域寻找滑块和缺口
  15. # 截图大小为 1000x500,滑块弹窗在中间
  16. # 我们可以根据截图中的红色标记来定位
  17. # 标记 1 是滑块,标记 2 和 3 是刷新按钮等
  18. # 这里的逻辑需要根据截图中的实际位置进行调整
  19. # 假设滑块在左侧,缺口在右侧
  20. # 我们可以在滑块所在的水平带内寻找边缘最明显的地方
  21. # 简单起见,我们先保存边缘检测结果以便观察
  22. cv2.imwrite('/home/ubuntu/edges.png', edges)
  23. # 根据截图,滑块在左侧,缺口在右侧。
  24. # 滑块的 x 坐标大约在 420 左右,缺口在 540 左右。
  25. # 这里的坐标是相对于 1000x500 的截图。
  26. # 实际上,我们需要计算的是滑块需要移动的距离。
  27. # 尝试寻找缺口的轮廓
  28. # 缺口通常是一个凹进去的形状
  29. return 120 # 这是一个初步估算的像素值,稍后根据 edges.png 调整
  30. if __name__ == "__main__":
  31. # 这里的路径需要替换为实际的截图路径
  32. # 由于无法直接获取截图路径,我将使用 view 结果中的信息
  33. pass
  34. </font>
复制代码


片段三

  1. <font size="3">import cv2
  2. import numpy as np
  3. def detect_gap(screenshot_path):
  4. # 读取截图
  5. img = cv2.imread(screenshot_path)
  6. if img is None:
  7. print("Error: Could not read screenshot.")
  8. return None
  9. # 转换为灰度图
  10. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  11. # 使用 Canny 边缘检测
  12. edges = cv2.Canny(gray, 100, 200)
  13. # 在截图中心区域寻找滑块和缺口
  14. # 截图大小为 1000x500,滑块弹窗在中间
  15. # 我们可以根据截图中的红色标记来定位
  16. # 标记 1 是滑块,标记 2 和 3 是刷新按钮等
  17. # 这里的逻辑需要根据截图中的实际位置进行调整
  18. # 假设滑块在左侧,缺口在右侧
  19. # 我们可以在滑块所在的水平带内寻找边缘最明显的地方
  20. # 简单起见,我们先保存边缘检测结果以便观察
  21. cv2.imwrite('/home/ubuntu/edges.png', edges)
  22. # 根据截图,滑块在左侧,缺口在右侧。
  23. # 滑块的 x 坐标大约在 420 左右,缺口在 540 左右。
  24. # 这里的坐标是相对于 1000x500 的截图。
  25. # 实际上,我们需要计算的是滑块需要移动的距离。
  26. # 尝试寻找缺口的轮廓
  27. # 缺口通常是一个凹进去的形状
  28. return 120 # 这是一个初步估算的像素值,稍后根据 edges.png 调整
  29. if __name__ == "__main__":
  30. # 这里的路径需要替换为实际的截图路径
  31. # 由于无法直接获取截图路径,我将使用 view 结果中的信息
  32. pass</font>
复制代码

滑动操作执行(拟人化交互)

Manus通过向操作系统发送指令,模拟鼠标的真实滑动操作,全程无人工干预,具体步骤如下:

1. 滑块点击与按住:Manus模拟人类鼠标操作,移动鼠标至滑块初始位置,执行“点击并按住”动作(模拟手指按压滑块),动作流畅无突兀,避免瞬间点击触发反爬。

2. 按轨迹拖动:按照生成的滑动轨迹,逐步拖动滑块,每一步位移、速度严格遵循预设轨迹,滑动过程中无停顿、无跳跃,同时保留微小抖动,完全复刻人类滑动习惯。拖动过程中,Manus实时监控滑块位置,确保不偏离滑动轨道。

3. 滑块释放:当滑块拖动至缺口对应位置(误差≤1像素)时,Manus执行“释放鼠标”动作,释放时机自然,避免提前或延迟释放,确保滑块精准落入缺口。

4. 操作细节补充:滑动完成后,Manus会停留0.5-1秒,再进行后续操作,模拟人类确认验证结果的习惯,进一步降低反爬风险。

核心流程分解

实现滑动验证码绕过通常分为四个关键阶段:

第一阶段:资源获取与目标识别 (Sense)

Manus 首先会通过浏览器驱动(如 Playwright 或 Puppeteer)获取验证码的两个核心要素:背景图(Background)滑块图(Slider/Gap)

  • 识别方式: 如果滑块是 Canvas 渲染,Manus 会截取当前 DOM 元素的快照;如果是传统的 URL 图片,则直接下载。

  • 图像预处理: 使用 OpenCV 进行灰度化、高斯模糊处理,以消除噪点。

第二阶段:缺口距离计算 (Positioning)

这是最关键的一步,Manus 需要计算出滑块需要移动的物理像素距离 $x$。

  • 模板匹配 (Template Matching): 在背景图中寻找与滑块边缘特征最匹配的区域。

  • 边缘检测 (Canny Edge Detection): 通过识别背景图中由于缺口产生的阴影边界来精确定位。

第三阶段:模拟人类轨迹生成 (Trajectory Planning)

这是绕过反爬引擎检测的核心。 如果滑块以恒定速度直线移动,极易被识别为机器人。Manus 会生成符合物理规律的“类人”轨迹。

通常采用物理加速度模型,模拟先加速、后减速、甚至在终点附近产生微小回弹的过程:

image

  • 非线性路径: 加入微小的 $y$ 轴抖动。

  • 变速运动: 模拟人类观察、对准、松手前的小停顿。

第四阶段:动作执行 (Action)

通过浏览器驱动 API(如 mouse.move, mouse.down, mouse.up)将计算好的坐标序列发送给浏览器。


Manus 实现的技术栈对比

模块

常用技术/库

Manus 的潜在处理方式

浏览器自动化

Playwright, Selenium

优先使用 Playwright (更隐蔽且支持 CDP)

图像处理

OpenCV, PIL

动态编写 Python 脚本进行视觉计算

轨迹算法

贝塞尔曲线, 物理仿真

基于 LLM 生成逻辑或调用现成的离散数学模型

反爬对抗

stealth.min.js

自动注入插件以隐藏 WebDriver 特征


结论

       不同于传统的写死脚本,Manus 的优势在于它能根据页面实时反馈动态调整策略。但还是难以成功。


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册