autojs简单案例&常用控件汇总


原文地址:https://www.cnblogs.com/chen-xia/p/13079588.html


autojs简单案例&常用控件汇总 鼎云博客

一、介绍:

1.Auto.js是一款安卓应用,针对安卓7.0以上机型,它可以无需root执行脚本。主要是运用系统自带的“无障碍服务”来获取页面的,这是个亮点,但有个缺陷就是每次关闭 Auto.js 这个app后都要重新开启“无障碍服务”,颇为繁琐。

2.Auto.js可以打包成apk直接装到手机

3.Auto.js可以查看页面布局,需要打开悬浮窗权限

 

 

二、简单案例:

1.快手刷金币

鼎云博客

//判断当前页面是否有指定textif (text("发现").exists() || text("同城").exists()){
    log('在设置页面—记录log')//可在手机的log中打印
    sleep(500);
    swipe(500,1800,500,300,200);//上滑屏幕
}else{
toast('不在刷视频页面_刷不到金币');
}

鼎云博客

 

2.华为辅助安装处理&oppo手机安装处理

鼎云博客

////____________________________华为手机安装处理_______________________________auto();var i=0if(text("继续安装").exists()){
    log('111111111111111')
    sleep(2000)
    click(760,1650);//坐标点击
    sleep(6000)    if (text("去华为应用市场查找").exists()){
        sleep(2000)
        click(530,1567);//坐标点击
        sleep(4000)
    }    if(text("安装成功").exists()){
        toast('安装成功');
        click(788,1730);//坐标点击       }
}else{
    log('没有应用安装弹框');
}////_____________________________oppo手机安装处理_______________________________auto();if(text("继续安装").exists()){
  log('111111111111111');
  setText("123456");
  textContains("确定").find().click();
  sleep(5000);  if (text("安装").exists()){
      sleep(2000)
      textContains("安装").find().click();
      sleep(4000)
      textContains("完成").find().click();
  }
}else{
  console.error('没有应用安装弹框_安装出错');
}

鼎云博客

 

3.元素判断&js循环语法

