开发者社区> 小凡晓宇> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 牙叔教程 简单易懂
+关注继续查看

牙叔教程 简单易懂

解决问题第一原则

把问题写下来

问题

查找暗部滑块出岔子了

出岔子的图片


image


在上一个教程

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)

效果

image


image


image


image

一些关键点

我们找图用了两个维度

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

声明

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
#yyds干货盘点# 【React工作记录二十五】ant design form表单验证问题
#yyds干货盘点# 【React工作记录二十五】ant design form表单验证问题
20 0
SAP QM初阶事务代码QA11对检验批做UD时出现很多UD Code的选择集?
SAP QM初阶事务代码QA11对检验批做UD时出现很多UD Code的选择集?
47 0
phpstudy集成下Apache配置SSL证书实现https加密访问
phpstudy集成下Apache配置SSL证书实现https加密访问
87 0
OAuth 2.0实战(二)-为什么要先获取授权码code?(上)
OAuth 2.0实战(二)-为什么要先获取授权码code?
78 0
CentOS6.5环境下搭建Apache httpd服务器
CentOS6.5环境下搭建Apache httpd服务器 前期准备: 1、CentOS6.5虚拟系统; 2、CentOS6.5 IP地址:192.168.2.99 3、虚拟系统能上外网 下面我们就开始配置: 第一步:安装 首先我们需要把Apache httpd服务器安装在我们的CentOS6.
3509 0
(转)五种开源协议的对比分析BSD, Apache 2.0, GPL,LGPL,MIT
现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses /alphabetical)。
1413 0
对ifconfig eth0 up对DHCP无效问题的回答
今天我也碰到这个问题:[root@localhost ~]# ifconfig eth1 down [root@localhost ~]# [root@localhost ~]# ifconfig eth1 eth1 Link encap:Etherne...
636 0
+关注
329
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载