欢迎光临散文网 会员登陆 & 注册

校园一卡通余额自动查询提醒脚本

2023-08-02 18:44 作者:落落落qiu  | 我要投稿


校园一卡通余额自动查询提醒脚本 

原文链接 https://sxdl.site/2023/08/02/202308021407/

背景

宿舍的水电费在晚上23:30到3:30这一时间段内是无法充值的,这就导致了经常半夜欠费停电停空调还无法充值的问题。学校提供的水电余额查询的唯一途径是企业微信的应用,且没有自动提醒的功能,因此自己开发一个程序用来定时自动查询余额然后发送微信提醒。


由于查询的 api 并不清楚,而且企业微信中的应用都需要身份验证,实在太麻烦。想着先尽快把功能实现,之后再考虑稳定性和扩展性,采用脚本的方式实现。


实现思路

设备选择

水电费查询的入口都在企业微信中,而企业微信只有Windows和移动客户端,没有Linux客户端。如果要放在服务器上跑的话环境配置十分麻烦,因此考虑将脚本放在本地设备上跑。本地设备需要确保在指定的时间段内保持开机并不被使用,因为脚本运行的时候不能对设备页面进行操作(脚本是按照步骤顺序运行的,外界操作会干扰脚本运行)。手头目前的设备有:两台笔记本,一台Windows,一台Ubuntu,一个华为平板,一个华为手机。其中Windows笔记本日常经常使用,另一台用作学习折腾和本地Linux环境,不方便重新刷系统,手机日常一直在用。平板倒是合适,一般从来不关机,平常只是用来记笔记用。最后就决定使用平板,在平板上跑脚本。


脚本工具

安卓平台上有个很不错的脚本工具,`Auto.js`,现在似乎已经停止维护了,还能用的有 [AutoX.js](http://doc.autoxjs.com/#/) 和 [OpenAuto.js](https://openautojs.github.io/#/). 本着对开源项目的偏好,我这里使用了 `OpenAuto.js`。


运行流程

预先登录企业微信和微信(用于消息提醒,可换用公众号或其他),脚本首先打开企业微信,找到查询的服务,查询到余额后将余额通过微信发送到指定聊天对话中(个人或群聊)。


环境准备

  •  华为平板(HarmonyOS 3.0)

  • OpenAuto.js

  • 企业微信

  • 微信

  • 一键锁屏(OpenAutojs没有提供锁屏的功能, 一键锁屏通过应用市场安装)


编写脚本

由于不同的环境脚本会有差异,不放详细代码了,只写关键的几个命令。详细说明查看[OpenAuto.js文档](https://openautojs.github.io/#/)


自动唤醒

用于从息屏状态中唤醒屏幕,然后解锁,注意必须没有密码,直接上滑解锁的那种。


```javascript

device.wakeUp();

```

手势

模拟上滑解锁或屏幕下滑,尝试使用过 swipe() 但是并不好用。


```javascript

gestures([350, [500, 1600], [500, 300]]);  // 上滑

gestures([350, [500, 300], [500, 1600]]);  // 下滑

```


其中`350`这个位置的参数指持续时间(毫秒),后面两个参数是起始点的坐标,默认屏幕是1080x1920像素。


等待

参数等待时间(毫秒),如果脚本出现问题,如某个控件找不到,可能是没有设置sleep,等待页面完全加载出来。


```javascript

sleep(1000);

```


控件点击

尝试了各种点击方法,发现只有一种能用(不是我不会用,是真的就找不到控件),直接通过文字点击控件。


```javascript

click("控件名称")

```


启动程序

```javascript

var appName = "应用名称"

launchApp(appName);

sleep(3000);  // 记得添加以等待程序启动

```


OCR文字识别

先截图(需要获取权限,可以使用多线程自动允许),然后OCR提取文字


```javascript

if(!requestScreenCapture()){  // 获取截图权限

    toast("请求截图失败");

    exit();

}

sleep(1000);

var img = captureScreen();

const stringList = paddle.ocrText(img, true);  // 识别到的文字列表

img.recycle();  // 回收图片,避免内存泄漏

```


多线程

在截图时,需要应用内获取权限,一般需要手动授权,也可以通过多线程自动授权。


```javascript

threads.start(function(){

    sleep(1000);

    click("允许");

})

```


界面操作

一些基础的界面操作


```javascript

home();  // 返回主菜单

sleep(1000);

back();  // 返回上一级

sleep(1000);

```


对话框输入

输入文本到当前页面中的对话框,用于微信发消息。


```javascript

input("message");

```


脚本调试

开发过程中,可能需要显示调试信息


```javascript

console.show();  // 显示控制台信息在应用上层,需要开启权限

toastLog("日志信息");

console.log("另一种方法,效果相同")

```


脚本退出

```javascript

exit();

```


运行脚本

首次运行脚本需要开启应用无障碍服务权限,点击运行即可。


设置定时任务

在 `OpenAuto.js` App 中可以设置脚本为定时任务。需要开启程序后台运行权限。


运行效果


后续

用了一个晚上,目前是基本实现了主要功能,后面考虑做一些稳定性和适用性的优化,简单列个Todo:


  • 更多提醒方式(邮件,公众号,企业微信)

  • 脚本打包成apk,其他用户可以开包即用

  • 将查询结果发送到服务器上,服务器做一个余额变化统计


校园一卡通余额自动查询提醒脚本的评论 (共 条)

分享到微博请遵守国家法律