040_Auto.js

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插件
    1. 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功能

  • 布局分析–右上角–生成代码–点击–返回

  • 布局分析–查看信息中–clickablefalse时不能点

常用语法

  • home();;返回主界面
  • sleep(1000);暂停多久
    1. 消息提示框:toast("hello world")
  • 点击:click('微信',1)点击屏幕中第二个‘微信’
  • auto(); // 确保无障碍服务已经启用
    1. 模拟对话框:
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() 查找出所有,返回数组

函数方法

    1. 启动应用 launchApp("抖音极速版");//打开抖音极速版
    1. findOne(i)根据当前的选择器所确定的筛选条件,对屏幕上的控件进行搜索,并返回第 i + 1 个符合条件的控件;如果没有找到符合条件的控件,或者符合条件的控件个数 < i, 则返回null。
    1. 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 格式化代码
    1. 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

打开手机下方 主控按钮 首页、返回、列表

  • 设置 – 高级设置 – 显示物理按键

真机和云机的区别

    1. 截图坐标大小不能超过手机分辨率
    1. 获取不到设备号
    1. 返回键不灵

云机操作 应用市场装:

传文件工具
es文件浏览器

本地apk qq 安装:

autojs.apk
越控2.apk

创建【脚本】文件夹
在[脚本]文件夹下创建【images】文件夹
把【yuekong01】脚本文件夹复制进去

任务检测

每隔5分钟检测一次,查记录的任务执行时间是不是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值