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文档, 最后才是群里问问 --- 牙叔教程

声明

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


相关文章
|
6月前
【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置
【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置
|
6月前
|
算法 IDE 开发工具
Airtest脚本的点击位置与点击偏移
Airtest脚本的点击位置与点击偏移
129 0
|
6月前
VSCode如何自动换行,右侧换行间距长度,隐藏右侧代码预览(Minimap代码缩略图滚动条),比对代码差异窗口也自动换行
VSCode如何自动换行,右侧换行间距长度,隐藏右侧代码预览(Minimap代码缩略图滚动条),比对代码差异窗口也自动换行
|
5月前
|
前端开发 JavaScript
如何在文本域右下角设置字数限制提示
如何在文本域右下角设置字数限制提示
98 3
|
6月前
数字动画404错误页面源码
数字动画404错误页面源码
83 5
数字动画404错误页面源码
scrollIntoView()定位元素显示导致页面上移解决方法?
scrollIntoView()定位元素显示导致页面上移解决方法?
549 0
|
6月前
|
iOS开发
ios中,输入框获得焦点时,页面输入框被遮盖,定位的元素位置错乱
ios中,输入框获得焦点时,页面输入框被遮盖,定位的元素位置错乱
83 1
|
Web App开发 前端开发 JavaScript
让谷歌浏览器不再显示不安全内容的提示
让谷歌浏览器不再显示不安全内容的提示
348 0
|
前端开发 开发工具 数据安全/隐私保护
【记】滑动拼图验证码在搜索中的作用
验证码应用于我们生活、工作的方方面面,比如注册登录账号、支付订单、修改密码等。下面我是在一次项目中利用滑动拼图验证码和搜索功能“合作共赢”的记录。
【记】滑动拼图验证码在搜索中的作用