• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

autojs-vue: 帮助开发者生产更友好的AutoJS程序

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

autojs-vue

开源软件地址:

https://gitee.com/vnool/autojs-vue

开源软件介绍:

AutoJs-Vue 特性

帮助开发者,快速生产友好的AutoJS程序

1. 全面支持(信息量很大):

AutoJS:全接口支持

VUE:著名的渐进式JavaScript框架(傻瓜->高手),

color-Ui:优雅的前端视觉交互设计(默认内置,也可以换成其他UI框架)

HTML5plus:让JS拥有与App一样的能力标准

组件API框架:增强APP的手机系统访问功能

插件社区云开发uni开发者社群, 开发者600万+, 12亿手机端月活用户

2. 对AutoJS接口进行了一些增加

3. 项目自动部署,自动升级,代码加密, 或远程脚本

4. 无目标APP限制

5. 可一键转微信小程序,支付宝小程序等(但不支持autojs)

QQ群: 868229959

效果图1效果图2效果图3效果图4

开发环境

  1. 下载安装开发工具HbuilderX

    推荐下载使用HbuilderX App开发版 进行开发

  2. 克隆或下载源码

    a.示例项目(入门推荐)

     此方式为整个AJ_VUE演示项目,里面有Color UI组件库,演示,模板等,建议用户可以下载 此项目运行用于查看演示效果,通过里面的示例,可以快速掌握项目用法。

    github地址(github):https://github.com/yooge/robot

    gitee地址[网速快]:https://gitee.com/vnool/autojs-vue

    直接下载zip包:

    b.空白项目(最小化项目,不含UI交互,高手使用)
     此连接为一个空白的AJ_VUE示例工程,无任何ui组件,熟练开发后使用 项目地址:请github搜索 autojs-vue-mini

运行示例项目

1. 初始化项目文件

	>  1. HbuilderX开发工具顶部 -> 运行 -> 运行到终端 -> 1.初始化/依赖包	>  2. HbuilderX开发工具顶部 -> 运行 -> 运行到终端 -> 2.更新/安装基座

2. 配置调试基座(手机上的app)

	<br>如果忘记勾选,会意外安装错误的手机程序,会提示Robot对象不存在	>  HbuilderX开发工具顶部 -> 运行 -> 手机或模拟器 -> 运行基座选择 -> 自定义基座

3. 执行 (调试/运行)

	###### 运行到手机 	>  1. 连接手机(需ADB生效) 	>  2. HbuilderX开发工具顶部 -> 运行 -> 手机或模拟器 -> 选择你的手机名字		###### 运行到模拟器	>  1. HbuilderX开发工具顶部 -> 工具 -> 设置 -> 运行配置 -> 模拟器端口	>  2. HbuilderX开发工具顶部 -> 运行 -> 手机或模拟器 -> 选择模拟器名字	>  建议 雷电,夜游神,或安卓8以上的

发布/升级,生成APK

	>  1. HbuilderX开发工具顶部 -> 发行 -> 本地打包 -> 生成app资源	>  2. HbuilderX开发工具顶部 -> 运行 -> 运行到终端 -> 发布	```	app名称:manifest.json文件中: name	热更新id:manifest.json文件中:appid	app图标:static/logo.png	```

UI与autojs的交互

<br>建议先大致了解Vue项目结构后进行```项目主体UI:pages/   各种UI样式举例项目主体UI:pages/robots/		2个启动界面举例 项目AJ脚本:static/robots/	(默认)用于存放AutoJs代码```

从UI启动autojs脚本(举例)

不想看例子的人,请直接看这两个路径的源码

pages/robots/static/robots/

【第1步】. 新建autojs机器人脚本: 在项目路径~/static/robots下新建文件demo.js

launchApp("微信"); click("发现"); click("朋友圈");desc("评论").findOne().click();click("");

【第2步】. 修改页面内容 pages/index/index.vue

