autojs滑块验证码-查找位置(二)

简介: 牙叔教程 简单易懂

牙叔教程 简单易懂

解决问题第一原则

把问题写下来

问题

查找暗部滑块出岔子了

出岔子的图片



在上一个教程

https://www.yuque.com/go/doc/71850394

我们找暗部滑块, 也就是右侧的黑色音符的位置,

是通过找图片中最暗的区域, 来查找位置的

这个验证码图片, 加了一个干扰项, 黑色的手机外壳,

手机的亮度和音符的亮度是非常类似的,

所以通过亮度这个方法来查找音符是不通用的,

因此放弃这个方法

最终方案

  1. 截图A
  2. 滑动滑块一定距离
  3. 截图B
  4. 截图A - 截图B = 图片C
  5. 图片C中是确定的滑块

图片减法教程: https://www.yuque.com/yashujs/bfug6u/tv4fyi


此时, 滑块的形状对我们来说, 就是一个已知量,

在已知左侧滑块的情况下, 去查找右侧的音符,

这样即使有手机壳的干扰, 我们仍然可以通过轮廓的相似度来判断是不是音符

那么问题又出来了, 怎么改变滑动轨迹?

改变滑动轨迹

这是群里的大佬@无名小姐 发的例子

const accessibilityService = com.stardust.autojs.core.accessibility.AccessibilityService.Companion.getInstance();
const screenMetrics = runtime.getScreenMetrics();
let path = new android.graphics.Path();
path.moveTo(screenMetrics.scaleX(100), screenMetrics.scaleY(0));
path.lineTo(screenMetrics.scaleX(100), screenMetrics.scaleY(1000));
let strokeDescription = new android.accessibilityservice.GestureDescription.StrokeDescription(path, 0, 500, true);
accessibilityService.dispatchGesture(
  new android.accessibilityservice.GestureDescription.Builder().addStroke(strokeDescription).build(),
  new android.accessibilityservice.AccessibilityService.GestureResultCallback({
    onCompleted() {
      let path2 = new android.graphics.Path();
      path2.moveTo(screenMetrics.scaleX(100), screenMetrics.scaleY(1000));
      path2.lineTo(screenMetrics.scaleX(500), screenMetrics.scaleY(1000));
      let strokeDescription2 = strokeDescription.continueStroke(path2, 0, 500, false);
      accessibilityService.dispatchGesture(
        new android.accessibilityservice.GestureDescription.Builder().addStroke(strokeDescription2).build(),
        null,
        null
      );
    },
  }),
  null
);


这个例子是最关键点之一,
因为我们要先滑动滑块, 然后截图处理分析, 然后继续滑动;

两次滑动是不可以断开的, 上面这个例子的两次滑动就没有断开, 满足需求;

我自己也封装了一个方法
只要传入points, 时长, 等四个参数就可以执行了, 不用再写一大堆的代码, 和 gesture 一样简单;

executeGestures 返回的是Promise, 因为它是在onCompleted的回调中, 去触发下一个操作


let gestures = [
  {
    points: [sliderStartPoint, [sliderStartPoint[0] + deviceWidth, sliderStartPoint[1]]],
    duration: 500,
    waitingTimeAfterCompletion: 500,
    onCompleted: function () {
      let secondCaptureScreen = captureScreen().clone();
      return secondCaptureScreen;
    },
  },
];
executeGestures(gestures)

效果




一些关键点

我们找图用了两个维度

  1. 明暗度
  2. 轮廓

截图有两次

  1. 移动滑块前一次
  2. 移动滑块后一次

滑动滑块的两个阶段

  1. 第一次移动滑块一定距离, 是为了两张截图做减法, 找滑块起始位置
  2. 第二次是把滑块移动到正确的位置

用到的opencv命令

  1. 高斯模糊
  2. 二值化
  3. 找轮廓
  4. 画轮廓
  5. 画直线
  6. 外接矩形
  7. 轮廓按面积排序
  8. 形态学处理
  9. 轮廓相似度

最重要的事情

理解思路

测试环境

手机: Mi 11 Pro
Android版本: 12
Autojs版本: 9.1.12


名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问 --- 牙叔教程

声明

部分内容来自网络 本教程仅用于学习, 禁止用于其他用途


相关文章
|
算法 前端开发 JavaScript
滑块验证码------啥?你居然还在手动滑动,你不来试试自动滑动吗
滑块验证码------啥?你居然还在手动滑动,你不来试试自动滑动吗
1119 0
|
10月前
|
机器学习/深度学习 数据采集 API
Python自动化解决滑块验证码的最佳实践
Python自动化解决滑块验证码的最佳实践
|
人工智能 文字识别 安全
温习数据算法—js滑块验证码
温习数据算法—js滑块验证码
|
数据采集 JavaScript 前端开发
使用Java解决快手滑块验证码
使用Java解决快手滑块验证码
|
安全 PHP 开发工具
注册登录首选,趣味滑块验证码
注册登录账户时,保障账户安全是首要任务!使用趣味滑块验证码,既能有效防御恶意攻击,又能为验证过程增添一丝乐趣。让注册和登录变得更加有趣又安全!
|
缓存 JavaScript 数据安全/隐私保护
Crack Captcha | 某招投标信息查询网站滑块验证码分析
Crack Captcha | 某招投标信息查询网站滑块验证码分析
278 0
|
数据采集 小程序 Python
论如何破解腾讯滑块验证码
论如何破解腾讯滑块验证码
2408 0
|
JavaScript 前端开发
【JavaScript】滑块验证码
【JavaScript】滑块验证码
353 0
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
12月前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
2618 5