直接使用手机扫描官网给出的二维码即可下载
官网安装链接: link
autojspro应该是需要会员才能使用,为了能自动打卡,我也是忍痛割爱花了45块买了永久会员
首先,打开如图所示的两个功能
然后新建一个文件,并给该文件任意起一个名字
下面将直接给出完整代码,由于我们学校的打卡可以在网页端进行,因此下面的代码只适用于其他网页端打卡
// 启用稳定模式
$settings.setEnabled('stable_mode', true);
auto()
// 输入密码
function password_input()
{
var password = "111111" //这里输入你的锁屏密码
for(var i = 0; i < password.length; i++)
{
var p = text(password[i].toString()).findOne().bounds();
click(p.centerX(), p.centerY());
sleep(100);
}
}
// 解锁屏幕
function unlock()
{
if(!device.isScreenOn())
{
device.wakeUp();
sleep(500);
swipe(500,2000,500,1000,210);
password_input();
}
}
unlock();
sleep(2000)
app.openUrl("https://xxx.x.xxx.edu.cn/") //这里输入你们学校打卡的网址
sleep(2000)
//下面有三个bounds函数,每个bounds函数里有四个值,这四个值需要根据自己的手机布局分析来进行填写
while(true){
sleep(1000)
if(className("android.widget.EditText").bounds(375,456,954,525).exists()){
className("android.widget.EditText").bounds(375,456,954,525).findOne().setText("这里输入你的用户名/学号")
sleep(100)
className("android.widget.EditText").bounds(375,540,954,609).findOne().setText("这里输入密码")
className("android.widget.Button").text("进入健康状况上报平台").findOne().click()
break;
}else if(className("android.view.View").text("本人填报").exists()){
break;
}
}
className("android.view.View").text("本人填报").findOne().click()
className("android.view.View").text("提交表格").findOne().click()
sleep(2000)
className("android.view.View").text("确认").findOne().click()
关键函数在autojspro的官方文档里都可以找到,这里将对代码进行分析,对其中的关键函数做个简要介绍
// 输入密码
function password_input()
{
var password = "111111" //这里输入你的锁屏密码
for(var i = 0; i < password.length; i++)
{
var p = text(password[i].toString()).findOne().bounds();
click(p.centerX(), p.centerY());
sleep(100);
}
}
// 解锁屏幕
function unlock()
{
if(!device.isScreenOn())
{
device.wakeUp();
sleep(500);
swipe(500,2000,500,1000,210);
password_input();
}
}
unlock();
if(className("android.widget.EditText").bounds(375,456,954,525).exists()){
className("android.widget.EditText").bounds(375,456,954,525).findOne().setText("这里输入你的用户名/学号")
sleep(100)
className("android.widget.EditText").bounds(375,540,954,609).findOne().setText("这里输入密码")
className("android.widget.Button").text("进入健康状况上报平台").findOne().click()
}
那么这几行代码又是如何写的呢?其实,autojspro有分析页面布局的功能,对于每个控件的操作都可以自动生成代码。
比如说这里我们需要先判断一下用户号这个控件是否存在,就可以按照下面图片所示进行操作
如果该控件存在,说明我们需要进行登录,下面我们就需要在两个文本框中进行输入。这也同样涉及了基于控件的操作,但由于这个输入框无法生成代码,所以需要我们结合文档来写出具体函数。文档详情
className(“android.widget.EditText”).bounds(375,456,954,525).findOne().setText(“这里输入你的用户名/学号”) className(“android.widget.EditText”).bounds(375,540,954,609).findOne().setText(“这里输入密码”)
仔细阅读那几段话,其实意思还是挺好理解的。
由于浏览器每次打开网址都会出现不同时长的延迟,因此判断控件是否存在的代码就需要写进while循环中,这样一旦控件存在,就可以直接跳出循环执行后续代码
上述代码基本实现了自动打卡,但是由于浏览器性能问题以及打卡网站安全性的问题,有时会弹出网站安全证书过期的提示,若想彻底解放双手,那么也需要把这种问题也考虑进去(方法就按照官方文档来写就可以了,应该也不是很难)。至于代码调试的问题,由于手机上不方便修改代码,可以借助vscode进行调试,具体教程可以参考一下这两篇博客(博客一,博客二),这里不加以赘述。