在没学编程之前,我一开始是用的人家的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();