湖南科技大学自动健康打卡 --- auto.js


前言

本文不是用python写的,而是用auto.js,python的话,一是学艺不精,二是我并没有找到打卡网址,如果还想深入研究一下,可以看这个 链接.

一、auto.js优缺点及下载地址

Auto.js是利用安卓系统的“辅助功能”实现类似于按键精灵一样,可以通过代码模拟一系列界面动作的辅助工作。

缺点还是要先说明一下,就是每次都要开启这个app,首先要打开无障碍功能才行

下载链接(注意:进去后选择第二个下载): 下载地址.

二、代码

150行左右

废话就不多说了,直接看代码:


auto.waitFor();
var phone = "110";
var province = "xxx";
var shi = "xxx";
/*详细地址*/
var detailAddress = "xxx";
/*如果不需要在qq群中签到,就要删掉下面两个方法*/
var qqqun = "xxx";
launchApp("微信");/*启动微信*/
sleep(1000);
/*找到搜索框 微信8.0搜索框的id*/
var object = className('android.widget.ImageView').id("he6").findOne();
let b = object.bounds();
click(b.centerX(), b.centerY());
sleep(2000);
/*搜索的文字*/
setText('学生健康打卡');
sleep(200);
/*点击内容*/
className("RelativeLayout").depth(10).drawingOrder(3).findOne().click();
text("健康打卡").findOne().parent().parent().click();
sleep(3000);
text("健康打卡").findOne().click();
sleep(3000);
var a = text("+ 今日打卡").findOne().bounds();
click(a.centerX(), a.centerY());
sleep(3000);
if (className("android.view.View").text("今日已打卡,明天再来!").exists()) {
    
    
    toast("今日已打卡");
    goBack();
} else {
    
    
    toast("开始打卡");
    sleep(1000);
    swipe(500, 1500, 500, 500, 1000);
    /*电话*/
    directlyWriteInfo(4, phone);
    /*当前所在地*/
    writeAddress();
    /*详细地址*/
    directlyWriteInfo(7, detailAddress);
    /*租住在学校附近*/
    findView(8);
    writeInfo("否");
    /*体温*/
    directlyWriteInfo(9, "36.5");
    /*是否到过武汉*/
    findView(10);
    writeInfo("否");
    /*是否接触确诊人员*/
    findView(11);
    writeInfo("无接触");
    /*目前状况*/
    findView(12);
    writeInfo("正常");
    /*家属状况*/
    findView(13);
    writeInfo("正常");
    /*出现的症状*/
    indexInParent(15).depth(21).row(-1).findOne().child(0).click();
    /*今日外出行程*/
    setText([6], "无");
    /*提交*/
    indexInParent(17).depth(21).row(-1).findOne().child(0).click();
    /*确认提交*/
    text("确认提交").findOne().click();
    sleep(500);
    toast("成功打卡");
    goBack();
    /*qq群*/
    goto(qqqun);
    sendMessage();
    exit();
}

function findView(index) {
    
    
    indexInParent(index).depth(21).row(-1).findOne().child(1).child(0).click();
    sleep(500);
}
function writeInfo(message) {
    
    
    var info = text(message).findOne().bounds();
    click(info.centerX(), info.centerY());
    sleep(500);
}
function directlyWriteInfo(index, message) {
    
    
    indexInParent(index).depth(21).row(-1).findOne().child(1).child(0).setText(message);
    sleep(500);
}
function goBack() {
    
    
    for (let i = 0; i < 4; i++) {
    
    
        back();
        sleep(500);
    }
}
function goto(qqqun) {
    
    
    app.startActivity({
    
    
        action: "android.intent.action.VIEW",
        data: "mqqapi://card/show_pslcard?src_type=internal&version=1&card_type=group&uin=" + qqqun,
        packageName: "com.tencent.mobileqq",
    });
    text("发消息").findOne().click();
}
function sendMessage() {
    
    
    id("input").findOne().setText("1");
    id("fun_btn").findOne().click();
    toast("签到成功");
    sleep(500);
    back();
    home();
}

function writeAddress() {
    
    
    findView(6);
    /*省份*/
    var i = 0;
    var j = 0;
    var rect = className("LinearLayout").depth(5).drawingOrder(1).findOne().bounds();
    var exist1 = className("TextView").depth(7).text(province).exists();
    while (i < 10 && exist1) {
    
    
        /*为什么放里面,因为我每次都要刷新这个bounds*/
        var c = className("TextView").depth(7).text(province).findOne().bounds();
        print(rect.bottom + "--- " + rect.top + "----" + c);
        if (c.bottom < rect.bottom && c.top > rect.top) {
    
    
            click(c.centerX(), c.centerY());
            break;
        } else {
    
    
            swipe(rect.centerX(), rect.centerY(), rect.centerX(), rect.top + 20, 1000);
        }
        i++;
    }
    if (i == 10 || !exist1) {
    
    
        toast("请检查你输入的省份,并重新执行程序");
        exit();
    }
    /*市*/
    indexInParent(6).depth(21).row(-1).findOne().child(1).child(1).click();
    sleep(500);
    var exist2 = className("TextView").depth(7).text(shi).exists();
    while (j < 10 && exist2) {
    
    
        var l_shi = className("TextView").depth(7).text(shi).findOne().bounds();
        if (l_shi.bottom < rect.bottom && l_shi.top > rect.top) {
    
    
            click(l_shi.centerX(), l_shi.centerY());
            break;
        } else {
    
    
            swipe(rect.centerX(), rect.centerY(), rect.centerX(), rect.top + 20, 1000);
        }
        j++;
    }
    if (j == 10 || !exist2) {
    
    
        toast("请检查你输入的市,并重新执行程序");
        exit();
    }
}

使用

  1. 我对代码进行了封装,只需在代码开头的几行修改成你自己的信息 你的电话,省份,市,详细地址,要签到的qq群,代码对各个手机都是适配的。每个手机应该都是可以自动化的
  2. 如果js代码总是显示在一行,那么就要格式化代码
    步骤:进入某一个文件 —> 编辑 —> 格式化代码
  3. 要注意一点,打开app后,第一时间要打开无障碍功能,可能要多试几次
  4. 然后就可以自动打卡了

说明

  1. 点击之后不可能快速反应过来,所以代码多处用了sleep
  2. 我直接是launchApp(“微信”),所以进入微信后一定要是主界面才行,不然找不到控件,就不能进行接下来的点击事件了

总结

有不懂的话,可以加我qq(3620841688)聊聊,这个不常看
可能会有不足,欢迎指出,勿喷

猜你喜欢

转载自blog.csdn.net/zk2000416/article/details/113175708
今日推荐