Hamibot 是一款开源的自动化手机测试脚本项目,是一款 Android 平台 JavaScript 自动化工具,无需 root,无需编程基础,在脚本市场内安装脚本即可运行。适用于安卓系统的自动化工具,能操控任意 APP,实现自动化操作,提高工作效率,可以允许脚本查询在手机上完美的运行,兼容多种代码模块并提供丰富的第三方库
该平台目前只支持安卓手机,脚本代码可以从脚本市场中获取,也可以自己在控制台中编写js代码
,并且官方也提供了详细的开发文档
脚本市场
在脚本市场里有其他用户已封装好的脚本代码可供直接订阅使用
自定义脚本
有了官方的开发文档,我们也可以尝试着自己写去一些有意思的挂机刷视频文章脚本和整人脚本
- 在手机端下载Hamibot:https://dl.hamibot.com/com.hamibot.hamibot.apk
- 关联机器人:切换到机器人页面,点击添加机器人,输入配对码即可
- 编写脚本代码:脚本代码可以从脚本市场中获取,也可以自己在控制台中编写js代码
常用方法
Hamibot中有一些方法需要ROOT权限才能调用
方法名前带有Root字段的方法表示该方法需要ROOT权限,这里主要使用的是非ROOT方法
//获取这个控件
var widget = id('xxx').findOne();
//获取其中心位置并点击
click(widget.bounds().centerX(), widget.bounds().centerY());
//如果用root权限则用Tap
开发文档:https://docs.hamibot.com/
click(x, y)
-
x
要点击的坐标的 x 值 -
y
要点击的坐标的 y 值 -
//点击确定 var f1 = text('确定') .findone() .click();
模拟点击坐标(x, y),并返回是否点击成功。只有在点击执行完成后脚本才继续执行。
一般而言,只有点击过程(大约 150 毫秒)中被其他事件中断(例如用户自行点击)才会点击失败。
使用该函数模拟连续点击时可能有点击速度过慢的问题,这时可以用press()
函数代替。
longClick(x, y)
-
x
要长按的坐标的 x 值 -
y
要长按的坐标 - 的 y 值
模拟长按坐标(x, y), 并返回是否成功。只有在长按执行完成(大约 600 毫秒)时脚本才会继续执行。
一般而言,只有长按过程中被其他事件中断(例如用户自行点击)才会长按失败。
press(x, y, duration)
-
x
要按住的坐标的 x 值 -
y
要按住的坐标的 y 值 -
duration
按住时长,单位毫秒
模拟按住坐标(x, y), 并返回是否成功。只有按住操作执行完成时脚本才会继续执行。
如果按住时间过短,那么会被系统认为是点击;如果时长超过 500 毫秒,则认为是长按。
一般而言,只有按住过程中被其他事件中断才会操作失败。
一个连点器的例子如下:
//循环100次
for (var i = 0; i < 100; i++) {
//点击位置(500, 1000), 每次用时1毫秒
press(500, 1000, 1);
}
swipe(x1, y1, x2, y2, duration)
-
x1
滑动的起始坐标的 x 值 -
y1
滑动的起始坐标的 y 值 -
x2
滑动的结束坐标的 x 值 -
y2
滑动的结束坐标的 y 值 -
duration
滑动时长,单位毫秒
模拟从坐标(x1, y1)滑动到坐标(x2, y2),并返回是否成功。只有滑动操作执行完成时脚本才会继续执行。
gesture(duration, [x1, y1], [x2, y2], …)
-
duration
手势的时长 - [x, y] … 手势滑动路径的一系列坐标
模拟手势操作。例如gesture(1000, [0, 0], [500, 500], [500, 1000])
为模拟一个从(0, 0)到(500, 500)到(500, 100)的手势操作,时长为 2 秒。
RootAutomator.swipe(x1, y1, x2, y2[, duration, id])
-
x1
滑动起点横坐标 -
y1
滑动起点纵坐标 -
x2
滑动终点横坐标 -
y2
滑动终点纵坐标 -
duration
滑动时长,单位毫秒,默认值为 300 -
id
多点触摸 id,可选,默认为 1
模拟一次从(x1, y1)到(x2, y2)的时间为 duration 毫秒的滑动
RootAutomator.press(x, y, duration[, id])
-
x
横坐标 -
y
纵坐标 -
duration
按下时长 -
id
多点触摸 id,可选,默认为 1
模拟按下位置(x, y),时长为 duration 毫秒。
RootAutomator.longPress(x, y, duration[, id])
-
x
横坐标 -
y
纵坐标 -
duration
按下时长 -
id
多点触摸 id,可选,默认为 1
模拟长按位置(x, y)。
home()
- 模拟按下手机home
back()
- 模拟手机返回上一页
toast(parameter)
-
在手机上显示parameter信息
-
toast("卷寺你");
alert(parameter)
- 弹框parameter信息
console控制台
-
console.show():在手机中显示控制台
-
console.hide():隐藏关闭显示台
-
console.log(parameter):将parameter显示在控制台中
-
console.show(); console.log("大煞笔");
-
获取时间—Date
-
// 获取时间 var d = new Date(); var hour= d.getHours();//得到小时数 console.log(hour+'点'); console.log(hour==13); var minute= d.getMinutes();//得到分钟数 console.log(minute+'分钟'); var second= d.getSeconds();//得到秒数 console.log(second+'秒');
获取控件位置信息
由于每个软件的控件不一,获取控件的位置信息可以通过手机开发者模式下自带的坐标指针获取,也可以通过函数方法获取,但函数方法有些软件并不适用
用文本属性来定位按钮控件、文本控件通常十分有效。但是,如果一个控件是图片控件,比如 Hamibot 主界面右上角的日志图标,它没有文本属性,这时需要其他属性来定位他。我们如何查看他有什么属性呢?首先打开悬浮窗和无障碍服务,点击蓝色的悬浮窗图标,然后再点击绿色的布局分析图标,然后点击布局范围分析,可以看到以下界面:
之后我们点击日志图标,可以看到它的属性:
// 获取这个控件
var position = text('链接').findOne();
// 获取其中心位置并点击
var x = position.bounds().centerX()
var y = position.bounds().centerY()
通过使用OCR实现定位文本控件坐标并点击
新增于:Hamibot 1.2.2
更多功能可自行探索
// 识别并定位文字坐标,返回x,y坐标
function ocrClick(str) {
var x0;
var y0;
// console.show();
if (!requestScreenCapture()) {
toastLog('没有授予 Hamibot 屏幕截图权限');
hamibot.exit();
}
log('开始截屏');
const img = captureScreen();
toastLog('开始识别');
const res = ocr.recognize(img);
var datas = res["results"]; // 将结果取出
// alert(datas);
for (var i = 0; i < datas.length; i++) {
var o = datas[i]; // 遍历各个结果对象
if (o["text"] == str) {// 取出文本类型为 str 的对象
// 取出边界属性
var position = o["bounds"];
// 计算出 x, y 坐标
y0 = (position["bottom"] + position["top"]) / 2;
x0 = (position["left"] + position["right"]) / 2;
// click(x0, y0); // 点击文本对象
// sleep(1000);
// log(position);
// alert(x0, y0);
return [x0,y0];
}
}
// alert(res);
log(res);
// hamibot.exit();
}
// 调用方法并返回一个带有坐标信息的列表,并点击 “前往控制台”
var obj = ocrClick('前往控制台');
var x = obj[0];
var y = obj[1];
click(x,y);
alert(x, y);
实例代码①抖音快手刷短视频
ps:若想实现模拟快速滑动屏幕实现甩动效果只需要在 gesture(duration, [x1, y1], [x2, y2], …); 中把duration时间设置短一些即可文章来源:https://www.toymoban.com/news/detail-483469.html
launchApp('快手极速版'); // 打开手机中的 快手极速版
var i = 0;
var num = 0;
var loop = true;
var time = 103;
var d;
var hour;
console.show();
// while (i < 500) {
while (loop) {
d = new Date();
hour = d.getHours();//得到小时数
if(hour == time) {loop=false;}
sleep(1000);
if (!(desc("发现").exists())) {
back();
} else {
var num = Math.round(Math.random() * 4001 + 78);
// toast(num);
console.log('第'+(++i)+'个视频 耗时:'+((num/1000)+2).toFixed(3)+'秒');
sleep(num);
sleep(1000);
swipe(467, 1504, 467, 90, 400);
}
}
console.hide()
home();
// Math.round(Math.random() * 1440 + 1400)
实例代码②手机自启动解锁屏保
说明
- 手机的自动开机解锁【需要有密码】
- 思路【总体上还是模拟用户的点击操作,需要Hamibot有自启动的权限】
- 唤醒点击并滑动至密码处
- 获取密码下方各个数字的按键坐标
- 模拟点击坐标
- 思路【总体上还是模拟用户的点击操作,需要Hamibot有自启动的权限】
- 由于不同手机的锁屏密码位置不确定,故并不一定适用于每一台手机
代码文章来源地址https://www.toymoban.com/news/detail-483469.html
// 点击屏幕
device.wakeUp();
sleep(1000);
swipe(467, 1504, 467, 90, 400);
sleep(1000);
var pwd = "122690"; // 锁屏密码
var plength = pwd.length
for(var i = 0; i < plength; i++){
sleep(20)
switch(pwd[i]-0){
case 1:
press(221,1450,100);
break;
case 2:
press(540,1450,100);
break;
case 3:
press(859,1450,100);
break;
case 4:
press(221,1680,100);
break;
case 5:
press(540,1680,100);
break;
case 6:
press(859,1680,100);
break;
case 7:
press(221,1890,100);
break;
case 8:
press(540,1890,100);
break;
case 9:
press(859,1890,100);
break;
case 0:
press(537,2093,100);
break;
default:
toast("密码输入有误程序中断");
exit();
}
}
到了这里,关于Hamibo自动化手机工具的使用及介绍【自定义代码解析】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!