<template><view> 	<button class="cu-btn bg-green shadow" @tap="test">启动</button>	<button class="cu-btn bg-green shadow" @tap="stop">停止</button></view></template><script> var {autojs} = require('robot-tools');export default {    methods: {        test() {            var param = {                file: 'demo.js', //文件路径为./static/robots/demo.js             }            autojs.stop();            autojs.start(param);        }    }}</script>

【第3步】. 在Hbuilder中启动,

菜单:运行/手机或模拟器/选择你的手机(此时手机上会自动安装调试app),请为这个app授权”无障碍“,”悬浮窗“,”从后台启动”

...

参数解释

var {autojs} = require('robot-tools');var param = { 	file: 'demo.js', //机器人脚本(static/robots/目录下),或绝对路径/sdcard/xxx.js,或远程URL(也可以用发布的打包加密代码)	vue:  this, //可选, 将本vue对象传递给机器人	arguments: {}, //可选, json,传递给机器人的参数。[提示]如果不传递,则系统会默认使用'当时'的vue的data数据	onMessage: (data)=>{}, //回调函数,机器人给VUE发送消息, 感觉快淘汰了	start: ()=>{}, //脚本启动事件	finish: (obj)=>{},//脚本执行完毕事件	fail: (msg)=>{},//脚本发生意外事件}//启动机器人autojs.start(param); //在当前环境中立即执行autojs脚本autojs.exec(function(){     //在vue的代码文件里,直接执行机器人代码,   console.log(device.getIMEI());   launchApp('抖音');   //click('朋友圈');});//停止脚本autojs.stop();

autojs机器人获取VUE发过来的参数(启动机器人时传递的)

app.args //json对象app.arguments

autojs机器人给VUE层发消息

app.post2host("hello vue"); //autojs机器人用这个方法给VUE层发消息,(在上面的onMessage中接收消息)

autojs机器人脚本直接访问VUE页面对象

app.vue  //autojs直接访问vue的对象,上面传递进来的对象this(或别的对象)app.vue.abc   //访问data里的abc变量app.vue.abc = 999; //给data里面的abc赋值app.vue.test() //访问methods里面的 test函数。 此用法可以淘汰上面的onMessage回调

例index.vue

<template><view> 	{{abc}}</view></template><script> var {autojs} = require('robot-tools');export default {    data: {        abc: 123    }    methods: {        test() {            console.log('autojs call test');        }    }}</script>

AutoJs 新手/老手,请阅读

支持AutoJS的全部API, 补充了一些

  1. 启动app
launchApp("浏览器");

1. 点击

click全局函数[推荐]

无论元素是否有clickable属性,都会强制点击到对应的坐标上

click("按钮1");click("", 0);  //点击第0个赞

点击文字为“按钮1”的界面元素(按钮,文字等)

click("*入购物车");  //点击包含这个文字的元素click(desc('购物车').findOne());	click(desc('购物车'),  0);	

点击文字包含"入购物车"的界面元素(按钮,文字等)

click(300,500); //点击坐标(300,500)click('购物车', 10,10);  //右下角偏移 10,10click('购物车', -10,10); //左下角click('购物车', 10,-10); //右上角click('购物车', -10,-10); //左上角 click(desc('购物车'));	 //新click(desc('购物车'), 2);	 //新click(desc('购物车').findOne());	 //click(desc('购物车').findOne(), -10,-10);	 //购物车的左上角 10,10点击一下 ,以购物车的左上角为参考click(desc('购物车').findOne(), 10,10);	 //购物车的右下角 10,10点击一下 ,以购物车的 右下角为参考click(desc('购物车'), 10,10);text('购物车').findOne().click(); //点击购物车,此方法点击的是元素本身(如果元素只是普通文本,则会失效)click(text('购物车').findOne()); //(推荐)点击购物车,此方法点击的是屏幕,如果自己不可点击,会把事件传递给父控件

点击进入页面,然后再回来

  • 适合多页面跳来跳去的交互场景 *
click(desc('购物车'), function(){	;;//进去页面了,干点啥	//处理完毕后,会回到原页面});click('粉丝', () => { 		var pp = desc('粉丝列表').findOne();		var fanslist = listChildren(pp);		dosomthing(fanslist);	});

2. 输入

向本界面中的输入框输入文字

setText("你好");setText(0, "你好"); //第几个输入框

3. 查找控件

//1. 查找界面上是否有文字为“消息”的控件,返回数组text("消息"); //2. 界面上是否有控件包含“入购物车”这几个字,返回数组text("*入购物车"); //3. 查找并返回一个text("消息").findOne(); //4. 查找并返回一个,超时5秒text("消息").findOne(5000);// 是否存在text("消息").exists();//5. 等待界面出现“”这个字的控件,等5秒(默认20秒)text("消息").waitFor(5000); waitFor("消息");waitFor("消息", 5000);//6. 等待这个文字消失, 默认超时20秒waitGone("消息");waitGone("消息", 5000);//7. textEx  //是text的临时补充版textEx("#") //查找输入框textEx("#139101") //查找输入框,里面内容为139101textEx("#*请输入") //查找输入框,里面内容 包含 请输入//8.desc("").findOne(); //控件的Content-Description属性descContains("评论数").findOne(); //9.//对象在屏幕内,比如查找抖音的点赞按钮时,会有两个在屏幕外。就需要这个函数来锁定inScreen(desc(''));inScreenOne(desc(''));//或者 用扩展搜索desc('').visibleToUser(true);  //控件是否可见。//10 其他扩展搜索条件:/*bounds(0,0, 600, 900) 控件在屏幕上的范围。indexInParent(2) 控件在父控件的位置。editable(true) 控件是否可编辑。visibleToUser(true) 控件是否可见。drawingOrder(2) 控件在父控件的绘制顺序。clickable(true) 控件是否可点击。longClickable(true) 控件是否可长按。checkable(true) 控件是否可勾选。checked(true) 控件是否可已勾选。scrollable(true) 控件是否可滑动。selected(true) 控件是否已选择。enabled(true)*/

3.0 控件的[属性]

** 控件有很多属性,请打印一下获取的对象看看

3.1 控件的【方法】

var box = desc('body').findOne();box.click(); //点击控件box.longClick();box.text();  //获取控件的文本box.setText('xxx'); //设置文本box.bounds();  //获取控件的坐标 top, left, right, bottombox.paste();; //粘贴 , setClip("你好");box.children(); //子元素的数组listChildren(box); //新增,同上, 增加了 textAll属性,所有的子元素的文本box.child(i); //第3个子元素box.parent(); //父控件box.findOne(desc("")); //查找子元素box.find(desc("")).get(1); //查找子元素,获取第2个box.find(desc("")).empty(); //是否为空

3.2 页面是否匹配某些内容

根据页面是否匹配某些内容,来判断页面功能

//函数matchContents(matchkeys);//查找当前页面是否同时包含 这4个项(主界面)matchContents("消息 & 通讯录 & 工作台 & *待办");//查找当前页面是否有如下情况(搜索手机号页面)// A. 手机号 与 输入框  B. 出现文字‘搜索’ 与输入框matchContents("手机号 & # | *搜索 & #");//添加好友页面matchContents("*好友中添加 & 已发邀请 | *好友中添加 & 添加");

3.3 复杂的查找/等待分支

在流程中,可能出现任意个不同界面的时候,需要进行分支切换

//等待出现两个控件中的一个, 返回 0或1,失败返回-1;超时5秒(默认20秒)//这个功能 主要用在一个动作后,可能出现两个窗口中的一个。var i = either("*加为好友", "用户不存在");var i = either("*加为好友", "用户不存在", 5000);
//1. 等待出现多个控件中的一个, 返回 0,1,2,3,失败返回-1; 超时5秒(默认20秒)//这个功能 主要用在比如一个点击动作后,可能出现多个窗口中的一个。var i = appear(["*加为好友", "用户不存在", "*无权限"], 5000);//2. 或者,返回key, 失败则返回-1var key = appear({"ok":"*加为好友", "unexist":"用户不存在", "denial": "*无权限"}, 5000);

4. 窗口操作(设计的不好)

  1. 启动app
launchApp("浏览器");
  1. 获取当前的包名//如 com.tencent.mm
currentPackage();
  1. 等待窗口出现
waitForActivity("*.launch.WwMainActivity", 4000);//建议多使用,等待内容出现的函数 waitFor
  1. (从深层堆栈中回退)一直点击返回键,让页面一直返回,直至遇到某窗口(# 有点费劲, 推荐使用click的回调功能)
//参数:窗口类名/或数组,包名,超时时间,忽略其他窗口的存在;//返回: 该类名(有点复杂,可以放弃,请参考4.2)back2activity("*.launch.WwMainActivity");back2activity("*.launch.WwMainActivity","com.tencent.wework");back2activity("*.launch.WwMainActivity","com.tencent.wework", 12000);back2activity("*.launch.WwMainActivity","com.tencent.wework", 12000, ["*.xxActivity","*.yyyActivity"]);//也可以是数组,返回对应的类名back2activity(["*.launch.WwMainActivity", "*.LaunchSplashActivity"]);

4.2 从深层堆栈中回退) 一直点击返回键,让页面一直返回,直至遇到某窗口

//自动点击返回键,回调页面包含xx内容的窗口//matchList可以为字符串,或数组, 回到包含该内容的页面,参考 matchContents函数back2activityEx(matchList, timeout)back2activityEx("消息 & 通讯录", 5000);back2activityEx(["消息 & 通讯录", "已发邀请 | 添加"], 5000);
  1. 等待窗口消失
activityWaitGone("*.launch.WwMainActivity", 5000);

推荐使用waitGone('文字')

5. 按键

home(); //桌面back(); //返回recents(); //任务列表notifications(); //拉出通知栏

6. 其他

sleep(1000);//暂停1秒//console.log("xxxxx"); //会同时打印到电脑,手机console.show();  //打开悬浮日志窗口(日志同时会往这里输出)//---//用新的控制台console.useNew(); //使用新的模式!!(使下面的这些功能),老控制台则用这个访问console_oldconsole.useNew('patchs/log_layout.xml'); //指定layoutconsole.log2ide("xxxx"); //仅仅显示在电脑里console.log2app("xxxx");  //仅仅显示在手机上console.title('修改标题内容');console.toast('修改标题内容');toast('修改标题内容');console.msg('覆盖日志区域内容');//内容可使用HTML,可作为自定义统计页console.log('日志');console.log('<b>日志</b>'); //内容可使用HTMLconsole.info('蓝色提示');console.warn('黄色警告');console.verbose('低级日志');console.error('红色警告');console.error.color = '#DD0099';//设置颜色console.error.color =< 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap