用Auto.JS实现钉钉的疫情打卡
在没学编程之前,我一开始是用的人家的app点击模拟器,录制一个视频,脚本模拟点击,但是在实际的情况下面会出现各种各样的bug,比如网络延迟、服务器未响应,弹窗位置无法确定。让我一直很郁闷,直到我遇到了Auto.Js和一位b站的up主道无涯的教程,才开始编写自己的钉钉疫情打卡脚本。也是不断的测试,才有了现在的自动解锁屏幕打卡脚本,自己也是学到了很多东西。如果你也是苦于重复且枯燥的工作,不妨试试Auto.Js。我觉得对初学者来说,是一个十分友好的语言且容易上手的脚本语言。
下面是浙江工业大学的钉钉疫情打卡脚本,有需要的老铁可以改改自己用,反正我写的比较垃圾,但是能用。也算是成长的记录。
function 工大战疫() {
// 打开auto.jsPro
// app.launchApp("AutoJsPro");// 如果你用的是auto.js非pro版本 那这行就注释掉
sleep(500);
app.launchApp("钉钉");// 打开钉钉
// id("doppelganger_app_icon").findOne().click();// 点击钉钉分身 没有用钉钉分沈
sleep(3000);// 等待钉页面加载
toastLog("钉钉打开成功");
// 点击工大钉
var a = text("工大钉").findOne().bounds();
click(a.centerX(), a.centerY());
toastLog("点击工大钉");
// 点击工大战疫
sleep(500);
var a = text("工大战疫").findOne().bounds();
click(a.centerX(), a.centerY());
toastLog("点击工大战疫");
// 等待界面出现
toastLog("等待界面出现");
className("android.view.View").text("每日健康申报(学生版)").waitFor();
// 点击该死的弹窗确定 这里用找色点击
sleep(1500);
requestScreenCapture();
while (true) {
var img = captureScreen();
var point = findColor(img, "#ef2038");// 确定的颜色例如 #f3576a #ef2239 #ef2038
if (point) {
toastLog("找到红色确定,坐标为(" + point.x + ", " + point.y + ")");
click(point.x, point.y);
break;
}
}
// 点击回家
//className("android.widget.RadioButton").text(" 回家").findOne().click();
// 点击今天在校园内
className("android.widget.RadioButton").text(" 今天在校园内 I will be at school today").findOne().click();
toastLog("点击今天在校园内");
// 向下滑动
sleep(500);
toastLog("正在向下滑动");
swipe(device.width / 2, device.height / 100 * 99, device.width / 2, device.height / 100, 1000);
swipe(device.width / 2, device.height / 100 * 99, device.width / 2, device.height / 100, 1000);
// 点击体温第一次
sleep(500);
var a = className("android.widget.Button").text("选择今日体温(第一次)").findOne().bounds();
click(a.centerX(), a.centerY());
toastLog("点击体温第一次");
sleep(500);
className("android.widget.Button").text("确认").findOne().click();
// 点击体温第二次
sleep(500);
var a = className("android.widget.Button").text("选择今日体温(第二次)").findOne().bounds();
click(a.centerX(), a.centerY());
toastLog("点击体温第二次");
sleep(500);
className("android.widget.Button").text("确认").findOne().click();
//同意签订承诺书
sleep(500);
//滑到最底部
toastLog("正在滑到最底部");
swipe(device.width / 2, device.height / 100 * 99, device.width / 2, device.height / 100, 1000);
swipe(device.width / 2, device.height / 100 * 99, device.width / 2, device.height / 100, 1000);
sleep(500);
className("android.widget.CheckBox").text(" 同意签订承诺书").findOne().click();
toastLog("同意签订承诺书");
// 提交
sleep(500);
className("android.view.View").text("提交").findOne().click();
toastLog("提交");
toastLog("打卡成功");
sleep(1000);
back();
sleep(1000);
// 检查校园通行码是否正常
// 点击通行码
className("android.view.View").text("通行码").findOne().click();
toastLog("点击通行码");
sleep(3000); // 等待通行码页面加载
// 判断是否获得通行码
if (className("android.view.View").text("杭州大数据健康码:绿码").exists()) {
toastLog("打卡成功");
console.show();
} else {
toastLog("打卡失败");
console.show();
}
}
function 解锁屏幕() {
var screen = device.isScreenOn();
toastLog("屏幕打开状态:" + screen);
if (!screen) {
device.wakeUpIfNeeded();
device.wakeUp();//点亮屏幕
sleep(500);
swipe(350, 1500, 350, 350, 500);//向上滑动来到解锁页面
sleep(500);
//我这里是非root手机 所以采用点击坐标的方式
click(868, 1911);//9
sleep(500);
click(568, 1505);//2
sleep(500);
click(180, 1700);//4
sleep(500);
click(900, 1500);//3
sleep(500);
toastLog("屏幕解锁成功");
};
sleep(1000);
//下拉通知栏打开定位服务
notifications();
sleep(500);
// click("开关");
click(846, 2236);//点击开关
sleep(500);
click(910, 772);//点击定位开关
sleep(500);
swipe(350, 1900, 350, 350, 1000);//上拉通知栏
sleep(500);
toastLog("打开定位成功");
}
function 关闭定位() {
notifications();
sleep(500);
click("开关");
click(846, 2236);
sleep(500);
click(910, 772);
sleep(500);
swipe(350, 1900, 350, 350, 1000);
toastLog("关闭定位成功");
console.show();
sleep(1000);
console.hide();
sleep(1000);
back();
sleep(500);
//点击消息
var a = text("消息").findOne().bounds();
click(a.centerX(), a.centerY());
toastLog("点击消息成功");
sleep(500);
home();
console.show();
}
auto();
解锁屏幕();
工大战疫();
sleep(3000);
关闭定位();
recents();
sleep(100);
id("clear_all_button").findOne().click();//清楚所有没锁的后台应用
sleep(500);
engines.stopAllAndToast();
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
现在不用了 疫情放开了 好耶!!!