040_Auto.js
参考:如何学习auto.js
- 小米锁屏工具放首页
点击坐标
-
click(99,1151)
// 点击坐标 -
click(dian3.bounds().centerY(), dian3.bounds().centerY());
// 点击 -
swipe(x1, y1, x2, y2, duration)
// 模拟从坐标(x1, y1)滑动到坐标(x2, y2),并返回是否成功。 -
gesture(duration, [x1, y1], [x2, y2], ...)
// 模拟手势操作 -
app.launchApp('微信')
// 通过应用名称启动应用 -
app.launch(packageName)
// 通过应用包名启动应用
点击事件 方法:
var zan = text("赞").findOne(1000).parent().click();
也可以是:
click("赞");
查找节点
let getText = className("android.widget.TextView").depth(3).findOne(500);
全局函数
-
log(currentPackage()) // com.tencent.mm 微信 包名
返回当前正在运行的应用的包名 -
setClip(text)
设置剪切板 -
getClip(text)
获取剪切板 -
waitForPackage(package)
等待指定的应用出现 -
waitForActivity("android.widget.FrameLayout")
等待指定的Activity出现,period为检查Activity的间隔 -
log(currentPackage())
// com.tencent.mm 微信 包名 -
log(currentActivity())
// 当前正在运行的Activity的名称 监测当前页面 -
exit();
// 立即停止当前脚本 -
runtime.loadJar(path)
// 添加架包 -
context
全局变量 -
colors.isSimilar(color1, color2,[threshold, algorithm])
两个颜色是否相似。颜色相似度临界值,默认为4。 -
images.captureScreen()
截取当前屏幕并返回一个Image对象。 -
images.captureScreen(path)
截取当前屏幕并以PNG格式保存到path中。如果文件不存在会被创建;文件存在会被覆盖。 -
images.pixel(image, x, y)
返回图片image在点(x, y)处的像素的ARGB值。取色 -
log(device.width)
设备宽度 -
log(device.height)
设备高度 -
坐标
var xyz = touxiang1.bounds();
-
log(xyz.left)
-
log(xyz.top)
-
log(xyz.right)
-
log(xyz.bottom)
-
截图,找颜色,颜色对比,点击
-
app.startActivity("console");
查看日志
使用技巧
- 1.下载vscode,安装
Auto.js-VSCodeExt
插件 -
- 按
Ctrl+Shift+P
打开命令面板,输入Auto.js
,点击打开Auto.js: Start Server
。
- 2.1:VS Code会在右上角显示"Auto.js server running",即开启服务成功。
- 按
- 3.app连接电脑
- 调试:vscode–帮助–切换开发人员工具。
log()
- 保存脚本到手机: vscode–
Ctrl+Shift+P
–auto.js:Save On Device
手机auto.js:
-
获取手机坐标:手机-设置-开发者选项-指针位置
-
开启稳定模式
-
auto.js–设置–音量上键停止所有脚本
-
打开悬浮窗,有5个按钮
- 按钮1.运行脚本
- 按钮2.自动录制
- 按钮3.布局分析
- 按钮4.关闭
- 按钮5.更多
-
录制:需要root功能
-
布局分析–右上角–生成代码–点击–返回
-
布局分析–查看信息中–
clickable
为false
时不能点
常用语法
home();
;返回主界面sleep(1000)
;暂停多久-
- 消息提示框:
toast("hello world")
- 消息提示框:
- 点击:
click('微信',1)
点击屏幕中第二个‘微信’ auto();
// 确保无障碍服务已经启用-
- 模拟对话框:
var handsome = confirm("你帅吗?");
if(handsome){
toast("点击确定");
}else{ // 点击取消
toast("点击取消");
}
- 3.弹出列表进行单选
var sex = dialogs.singleChoice("请选择性别", ["男", "女", "基佬", "女装", "其他"], 2);
toast("选择了第" + (sex + 1) + "个选项");
// 输入框控件: input
"ui";
ui.layout(
<vertical padding="16">
<text textSize="16sp" textColor="black" text="请输入姓名"/>
<input id="name" text="小明"/>
<button id="ok" text="确定"/>
</vertical>
);
//指定确定按钮点击时要执行的动作
ui.ok.click(function(){
//通过getText()获取输入的内容
var name = ui.name.getText();
toast(name + "您好!");
});
语法
UiSelector
选择器 语法–>text
desc
id
className
- 查找方式:
textContains()
包含textStartsWith()
开头textEndsWith()
结尾textMatches(reg)
正则
var name = text("咖啡茶").findOne();
var comment = desc("评论").findOne(1000); // 查找1秒
var className = className("ListView").findOnce();
var ss = textContains("的").findOne(); // 包含查找
var ququ = textContains("群聊").findOne();
先筛选。在返回
UiSelector.findOne();
.find()
查找出所有,返回数组
函数方法
-
- 启动应用
launchApp("抖音极速版");//打开抖音极速版
- 启动应用
-
findOne(i)
根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,并返回第 i + 1 个符合条件的控件;如果没有找到符合条件的控件,或者符合条件的控件个数 < i, 则返回null。
-
findOne()
对屏幕上的控件进行搜索,找到所有满足条件的控件集合并返回。这个搜索只进行一次,并不保证一定会找到,因而会出现返回的控件集合为空的情况
-
4.
UiCollection
控件集合- UiCollection.size() //控件数
-
auto.waitFor()
检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。
控件操作
- 1.对象。属性 访问属性
- 2.click 点击
- 3.longClick 长按 C大写
- 4.scroll… 滚动
scroll.scrollDown();
- 5.setText 设置文本
- 6.children 遍历
- 7.find 子控件寻找
控件集合操作
- 1.size 长度
- 1.get 获取第几个控件
- 1.forEach 遍历
- 1.find 查找
- 1.findOne 寻找特定
文件存储
- 本地存储:–sp存储
files.read("/storage/emulated/0/脚本/log.txt",encoding = "UTF-8");
//读取文本的内容,第二个参数可以设置编码app.viewFile("/storage/emulated/0/脚本/log.txt");
files.write("/storage/emulated/0/脚本/当前绑定微信号.txt", wxMasterInfo.wxId);
// 文件写入var taskNo = files.read("/storage/emulated/0/脚本/任务.txt");
// 读取内容,写入内容
ui
<button id="saoYiSao" text="扫一扫" textSize="18" padding="10 15" margin="0 30 0 10" bg="#00ff00" textColor="#333333" />
ui.saoYiSao.setTextSize("22")
ui.saoYiSao.setBackgroundColor(colors.parseColor('#aabbcc'))
重点:
scrollDown
是作用在ListView
控件上的,不是他的子控件上bounds
控件左上角、右下角的坐标log(device.getIMEI())
获取设备号- 强制退出某应用
shell("am force-stop com.tencent.mm", true); //强制退出微信
shell("am force-stop com.eg.android.AlipayGphone", true); //强制退出支付宝
填对应包名就能强退 要ROOT 目前没发现不用ROOT的
本地存储
var cStorageName = storages.create('currentName');
cStorageName.put('cName', name.text()); // 存
var cName = cStorageName.get('cName'); // 取
http 上传
// 最后上传所有用户信息
function httpUploadInfo() {
log('---【上传信息】---');
var url = "http://192.168.31.95/yk/yk/ykClient/upload";
var params = {
"deviceKey": deviceKey,
"clients": info
};
var res = http.post(url, params);
log(res.body.string())
}
截图 申请权限 http上传头像 截屏 jieping
//申请权限并自动点击
threads.start(function () {
sleep(1000)//反悔时间
var beginBtn;
if (beginBtn = classNameContains("Button").textContains("立即开始").findOne(2000)) {
beginBtn.click();
}
});
if (!requestScreenCapture()) {
common.txt("请求截图失败");
}
var firstrequestScreenCapture = true; // 只执行一次请求截图权限
if (firstrequestScreenCapture) { // 只执行一次请求截图权限
if (!requestScreenCapture()) {
log("请求截图失败");
toast("请求截图失败");
// exit();
}
firstrequestScreenCapture = false;
}
log('【没卡!!!截图这儿????】');
var cPath = "/storage/emulated/0/baidu/" + wxid + ".png";
log(cPath);
captureScreen(cPath)
log('【截图ok】');
var src = images.read("/storage/emulated/0/baidu/" + wxid + ".png");
var clip = images.clip(src, 0, 670, 1080, 1080);
var path = "/storage/emulated/0/baidu/tempdata/" + wxid + ".png";
images.save(clip, path);
log('【头像裁剪ok】');
sleep(500);
uploadTouXiang();
// http 传头像
function uploadTouXiang(path) {
var url = "http://192.168.31.95/yk/yk/ykClient/uploadAvatar"
var res = http.postMultipart(url, {
"deviceKey": deviceKey,
file: open(path)
});
log(res.body.string());
log('【图片上传ok】');
sleep(300);
}
打开抖音极速版
launchApp("抖音极速版");
sleep(2000);
click("首页");
for (var i = 1; i <= 10; i++) {
if (i % 5 == 0) {
swipe(550, 880, 450, 1800, 500);
sleep(10000);
toast("这是第" + (i) + "次滑动,已运行" + (i * 10) + "秒");
} else {
swipe(550, 1080, 450, 180, 500);
sleep(10000);
toast("这是第" + (i) + "次滑动,已运行" + (i * 10) + "秒");
}
}
// exitFun();
function exitFun() {
events.on("exit", function () {
log("脚本结束前采访,你帅吗?");
var ha233 = confirm("脚本结束前采访,你帅吗?");
if (ha233) {
alert("真不要脸!有我帅吗?");
} else {
toastLog("嗯,你没我帅 ⊙ω⊙");
}
//打开日志板面
// app.startActivity("console");
log("虽然脚本停止了,但我还想调教你一下╭( ̄▽ ̄)╮");
});
}
悬浮框
var window = floaty.rawWindow(
<vertical bg="#000000" alpha="100">
<text id="text" textSize="14sp" color="#ffffff" padding="6 2"/>
</vertical>
);
window.setTouchable(false);
window.setSize(200,-2)
window.setPosition(device.width-200, 200);
txt('你好');
sleep(3000)
txt('啦啦啦啦啦啦啦');
sleep(3000)
function txt(textcontent) {
ui.run(() => {
window.text.setText(textcontent);
});
}
var window = floaty.rawWindow(
<vertical bg="#88008800">
<text id="text" textSize="20sp"/>
</vertical>
);
window.setTouchable(false);
window.setPosition(100,100);
setInterval(() => {
ui.run(() => {
window.text.setText(String(getTime()));
});
}, 50);
function getTime() {
var date = new Date();
var year = date.getFullYear();
var month = TT(date.getMonth() + 1);
var day = TT(date.getDate());
var hour = TT(date.getHours());
var minute = TT(date.getMinutes());
var second = TT(date.getSeconds());
var millisecond = TT(date.getMilliseconds());
return year + "/" + month + "/" + day + "--" + hour + ":" + minute + ":" + second;
function TT(s) {
if (s < 10) {
s = "0" + s;
};
return s;
};
};
VSCode
快捷键
- 1.shift + alt + F 格式化代码
-
- ctrl + Y 删除
时间戳转换
var initNum = 1;
var timess = new Date();
var y1 = timess.getFullYear();
var m1 = timess.getMonth() + 1;
var d1 = timess.getDate();
var fimeName = y1 + '_' + (m1 > 9 ? m1 : '0' + m1) + '_' + (d1 > 9 ? d1 : '0' + d1) + '_' + timess.toString().substr(
16, 2) + '_' + timess.toString().substr(
19, 2) + '_' + timess.toString().substr(
22, 2) + '_' + initNum + '.png';
console.log(fimeName)
initNum++;
vscode 快捷键
- 按住alt,用鼠标左键点击,可以出现多个光标,输入的代码可以在光标处同时增加
- 按住Ctrl + Alt,再按键盘上向上或者向下的键,可以使一列上出现多个光标。
- 选中一段文字,按shift+alt+i,可以在每行末尾出现光标
- 光标放在一个地方,按ctrl+shift+L或者ctrl+f2,可以在页面中出现这个词的不同地方都出现光标。
- 有时候这个快捷键的作用和f2重命名变量类似,但是它更加广泛,因为还可以对比如字符串相同的非同一变量或函数类的东西修改。
- 按shift+alt,再使用鼠标拖动,也可以出现竖直的列光标,同时可以选中多列。
- 任何光标操作,可以按Ctrl + U取消
totalCtrl
打开手机下方 主控按钮 首页、返回、列表
- 设置 – 高级设置 – 显示物理按键
真机和云机的区别
-
- 截图坐标大小不能超过手机分辨率
-
- 获取不到设备号
-
- 返回键不灵
云机操作 应用市场装:
传文件工具
es文件浏览器
本地apk qq 安装:
autojs.apk
越控2.apk
创建【脚本】文件夹
在[脚本]文件夹下创建【images】文件夹
把【yuekong01】脚本文件夹复制进去
任务检测
每隔5分钟检测一次,查记录的任务执行时间是不是