申明本人使用的autojs是4.1.1版本

目录

操作app是云闪付的小程序抢消费劵

实际开发中各种问题并解答

错误代码

报错:Can't find method findImage()函数

问题:

解决方法:

报错:Wrapped java. lang . NullPointerException:template = null

错误原因:

解决:

问题:每次截图都是上一个界面

错误原因:

解决:

问题:findImage()函数找不到指定的小图片位置

错误原因:

解决:

问题:系统找到了指定的图片,依然无法执行点击效果

错误原因:

解决:

最终成功的代码示例

总结


操作app是云闪付的小程序抢消费劵

界面如下:大图是全屏截图,小图是比对相识度的图片,并对其进行点击

实际开发中各种问题并解答

错误代码

/*** 点击图片* @param {String} smallImgPath 小图片路径* @param {Int} threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9* @returns */
function 点击图片(smallImgPath, threshold) {var img = captureScreen("/sdcard/a.png");var smallImg = images.read(smallImgPath); //读取本地的领取图片var result = findImage(img, smallImg, {threshold: threshold})//找到图会返回坐标 找不到返回nullif (!result) {return false;} else {click(result.x, result.y);return true;}
}点击图片("/sdcard/脚本/A1.png",0.8); //调用函数

报错:Can't find method findImage()函数

Thread[main (Spawn-0),5]: Can't find method com.stardust.autojs.runtime.api.Images.findImage(boolean,com.stardust.autojs.core.image.ImageWrapper,number,number,null,number).

问题:

我找了很久才发现是,var img = captureScreen("/sdcard/a.png"); 这行代码导致的findImage()函数报以上错误。

仔细看文档(该函数不会返回任何值, 该函数也可以作为全局函数使用)不难发现captureScreen("/sdcard/a.png")带参的函数不会返回image对象,所有当程序跑到findImage()函数时就报错了!

解决方法:

使用captureScreen("/sdcard/a.png")定义截图路径,在使用images.read("/sdcard/a.png");获取image对象

