(Autojs)一键打卡脚本
前提概要
Auto-Daily-Clock 是JiyeHoo 学长发起的,通过auto.js实现每日钉钉打卡的脚本。因为脚本的更新状况已经落后于钉钉数个版本,所以部分控件实例已无法正常识别。另一方面,由于学长本人现已从学校毕业,不方便继续维护这个项目。于是我决定 暂时接手 推进项目的维护工作。
AutoX 是一个基于auto.js 的开源项目, 它同样是一个支持无障碍服务的 Android 平台上的 JavaScript IDE,其发展目标是 JsBox 和 Workflow。使用该项目需要同时遵守GPL-V2 和 MPL-2
项目背景
auto.js原作者现已停止对开源版本的维护工作,而付费版本的售价对于一个业余爱好者来说并不便宜,加上最后获取开源版本的打包插件方式对于新手来说并不友好,便放弃了这个平台。毕竟为了一个脚本去编译旧版 IDE,确实过于繁琐了。 (这个夏宇就是菜啦)
所以我选用了基于auto.js开发的AutoX作为继续维护的平台。主要原因有以下两点:
- 支持旧版
auto.js原有的基础函数,兼容性较好。 AutoX作开发仍在推进的开源项目,后续更方便维护安全,且安全具有保障
改进路线
原项目中使用toast事件来打印消息,这样不利于排查出现问题的原因,所以改用log()来集中打印日志信息。经过逐步调试可以发现,原本预定识别控件的样式都发生了变化,有的部分甚至已经无法识别当前所处的位置界面。 可以直接准备全部重构了。
添加界面识别
在钉钉版本更新后,底部 Tab 栏的工作台按钮的图标会在校徽和 “钉钉原有样式” 之间变换。那么我们就不要去管它具体变成什么,只要通过其他方式确定页面已经正确加载再直接盲点即可。
1 | className("android.widget.ListView").findOne(); |
点击指定控件
通过AutoX自带的界面分析工具我们可以得知,填写打卡信息的页面中,获取定位一栏处,text("获取")对应控件以及其父级并不具备点击事件,所以改为获取控件坐标,然后尝试点击控件中心的位置。
1 | var hq = className("android.view.View").text("获取").findOne(); |
紧接着是最后的提交,因为钉钉版本更新后该按钮也无法获取,所以要用gesture滑倒最下面,进行盲点。这里可以看到原作的旧版本就是这样处理的,那么就把现有的代码注释掉,把注释代码前的注释符删掉就大功告成了。
加个 GUI
为了方便其他人使用或进一步了解这个项目,给启动界面做了个简单的 GUI
1 | "ui"; |
不会用 javascript 画,所以随便找了个有 GUI 的脚本依葫芦画瓢给搬了过来。 总之,得把注意事项给写上,滥用工具还出事了的话,我可不背锅。
细枝末节
减少sleep()的时间,并在findOne()中补上 延时等待。这样可以同时防止手机性能太差页面加载赶不上脚本执行速度,和点击过快
会导致卡住的问题。
1 | className("android.widget.ListView").findOne(3000); |
可有可无
专门单独写了个函数来报错 (异常越处理越多,干脆不要处理好了)
1 | function end(step) { |
完事后话
Auto-Daily-Clock是这个项目一开始的名称,现更名为AutoDailyClock-GUT 是为了防止和其他项目产生冲突 (但是我完全不想用 AutoDailyDingClockGUT 这种太长的名字)正如前文所说,我不保证会对它进行长期维护。一方面是相信这片人才辈出的天地一定后继有人,另一方面是希望持续已久的疫情早日解除。
最后,AutoDailyClock-GUT作为我的第一个 auto.js(AutoX) 项目给我带来了前所未有的经验,同时,它也作为我博客里完成的第一篇正文,纪念我开始迷茫的那段时光。
相关链接:









