利用AutojsPro进行自动打卡(保姆级教程)

目录

  • AutojsaPro安装
  • AutojsPro的使用
  • 完整代码
  • 代码分析
  • 总结

AutojsaPro安装

直接使用手机扫描官网给出的二维码即可下载

官网安装链接: link

AutojsPro的使用

autojspro应该是需要会员才能使用,为了能自动打卡,我也是忍痛割爱花了45块买了永久会员

首先,打开如图所示的两个功能
利用AutojsPro进行自动打卡(保姆级教程)_第1张图片
然后新建一个文件,并给该文件任意起一个名字
利用AutojsPro进行自动打卡(保姆级教程)_第2张图片
利用AutojsPro进行自动打卡(保姆级教程)_第3张图片

完整代码

下面将直接给出完整代码,由于我们学校的打卡可以在网页端进行,因此下面的代码只适用于其他网页端打卡

// 启用稳定模式
$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的官方文档里都可以找到,这里将对代码进行分析,对其中的关键函数做个简要介绍

  • 首先是启用稳定模式 $settings.setEnabled(‘stable_mode’, true);
    利用AutojsPro进行自动打卡(保姆级教程)_第4张图片
  • 然后是自动解锁手机
    这里我直接用的别的博主提供的代码
// 输入密码
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();
  • 接着是进入指定网址
    app.openUrl(“https://xxx.x.xxx.edu.cn/”)
    利用AutojsPro进行自动打卡(保姆级教程)_第5张图片
  • 然后会进入打卡页面,因为浏览器一般都会有缓存,所以这里需要先判断一下是否需要进行登录
    if(className(“android.widget.EditText”).bounds(375,456,954,525).exists()){}
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有分析页面布局的功能,对于每个控件的操作都可以自动生成代码。
比如说这里我们需要先判断一下用户号这个控件是否存在,就可以按照下面图片所示进行操作
利用AutojsPro进行自动打卡(保姆级教程)_第6张图片

利用AutojsPro进行自动打卡(保姆级教程)_第7张图片
利用AutojsPro进行自动打卡(保姆级教程)_第8张图片
如果该控件存在,说明我们需要进行登录,下面我们就需要在两个文本框中进行输入。这也同样涉及了基于控件的操作,但由于这个输入框无法生成代码,所以需要我们结合文档来写出具体函数。文档详情
className(“android.widget.EditText”).bounds(375,456,954,525).findOne().setText(“这里输入你的用户名/学号”) className(“android.widget.EditText”).bounds(375,540,954,609).findOne().setText(“这里输入密码”)
仔细阅读那几段话,其实意思还是挺好理解的。
利用AutojsPro进行自动打卡(保姆级教程)_第9张图片

由于浏览器每次打开网址都会出现不同时长的延迟,因此判断控件是否存在的代码就需要写进while循环中,这样一旦控件存在,就可以直接跳出循环执行后续代码

总结

上述代码基本实现了自动打卡,但是由于浏览器性能问题以及打卡网站安全性的问题,有时会弹出网站安全证书过期的提示,若想彻底解放双手,那么也需要把这种问题也考虑进去(方法就按照官方文档来写就可以了,应该也不是很难)。至于代码调试的问题,由于手机上不方便修改代码,可以借助vscode进行调试,具体教程可以参考一下这两篇博客(博客一,博客二),这里不加以赘述。

你可能感兴趣的:(javascript)