/*** 点击图片* @param {String} smallImgPath 小图片路径* @param {Int} threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9* @returns */
function 点击图片(smallImgPath, threshold) {var screenshotIcon = captureScreen("/sdcard/a.png");if(screenshotIcon){var img = images.read("/sdcard/a.png");var smallImg = images.read(smallImgPath); //读取本地的领取图片var result = findImage(img, smallImg, {threshold: threshold})//找到图会返回坐标 找不到返回nullif (!result) {return false;} else {click(result.x, result.y);return true;}}}点击图片("/sdcard/脚本/A1.png",0.8); //调用函数

报错:Wrapped java. lang . NullPointerException:template = null

错误原因:

函数参数smallImgPath 小图片路径是错误的导致,改为正确的路径及可

解决:

正确路径:"/sdcard/脚本/A2.png",并增加相关image对象日志提示。

/*** 点击图片* @param {String} smallImgPath 小图片路径* @param {Int} threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9* @returns */
function 点击图片(smallImgPath, threshold) {var screenshotIcon = captureScreen("/sdcard/a.png");if(screenshotIcon){var img = images.read("/sdcard/a.png");var smallImg = images.read(smallImgPath); //读取本地的领取图片if(smallImg==null||img==null){toastLog("大图片img:" + img);toastLog("小图片smallImg:" + smallImg);}var result = findImage(img, smallImg, {threshold: threshold})//找到图会返回坐标 找不到返回nullif (!result) {return false;} else {click(result.x, result.y);return true;}}
}点击图片("/sdcard/脚本/A2.png",0.8); //调用函数

问题:每次截图都是上一个界面

错误原因:

当我加入找到指定界面,在立马截图,发现截图依然是上一个界面的。难道是因为原生界面进入小程序导致的吗?因为我们最终操作的界面是一个小程序。

function 点击图片(smallImgPath, threshold) {var titl = textContains("每周五").findOne(13000if(titl!=null){toastLog("找到指定界面")captureScreen("/sdcard/a2.png");}...省略各种代码
}

解决:

截图问题,判断是否在这个界面,如果在立马截图,截图依然是上一个界面,需要延迟几百毫秒最佳。

function 点击图片(smallImgPath, threshold) {var titl = textContains("每周五").findOne(13000if(titl!=null){toastLog("找到指定界面")sleep(4500);captureScreen("/sdcard/a2.png");}...省略各种代码
}

问题:findImage()函数找不到指定的小图片位置

错误原因:

我用的是PC端微信进行截图然后导入手机的,导致无法识别到。

解决:

后来使用手机截图即可立马找到。

问题:系统找到了指定的图片,依然无法执行点击效果

错误原因:

通过多次测试发现:

1.需要执行2次及以上点击click()方法才生效(可能是软件进行了限制);

2.通过多次测试,确认截图识别成功后返回的坐标是小图片最左边的坐标,有时又返回的是最右边的坐标。

解决:

        随后通过界面ui分析发现app可以点击的位置是中间(程序点击是精确到了点和人为点击是不同的),所以截图时一定要截图图片中间位置,或是利用简单算法对返回坐标进行计算。

最终成功的代码示例

function 点击图片(smallImgPath, threshold) {var titl = textContains("每周五").findOne(13000);var screenshotIcon;if(titl!=null){toastLog("找到指定界面")sleep(4500);screenshotIcon = captureScreen("/sdcard/a.png");}if(screenshotIcon){var img = images.read("/sdcard/a.png");var smallImg = images.read(smallImgPath); //读取本地的领取图片if(smallImg==null||img==null){toastLog("大图片img:" + img)toastLog("小图片smallImg:" + smallImg)}var result = images.findImage(img, smallImg, {threshold: threshold})//找到图会返回坐标 找不到返回nullif (!result) {log("没找到2222:" + result);return false;} else {log("找到了1111111" + result);click(result.x, result.y);click(result.x, result.y);return true;}}return false;
}点击图片("/sdcard/脚本/A2.png",0.8); //调用函数

总结

第一次开发这类软件,有很多不足,也遇到很多问题,全部都记录下来,以后遗忘可以回来看下。本想弄个gif动画效果示例的,但手机的gif录制app和autojs有点冲突就不想搞了麻烦。

光看不敲是没用的
看后一定要去实践
一定要去敲代码
一定要去运行试错
这样才是有意义的学习

Auto.js学习笔记13:images.findImag()报错找不到方法,返回的坐标无法点击等问题利用图片的相似度执行精准目标点击(实战篇)相关推荐

  1. Auto.js学习笔记10:实例化自定义对象,在子线程使用JSON.stringify()方法导致报错(已解决)

    申明本人使用的autojs是4.1.1版本 JSON.stringify()使用导致autojs软件直接奔溃退出. 报错核心局部代码 var sendInfoObj = { //对象areaCode ...

  2. Auto.js学习笔记2:真机连接vscode开发工具进行调试,自动开启微信app,自动切换通讯录和微信界面

    实战代码演示启动微信并切换微信和通讯录界面 申明本人使用的autojs是4.1.1版本 1. 安装autojsapp:4.1.1版本 这个不用多说,找到app安装到手机上 启动autojs的app,开 ...

  3. Auto.js学习笔记1:开发需要准备什么工具和编程语言知识?

    什么是Auto.js? 根据官方文档定义:Auto.js是一款无需root权限的JavaScript自动化软件. Auto.js是一款安卓手机的应用主要用webview,和微信一样,安装在手机上: A ...

  4. Auto.js学习笔记4:autojs打包后,大部分华为等大牌子手机无法安装?利用模拟器远程在autoPro里签名打包可以解决该问题。

    准备工作 Android模拟器,我用的逍遥模拟器: auto Pro版本的apk(本人用的是Prov7.0.4.1版本): vs Code开发工具: 一台可以正常连接网络的电脑,这个是必须: 在vs  ...

  5. Auto.js学习笔记——快速入门:软件安装

    Auto.js是什么 Auto.js是不需要Root权限的安卓手机自动化软件(Auto.js文档官方文档) Auto.js与一般的APP一样,安装在手机上,且可以自行编写并运行脚本,从而实现自动化工作 ...

  6. jsp 学习笔记( java编译报错:程序包 javax.servlet和javax.servlet.http 不存在)

    最近学习javaEE这门课程,老师要求不用集成开发环境只用 tomcat (服务器).java 和 浏览器 实现jsp过程,要编译的java文件如下 import javax.servlet.*; i ...

  7. STM32 学习笔记 -- Keil5使用Debug报错之Encountered an improper argument

    Keil5使用Debug报错之Encountered an improper argument 分类专栏: 软件问题 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上 ...

  8. JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法

    最近在写ajax的时候,调用js方法,遇到了Uncaught SyntaxError:Unexpected identifier异常报错,开始搞不清原因,很苦恼. 以为是js方法参数个数和长度的问题, ...

  9. 解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法

    我是在在本地用虚拟机中通过yum安装nginx的,安装一切正常,但是访问时报403, 于是查看nginx日志,路径为/var/log/nginx/error.log.打开日志发现报错Permissio ...

最新文章

  1. Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences
  2. slider使用TickPlacement获得游标效果
  3. 一个领导力培训的游戏练习
  4. 十天学会ASP.Net——(8)
  5. 生态和能力是国内自研操作系统发展的关键
  6. 学校校车运营各项安全管理制度_学校校车接送安全管理制度(通用3篇)
  7. SpringSecurity Basic Authentication
  8. 西安python后端招聘_有大佬招 Python 后端初级人员吗?
  9. moosefs-1.6.10 安装手记
  10. 美团技术leader:写给工程师的十条精进原则
  11. C题:无线充电电动小车(本科)--2018年TI杯大学生电子设计竞赛
  12. Interfaces for Music音乐界面——翻译
  13. outlook怎么配置126邮箱服务器,outlook 如何配置126邮箱
  14. 《留住好员工》-读后感
  15. Web前端面试常见问题
  16. 局部搜索(爬山法+模拟退火+遗传算法)
  17. 估值近百亿,“创维三把手”酷开科技能否顺利赶考?
  18. 编程和乐高机器人的区别
  19. mysql 换文件夹_windows下更换MySql数据库数据文件夹位置
  20. java动态编程解决分硬币问题,动态编程硬币更改问题

热门文章

  1. oracle用于限制分组函数的返回值,Oracle考试试题(带答案)
  2. VMware Workstation Pro新建虚拟机的操作步骤
  3. Flink基础系列8-Flink on yarn运行wordcount程序
  4. 【Unity3D基础2-11】Unity3D网格和材质
  5. 好课堂Scratch编程10 趣学篇(六)听题!格里芬的挑战
  6. 如何限制在制品?| Kanban
  7. 取消改写模式(python)
  8. 【愚公系列】2023年01月 .NET CORE工具案例-基于SqlSugar的多库多表融合查询
  9. 【word小技巧】用WPS调整你的论文格式
  10. 开源!!!100 多个常用 API 数据接口免费分享!建议收藏!