Hamibot是基于Auto.js开发且开发者与用户均可免费使用。在写下这些文字时,看到有Auto.js Pro产品(目前并未了解Pro的功能)。
如果你正想使用Hamibot开发一款出自己的脚本,建议你到官网的开发文档去看,而不是在网上查找你想做的每一步。
这篇文档仅作我开发学校内企业微信自动打卡的脚本记录,当然也会简单介绍一下代码的用途。
声明: 笔者并未学习过Java Script,而是在编写脚本过程中根据Java Script语法进行编辑(参考文档:菜鸟教程)
首先是用户配置:
在脚本内,Hamibot获取配置信息的方式:
const { msg1 } = hamibot.env;
msg1你可以直接对照上图查看,便能了解其中编写方式。
设置屏幕固定大小,若是不同机型脚本则会自动调整。
setScreenMetrics(2340, 1080);
开启悬浮窗
setInterval(() => {}, 1000);
var w = floaty.window(
<frame gravity='center' bg='#708090'>
<text id='text'>悬浮窗</text>
</frame>
);
悬浮窗窗口设置
w.setAdjustEnabled(false);
w.setPosition(350, 20);
w.setSize(500, 230); // -2, -2根据内容大小变化
// 悬浮窗内容
function floatWindow(textContent){
ui.run(function() {
w.text.setText(String(textContent));
});
log(textContent);
}
sleep(5000);
启动企业微信,并判断
var start = launch('com.tencent.wework');
if (start){
floatWindow("企业微信启动中……");
}else{
floatWindow("未找到企业微信!");
clock();
}
打卡,因为这里无法使用控件,故此只好用点击(click)。
// 进入打卡函数
function findAndClick(textcontent, position){
var findWorkPlatFrom = text(textcontent).findOne();
if (findWorkPlatFrom){
floatWindow("已找到" + textcontent);
sleep(1500);
click(position[0], position[1], position[2], position[3]);
}
}
进入打卡之后的选项函数
function varOption (textcontent, optionNumber){
var option = text(textcontent).findOne();
if (option){
floatWindow("已点击选项" + String(optionNumber + 1));
option.click();
}
}
倒计时关闭脚本
function clock(){
for (var i = 10; i >= 1; i--){
floatWindow(String(i));
sleep(1000);
}
device.vibrate(2000);
w.exitOnClose();
}
参数配置
const position = [[648,2165,864,2272], [73,537,229,589], [214,278,687,352]];
const workPlatFrom = ["工作台", "健康上报", "学生每日健康情况登记"];
const option =[msg1, msg2, msg3, msg4, msg5, msg6, "同意并提交"];
全部源码
auto.waitFor(); // 文档地址:https://docs.hamibot.com/reference/widgetsBasedAutomation
// auto.setMode("fast");
// auto.root();
setScreenMetrics(2340, 1080);
// 悬浮窗
setInterval(() => {}, 1000);
var w = floaty.window(
<frame gravity='center' bg='#708090'>
<text id='text'>悬浮窗</text>
</frame>
);
// 悬浮窗窗口设置
w.setAdjustEnabled(false);
w.setPosition(350, 20);
w.setSize(500, 230); // -2, -2根据内容大小变化
// 悬浮窗内容
function floatWindow(textContent){
ui.run(function() {
w.text.setText(String(textContent));
});
log(textContent);
}
sleep(5000);
try{
// 启动 企业微信
var start = launch('com.tencent.wework');
if (start){
floatWindow("企业微信启动中……");
}else{
floatWindow("未找到企业微信!");
clock();
}
// 进入打卡函数
function findAndClick(textcontent, position){
var findWorkPlatFrom = text(textcontent).findOne();
if (findWorkPlatFrom){
floatWindow("已找到" + textcontent);
sleep(1500);
click(position[0], position[1], position[2], position[3]);
}
}
// 选项函数
function varOption (textcontent, optionNumber){
var option = text(textcontent).findOne();
if (option){
floatWindow("已点击选项" + String(optionNumber + 1));
option.click();
}
}
function clock(){
for (var i = 10; i >= 1; i--){
floatWindow(String(i));
sleep(1000);
}
device.vibrate(2000);
w.exitOnClose();
}
}catch(e){
txt = "错误内容:" + e.message + "\n";
alert(txt);
floatWindow(txt);
floatWindow("十秒后结束程序");
clock();
}
const { msg1 } = hamibot.env;
const { msg2 } = hamibot.env;
const { msg3 } = hamibot.env;
const { msg4 } = hamibot.env;
const { msg5 } = hamibot.env;
const { msg6 } = hamibot.env;
const position = [[648,2165,864,2272], [73,537,229,589], [214,278,687,352]];
const workPlatFrom = ["工作台", "健康上报", "学生每日健康情况登记"];
const option =[msg1, msg2, msg3, msg4, msg5, msg6, "同意并提交"];
// var option =["一切正常,可正常返校", "否", "不确定,曾有新冠感染症状", "正常", "无需检测", "已接种3针", "同意并提交"];
// 进入点击
for (var i = 0; i<position.length; i++){
findAndClick(workPlatFrom[i], position[i]);
}
// 点击选项
for (var i = 0; i<=option.length; i++){
varOption(option[i], i);
swipe(891, 2159, 758, 30, 850);
sleep(1000);
}
// 倒计时十秒结束程序
clock();