鼎云博客

 (text("忘记"'在设置页面—记录log')
    toast('显示弹框' btnClose = className("android.widget.TextView").text("小红绳").findOne(500);'1111111111111111111111'(desc("连信"'显示弹框''没有连信' (!textEndsWith("小红"'显示弹框' (textStartsWith("同意").findOne(3000
    
    toastLog('匹配成功'2000'没有找到'(desc("连信"'显示弹框'"连信"3000'没有连信'
   (("".equals(str)) || (""  ret = str.indexOf(sub_str, =judge_include_str('chenwei', 'chenwei' (text("帐号登录").findOne(5000'找到元素—记录log')
    toast('显示弹框''没有找到元素' fas = ""
     fsfan = id("phone_number_edit"( i = 0; i < fsfan.length; i++ ftxt =(ftxt != ""'符合条件'(fas == ""== fas +"_-_"+( i=1;i<4;i++3000'toast弹框信息' num = 1; (num<=10){
    document.write(num+"<br />");
    num++;( i = 1; i < 10; i++(i == 4}

鼎云博客

 

4.app应用名和包名

鼎云博客

// 使用 应用名称,获取应用的包名.
 var PackageName; //声明变量
 
PackageName=getPackageName("QQ");
 
log(PackageName);//使用 包名,获取 应用名称.
 var AppName;
 
AppName = getAppName("com.tencent.mobileqq");
 
log(AppName);

鼎云博客

 

5.设备截图

鼎云博客

    threads.start( (beginBtn = classNameContains("Button").textContains("立即开始").findOne(2000
    (!"请求截图失败"
    sleep(1700);
    captureScreen("/sdcard/img.png"
 (!"请求截图失败"captureScreen("/sdcard/img.png"requestScreenCapture(); im = captureScreen(); path = "/sdcard/screenshot.png""保存图片"); Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, android.net.Uri.fromFile(

鼎云博客

 

6.获取设备信息&设备操作

鼎云博客

////______________________设备获取&设备操作_______________________________________________////设置无障碍模式 fast为启用缓存auto();

a = device.height; //高度b = device.width; //宽度console.log('设备分辨率:'+b+'*'+a);

brand = device.brand;  //品牌厂商console.log(brand);

model = device.model; // 设备型号console.log(model);

product = device.product; // 手机型号名称console.log(product);//硬件序列号serial = device.serial; // c3ba6d87a0d71433console.log(serial);//安卓系统API版本sdkint = device.sdkInt; //API版本:25console.log('API'+sdkint);//系统版本号release = device.release; //7.1.2console.log(release);//安卓idgetandroidid = device.getAndroidId(); //71433c3ba6d87a0dconsole.log(getandroidid);//MAC地址 需要联网才能获取getmacaddress = device.getMacAddress(); //B0:FC:36:12:C9:EFconsole.log(getmacaddress);//获取媒体音量getmusicvolume = device.getMusicVolume(); 
console.log('音量'+getmusicvolume); //音量:大小//获取电量百分比getbattery = device.getBattery(); //87console.log(getbattery);//确认设备是否在充电ischarging = device.isCharging();
console.log(ischarging); //flase 没有在充电//获取设备运行内存容量(占用的内存)gettotalmem = device.getTotalMem();
console.log(gettotalmem); //3186032640 单位(字节),可以自己转换//获取设备当前可用内存getavailmem = device.getAvailMem();
console.log(getavailmem);  //2386280448(字节),可以自己转换//查看屏幕是否亮着isscreenon = device.isScreenOn();
console.log(isscreenon); //true//唤醒设备 (如果息屏可以点亮屏幕,亮屏就依然亮屏)device.wakeUp();//保持点亮屏幕(设置时间)device.keepScreenOn(30000); //不加参数常亮,  手机亮屏时间以device.keepScreenOn为准,之前系统设置的时间作废//保持屏幕常亮 可调节省电模式device.keepScreenDim(timeout);//取消设备保持唤醒状态 用来取消屏幕的唤醒状态device.cancelKeepingAwake();////使设备震动一段时间device.vibrate(300);  //单位毫秒//取消震动device.cancelVibration();

鼎云博客

 

7.模拟按键

鼎云博客

////______________________按键模拟_物理按键的全局函数_______________________________________________////设置无障碍模式 fast为启用缓存auto();//以上函数都可以放在toast()或log()里, 例如:toast(notifications());back();//返回,返回是否执行成功home();//回到桌面,返回是否执行成功powerDialog();//弹出电源键菜单。返回是否执行成功notifications();//拉出通知栏。返回是否执行成功quickSettings()//下拉通知栏到底。返回是否执行成功recents();//显示最近任务。返回是否执行成功

鼎云博客

 

8.多线程

鼎云博客

////__________________________________多线程_____________________________________//定义子线程var thread = threads.start(function(){    while(true){
        sleep(200);
        log("子线程");
    }
});//这里是主线程sleep(2000);
log('准备停止主线程了')if (20>10){
    sleep(1000);    //停止线程执行    thread.interrupt();
}////_________________________子线程主动退出____________________________________________var thread = threads.start(function(){    var i=0    while(i<10){
        sleep(200);
        log("子线程");        if (i>5){
            log("子线程i>5");
            threads.shutDownAll()
        }
        i=i+1

    }
});//这里是主线程sleep(2000);
log('准备停止主线程了')if (20>10){
    sleep(1000);
    log('主线程.....')
}
log('主线程...end')////______________________________堵塞主线程、等待子线程完成____________________________________var sum = 0;//启动子线程计算1加到10000var thread = threads.start(function(){
    log('子线程开始')    for(var i = 0; i < 10000; i++){
        sum += i;
    }
});


log('主线程开始')//等待子线程完成(堵塞)thread.join();
toast("sum = " + sum);

鼎云博客

 

 9.获取包名

鼎云博客

//_____________________________shell封装_获取手机包名、并转成list___________________________________auto();function get_package() {
    log('开始启动了');    var result = shell("pm list package -3");    //log(result);//原始第三方包
    var str = JSON.stringify(result);//数据类型转换
    var str1 = str.match(/package:(\S*)package/)[1];//正则匹配
    str_chen = str1.replace(/\\n/g, ",");//替换\n为逗号
    basic = str_chen.substr(0, str_chen.length - 1);  //删除字符串最后一位
    str_page = basic.replace(/package:/g, "");//替换\n为逗号
    var page_list = str_page.split(',');//字符串转list(以逗号分割)    log(page_list);
}// get_package()//________________________shell常用操作(可以封装成函数)_____________________________________________________________//获取包名var result = shell("pm list package -3");
console.log('第三方包名:'+result);//获取品牌var brand = shell("getprop ro.product.brand");
console.log('查看手机品牌:'+brand);//清空应用数据var data_clean = shell("pm clear 包名");
console.log('清空应用数据:'+data_clean);//删除文件var chen=shell("rm -rf ./sdcard/.dalan");
log(chen)//文件复制粘贴var chen=shell("cp /sdcard/2.png /sdcard/test/2.png");//停止appshell('am force-stop ' +包名 , true);////_____________________________js补充知识__________________________________________________//获取字符串1与字符串2之间的内容var str = "aaabbbcccdddeeefff";
log(typeof (str));//获取数据类型str = str.match(/aaa(\S*)fff/)[1];
log(str)//join()数组转字符串let chen = ['ch', '22', 'wei'];
text = chen.join(',');
log('转换后的字符串:', text);//split()字符串转数组let wei = 'chen,keke,233,你好';
text = wei.split(',');
log('转换后的list:', text);//replace()字符串替换var chen = 'dalan_test123_is_notdalan123'str_page = chen.replace(/dalan/g, "word");//替换\n为逗号console.log(str_page)

鼎云博客

 

10.定时器

鼎云博客

////___________________每5秒钟执行一次,执行1分钟_______________________//每5秒就发出一次hello
var id = setInterval(function(){
    log("hello");
}, 5000);//1分钟后取消循环
setTimeout(function(){
    clearInterval(id);
}, 60 * 1000);////______________________5秒后执行一次___________________________setTimeout(function(){
    toast("hello")
}, 5000);

鼎云博客

 

 11.图片相似度

鼎云博客

////_________________________________查找图片红色部分并显示坐标____________________________________path = "/sdcard/1.png"var img = images.read(path);
log("读取图片")//循环找色,找到红色时停止并报告坐标while (true) {    var point = findColor(img, "#1b8374", { threshold: 120 });    if (point) {
        toastLog("找到红色#fd1111,坐标为(" + point.x + ", " + point.y + ")");        break
    }
}
exit()////______________________________________判断判断图片相似度___________________________________________////先读取文件 var img1 = images.read("/sdcard/1.png");//大图var img2 = images.read("/sdcard/2.png");//小图
  // 语法糖 findImage(img, template, options)
  // template 要找的图片
  // options 对象 {threshold ,region, level}  
  // threshold: 0.9, 默认0.9 范围(1-9) 相似度
  // region: [x, y] 找图的区域
  // 图片比对var result = findImage(img1, img2,{region: [0, 10], threshold: 0.8 }); // 找到返回true, 失败返回falseif(result){
    toast("找到啦:" + result);
}else{
    toast("没找到");
}////______________________________________判断图片相似度(可以两张一样的图片)_____________________________________//大图let max = images.read("/sdcard/1.png"); 
//小图let min = images.read("/sdcard/2.png");//对比相似对(threshold是阈值)let p = findImage(max, min,{threshold:0.85 });//// 找到返回true, 失败返回falseif (p) {
    log("找到啦:" + "每日空投");
    let xx = random(p.x, p.x + min.getWidth());//小图的x坐标
    let yy = random(p.y, p.y + min.getWidth());//小图的y坐标    click(xx, yy)
    log("点击按钮-每日空投");
    sleep(1000)
} else {
    log("没找到" + "每日空投");
}

鼎云博客

 

 12.下载文件

鼎云博客

log('开始请求接口');var url="http://106.55.29.87:8000/download?filename=d91f77f99ba796397c7df4f5b97726fb.png&path=upload";var res = http.get(url);//判断状态码if(res.statusCode >= 200 && res.statusCode < 300){
    toast("页面获取成功!");    //获取文件并保存
    files.writeBytes('/sdcard/3.png',res.body.bytes());    //打开文件
    app.viewFile('/sdcard/3.png');
    log('下载成功')
}else if(res.statusCode == 404){
    toast("页面没找到哦...");
}else{
    toast("未知错误");
}

鼎云博客

 

 13.元素定位

鼎云博客

123text("18520103625").find();desc("xxxx").find();id("xxxx").find();className("xxxx").find();"属性值").findOne().parent().click(); text("属性值").findOne().childCount(); text("进入游戏").find().click(); text("进入游戏").findOne(3000).click(); "手机").find().click(); textStartsWith("手机").find().click(); textEndsWith("手机").find().click(); text("xxxx").find(); desc("xxxx").find(); id("xxxx").find(); className("xxxx").find(); atextMatches("\\d+"); 
 (text("xx"'在设置页面—记录log')
  toast('显示弹框' fas = ""
   fsfan = id("phone_number_edit"( i = 0; i < fsfan.length; i++ ftxt =(ftxt != ""'符合条件'(fas == ""='当前控件元素为:'= fas +"_-_"+
    (text(test).findOne(2000'找到了'+
      log('点击了'+'没找到'+'登录' str = "18520103625" x = text(str).findOne().bounds().left; y = text(str).findOne().bounds().top;console.log(x,y);

鼎云博客

 

 

三、语法案例

1.通过函数模式操作

鼎云博客

//____________________________通过函数打开url&搜索&断言__________________________________________home();//回到桌面sleep(2000);//等待2秒auto();
test_url();//函数声明function test_url(){    var url="https://www.baidu.com/";
    app.openUrl(url);//打开网页
    sleep(5000);    if(text("百度一下").exists()){
        log("已在百度首页");
        id("su").find();//定位到搜索框
        sleep(1000);
        setText("城南花已开");//输入文字
        sleep(1000);
        desc("百度一下").click();
        sleep(4000);        //匹配当前页面是否存在“城南花已开 - 百度百科,,可借助auto.js的布局范围分析查看控件”
        if((className("android.widget.Button").desc("城南花已开 - 百度百科")).exists()){
            toastLog('true-已匹配到相关内容')
        }        else{
            toastLog('false-未匹配到相关内容')
        }
    }
}//_____________________通过函数判断是否包含"备忘录"或蓝牙_________________________main();//声明主函数function chen_test(){    //判断当前页面是否有备忘录或蓝牙
    if (text("备忘录").exists() || text("蓝牙").exists())  {
        toast("找到相关内容");   //toast提示
        log('在auto.js的日志中打印信息')//可在手机的log中打印
        sleep(4000);//等待时间
        toast('欢迎进入-设置页面');//toast提示    }    else {
        toast("当前没有找到_任何相关内容");   //悬浮框,toast提示    }
}//定义主函数main,需要在顶部先声明不然调用不生效function main(){
    chen_test();//调用函数
    exit();//退出,可写或不写}

鼎云博客

 

2.监听toast&包名&网络请求&文件上传

鼎云博客

////__________________________监听toast和包名(可监听手机一切toast、通知等信息很强大)___________________________________________auto();
events.observeToast();
events.onToast(function(toast){    // log(toast.texts)
    log("Toast内容:" + toast.getText() +'\n'+"包名:" + toast.getPackageName())
});////_________________________通过包名、应用名启动应用_____________________________________////如果对应的应用不存在,则返回false; 否则返回truevar packageName="com.tencent.mobileqq";var appname="备忘录";////通过包名判断if(app.launch(packageName)){
    sleep(2000);
    log('找到包名:'+packageName);
}////通过应用名判断else if (app.launchApp(appname))
{
    sleep(2000);
    log('找到应用名:'+appname)
}else{

    log('没有找到应用')
}////_________________________通过应用名获取包名——————————————————————————————————————————var name_pa = getPackageName("备忘录"); //获取应用对应的包名log(name_pa)////__________________________打开一个网址 并判断是否成功__________________________________home();//回到桌面sleep(2000);//等待2秒auto();
test_url();//函数声明function test_url(){    var url="https://www.baidu.com/";
    app.openUrl(url);//打开网页
    sleep(3000);    if(text("百度一下").exists()){
        log("断言成功")
    }
}////___________________请求GET__________________________________________________________var url="http://192.168.10.32:8000/subcontract"var res = http.get(url);//判断状态码if(res.statusCode >= 200 && res.statusCode < 300){
    toast("页面获取成功!");
}else if(res.statusCode == 404){
    toast("页面没找到哦...");
}else{
    toast("错误: " + res.statusCode + " " + res.statusMessage);
}

log('获取头信息:\n',res.headers);// log('获取响应的内容:\n',res.body.string());//以字符串形式返回响应内容// log('获取响应的内容:\n',res.body.json());//以json形式返回响应内容// log('获取响应的内容:\n',res.body.bytes());//以字节数组形式返回响应内容log('当前请求地址及方式\n',res.request)
log('当前请求url\n',res.url)
log('当前请求的方法\n',res.method)
log('响应状态码:',res.statusCode)
log('响应的HTTP状态信息:',res.statusMessage)////带headers的get请求var url = "http://192.168.10.32:8000/subcontract";var res = http.get(url,{
    headers: {        'Accept-Language': 'zh-cn,zh;q=0.5',        'User-Agent': 'Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11'
    }
});if(res.statusCode >= 200 && res.statusCode < 300){
    toast("页面获取成功!");
}else if(res.statusCode == 404){
    toast("页面没找到哦...");
}else{
    toast("错误: " + res.statusCode + " " + res.statusMessage);
}////获取返回信息var html = res.body.string();
log(html)////_____________________请求post________________________________________________________////post请求方式一:var url = "http://192.168.10.32:8000/subcontract";var res = http.post(url,{"game_id":"200003306","name":"dalan_test"});//获取返回信息var html = res.body.string();
log(html)//通过状态码判断if(res.statusCode >= 200 && res.statusCode < 300){
    toast("页面获取成功!");
}else if(res.statusCode == 404){
    toast("页面没找到哦...");
}else{
    toast("错误: " + res.statusCode + " " + res.statusMessage);
}//通过字符串匹配来判断(&&表示且,||表示或)if(html.match('status') && html.match('POST')){
    log('已经包含')      
}else{
    log('没有包含')
}////post请求二://例如接口响应为:{ code: 200, method: 'POST', msg: '渠道包上传成功!', status: true }let url = "http://192.168.10.32:8000/subcontract";
let res = http.post(url, {    "service": "App.Zllgcimei.Imei",    "game_id": "200003306"});

let appName;//声明变量let html = res.body.string();  //取页面html源码log(html)//JSON.parse() 将数据转换为 JavaScript 对象。let json = JSON.parse(html);//log(json)if (json.code == "200") {
    log("符合条件")
    appName = json.msg
} else {
    log("请求失败!")
}

log(appName)//postJson方式(相当于post的json请求)let url = "http://192.168.10.32:8000/subcontract";
r = http.postJson(url, {    "service": "App.Zllgcimei.Imei",    "game_id": "200003306"});

let text=r.body.string();//获取响应//同时弹起toast和记录日志toastLog(text);////____________________文件上传__________________________________________________var url="http://106.55.29.87:8000/upload"var res = http.postMultipart(url, {
    file: open("/sdcard/test/chen.jpg")
});
let html=res.body.string();//打印原始数据let json = JSON.parse(html);//将数据转换为 JavaScript 对象。log(json)if (json.msg == "success") {
    log('上传文件成功')
}

鼎云博客

 

 

 3.autojs模块调用:

放到同一个目录下运行,必须是手机上的目录,不能pc F5,因为require的文件在pc上没有在手机上。

main.js模块为主调用方:

鼎云博客

log("开始测试");//导入模块var common= require('common.js');//调用函数log("两数相乘%d", common.chen());
console.log("%d+%d=%d", 3,4,common.chen_age(3,4));//console.log或log功能都一样log(common.chen_sum(5));

鼎云博客

 

common.js模块为被方:

鼎云博客

 common=common.chen = =50
    pp * 10common.chen_age=
     (a+b)/2;common.chen_sum= a = arguments[0] ? arguments[0] : 200 b = arguments[1] ? arguments[1] : 150
   a+
  
  
  module.exports = common;

鼎云博客

 

 4.判断手机横竖屏

鼎云博客

////_________________________判断手机横竖屏_______________________________chen();// 函数在function后,可以在前面或后面调用function chen() {  var a = (context.resources.configuration.orientation);  if (a === 1) {
    toastLog("这是竖屏!!");    return '竖屏'
  }  else {
    toastLog("这是横屏!!");}    return '横屏'}// chen();// 函数在function前, 只能在后面调用chen=function() {  var a = (context.resources.configuration.orientation);  if (a === 1) {
    toastLog("这是竖屏!!");    return '竖屏'
  }  else {
    toastLog("这是横屏!!");}    return '横屏'}

chen();

鼎云博客

 

 5.页面相关

鼎云博客

"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 + "您好!");
    eval(name+'()');//通过变量调用函数    });////定义函数function test(){    var url="https://www.baidu.com/";
    console.log('网址:'+url);
}////_____________________________________________布局________________________________________________////布局一"ui";
ui.layout(    <vertical h="100dp" weightSum="5">
        <text layout_weight="1" text="控件1" bg="#ff0000"/>
        <text layout_weight="2" text="控件2" bg="#00ff00"/>
        <text layout_weight="1" text="控件3" bg="#0000ff"/>
    </vertical>);////布局二"ui";
ui.layout(    <vertical h="100dp">
        <text h="40dp" text="控件1" bg="#ff0000"/>
        <text layout_weight="2" text="控件2" bg="#00ff00"/>
        <text layout_weight="1" text="控件3" bg="#0000ff"/>
    </vertical>);////按钮布局"ui";
ui.layout(    <horizontal>
        <button text="第一个按钮"/>
        <button text="第二个按钮"/>
    </horizontal>);////页面布局"ui";
ui.layout(    <frame>
        <button gravity="right" w="*" h="auto" text="靠右的文字"/>
    </frame>
);

鼎云博客

 

 

四、常用控件汇总

鼎云博客

#包相关
launchApp('名字'); //通过app名字启动app应用launch('app包名'); //通过包名启动app应用app.uninstall('包名'); //卸载appvar name=getPackageName('应用名'); //通过应用名获取app包名console.log(name);var name_1=getAppName("com.tencent.mobileqq"); //通过包名返回应用名console.log(name_1);////获取当前正在运行的应用的包名var Package=currentPackage();//获取当前正在运行的应用的包名,此函数依赖于无障碍服务(未启动会报异常)print(Package);//print、console.log、log都能打印日志console.log(Package);////获取当前正在运行的Activity的名称var Activity=currentActivity()//获取当前正在运行的Activity的名称,此函数依赖于无障碍服务(未启动会报异常)print(Activity)var a=app.openAppSetting('包名');//打开应用的详情页(设置页)。如果找不到该应用返回false; 否则返回true。log(a);


#元素定位
text("属性值").findOne().parent().click(); //parent通过子控件查找父控件,常用于子控件不能点击,而通过子控件查找到父控件完成点击text("属性值").findOne().childCount(); //获取控件中子控件的数量text("进入游戏").find().click(); //点击进入游戏(先查找再点击)text("进入游戏").findOne(3000).click(); //点击进入游戏___查询超时就报错,,(text()是完全匹配)textContains("手机").find().click(); //匹配页面包含手机的元素textStartsWith("手机").find().click(); //匹配以"手机"开头的元素textEndsWith("手机").find().click(); //匹配以"手机"结尾的元素text("xxxx").find(); //按控件文本查找,,  也可使用findOne()desc("xxxx").find(); //按描述信息查找id("xxxx").find(); //按元素id查找元素className("xxxx").find(); //按元素类型查找atextMatches("\\d+"); //以正则匹配#等待
sleep(random(1000,5000)); //随机等待1到5秒sleep(2000); //等待2秒#常用功能键
home(); //回到桌面back(); //返回上一步#常用操作
click(x,y); //单点击坐标click('登录'); //点击text的元素press(x,y,time); //按住坐标,time表示时间毫秒swipe(x1,y1,x2,y2,time); //滑动屏幕(time表示滑动的时间)#日志信息相关
toast("hallo word"); //在手机toast提示toastLog('hallo word'); //toast提示+log记录log('hallo word'); //记录logconsole.verbose("要输出的内容");//颜色为灰色(一般用来打印不重要内容)console.info("要输出的内容");//颜色为绿色(一般用来打印运行信息)console.warn("要输出的内容");//颜色为蓝色(一般用来打印运行警报)console.error("要输出的内容");//颜色为红色(一般用来打印运行报错信息)#对话框
alert("标题","内容"); //对话框输出

鼎云博客

 

 

五、疑问解答

1.在脚本前面加auto();、auto、auto.waitFor()有什么作用?

 auto()函数来确保无障碍服务已经启用。如果运行到某个需要权限的语句无障碍服务并没启动,则会抛出异常并跳转到无障碍服务界面.

   auto.waitFor()检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行

   var a=auto.service 获取无障碍服务。如果无障碍服务没有启动,则返回null。

2.autojs怎么运行?

  1.在手机上装了auto.js可以直接写代码运行,2.可以VS Code来编写脚本运行到手机(需要手机安装了autojs)

 3.Visual Studio Code可以连接模拟器吗?

 可以连接模拟器(vs code终端输入 adb connect 127.0.0.1:5037)

4.重启了VS Code为什么autojs连不上?

   重启后VS Code后 Auto.js: Start Server服务不会自动开启,需要手动启动

5.如何连接手机?

  1.开启AutoJS插件

      按 Ctrl+Shift+P 或点击"查看"->"命令面板"可调出命令面板,输入 Auto.js 可以看到几个命令,移动光标到命令Auto.js: Start Server,按回车键执行该命令。

     鼎云博客

 

  2.连接手机终端

    将手机连接到电脑启用的Wifi或者同一局域网中。通过命令行ipconfig(或者其他操作系统的相同功能命令)查看电脑的IP地址。在Auto.js的侧拉菜单中启用调试服务,并输入IP地址,等待连接成功。 

鼎云博客

6.定时器或定时任务无法在手机黑屏操作(待确定)?

 可以在脚本前加个 device.wakeUp();就会自动点亮屏(1.黑屏非锁屏状态(休眠),2.usb连接电脑或插座充电)

 

7.遍历所有子节点

// js递归遍历数组获取所有的叶子节点
let arr = [];
function queryList(json, arr) {
  for (var i = 0; i < json.childCount(); i++) {
    let sonList = json.child(i);
    if (sonList.childCount() == 0) {
      arr.push(json.child(i));
    } else {
      queryList(sonList, arr);
    }
  }
  return arr;
}

let nodes = [];
let list = id("content").findOne();
arr = queryList(list, arr);

for (var k = 0; k < arr.length; k++) {
  // log("第"+k+"个子控件");
  // log("text="+arr[k].text()+"\n" +"ID="+arr[k].id()+"\n"+"classname="+arr[k].className());
  // log("desc="+arr[k].desc()+"\n");
  nodes[k] = {
    "text": arr[k].text(),
    "id": arr[k].id(),
    "classname": arr[k].className(),
    "desc": arr[k].desc(),
    "bounds": arr[k].bounds(),
    "centerX": arr[k].bounds().centerX(),
    "centerY": arr[k].bounds().centerY(),
  };
}

log(JSON.stringify(nodes))

 

相关连接:

https://blog.csdn.net/QiHsMing/article/details/86762007 ..........................在VS Code运行AutoJS(包含电脑端调试到手机,,页面布局)

https://blog.csdn.net/ss7379829/article/details/80819374 ........................VS Code中怎么运行js文件

https://pro.autojs.org/docs/#/zh-cn/ ..........................................................autojs官方教程

https://gitee.com/jianyue/autojsDemo?skip_mobile=true ..........................gitee的autojs案例

https://blog.csdn.net/zy0412326/article/details/117155945 ...............autojs打包成apk

 https://blog.csdn.net/camel2014/article/details/104928199 .....................autojs模块调用(放到同一个目录下运行,必须是手机上的目录,不能pc F5,因为require的文件在pc上没有在手机上)

https://blog.csdn.net/yinmingxuan/article/details/90266388 ......................autojs实例教程

https://space.bilibili.com/26079586 ...........................................................autojs视频


鼎云博客
  • 最新评论
  • 总共0条评论