冰狐智能辅助使用经验
冰狐智能辅助是一个让不懂编程的菜鸟在极短时间内、以最小成本实现各种APP辅助(自动化)功能的开发平台。可以创建自动化工具、智能辅助、效率工具、小应用。譬如:自动签到、网络推广、批量处理、机器人、自动化测试、自动化运营,自动回复、抓取APP(抖音)数据等等。
主要功能
在移动端上提供js版本的辅助api。
支持在线实时调试。支持多台设备同时在线调试脚本,在线实时获取所有设备的UI树和log信息。不再需要掌握android那套复杂的调试方法。
支持通过“搭积木”、配置参数的方式构建辅助脚本(不会编程的用户也可以很容易制作辅助功能)。
在后端支持SaaS服务,开发者不需要单独开发后端服务即可使用功能强大的后端服务,比如用户管理,设备管理,脚本管理等等。
支持微服务,若SaaS服务无法满足开发者,开发者可以通过编写微服务(js函数)来轻松扩展后端服务。
官网
首先进入官网,看官网的开发文档,在官网写代码,在线调试手机。
(弄懂官方文档就可以下手了)
手机app
官网的左上角有最新的QQ群,加入QQ群就可以下载 冰狐智能辅助app,有什么不懂直接在群里问官方人员。下载--文件管理器打开安装--无视风险--给全部权限
使用
看b站的视频:冰狐智能辅助第二讲(demo)_哔哩哔哩_bilibili
多看这个up主的几讲视频,不会JS编程的需要去学一下,当然不会编程也可以自动构建,但是要钱。0基础一天学会js第一讲_哔哩哔哩_bilibili
Javascript文档:Javascript
常用API:
//获取当前打开应用的包名:直接编辑脚本,在底部的logs可以看到手机所有的操作,打开应用,看到有com.开头的包名
var ret=launchApp('微信') //直接打开应用
//通过包名来打开应用
if (launchApp('com.android.settings' ==1)) {}
findView(),通过UI控件的id、text、className、family等属性来找到控件,找到控件对象后对控件对象进行操作
var ret = findView('txt:设置', {maxStep: 20}); //查找当前页面是否有指定的文本,如果有返回该文本控件,然后对控件点击操作
if (ret.length > 0) {
click(ret.views[0], {click: false});
}
click('txt:确定', {click: false, afterWait: 3000}); //直接点击,id、text或者className需要用到UI树来查找,控件必须有clickable属性
------------建议找到控件再点击,因为运行太快,直接点击发现没有该控件,或者可以加sleep延迟------
用手势操作模拟下长按----click也可实现长按
switchPage('txt:我的', 'txt:管理', {click: true, failed: exitPopup}); #切换我的页面,如何有‘管理’文字,则成功
back2Page('txt:我的', {maxStep: 10, afterWait: 3000}); #返回到含有'我的'标签的页面
back({count: 1, afterWait: 2000}); 按一次返回键,时间间隔多少
sleep(5000); 延迟时间,单位毫秒
console.log('日志输出');
toast('屏幕输出');
alert('执行脚本出错'); //显示警告框
showDialog(0, '是否确认运行该程序', '运行', [{type:'positive', text:'确定', fn: OnConfirmExe}, {type:'negative', text:'取消'}]); //显示对话框。
paste('cn:com.android.EditText', '谢谢!', {afterWait: 3000}); #粘贴文本
refresh(); #刷新页面
wakeup(); //亮屏
setInterval() //周期定时器,周期性执行,每周每月
httpPost() //对地址url进行一次HTTP POST请求,同步支持,直接返回结果。解析获取到网页的数据
Thread() //多线程
LocalData,LocalData、read、write、remove 本地存储获取到的数据
var ret = ocr(100, 100, 200, 130); //OCR文字识别。
shell('cp /sdcard/aznfz/temp.txt /sdcard/aznfz/file.txt'); //执行shell命令
其他API
var handler = setInterval(cbFunc, 2000); //(单位毫秒)每两秒执行一次
function cbFunc() {
console.log('检测广告');
}
-------------------------------------------------------------------------------
setCronTask(cbTask, '30 12 * * 1', false, false, false); //每个周一的12时30分执行一次
function cbTask() {
console.log('每周一执行青年大学习');
}
--------------------------------------------------------------------------------
//当到达某个时间,就执行某个任务
var targetTime = new Date('2023-05-26 21:03:28.0640'); // 目标时间
while (true)
{
var currentTime = new Date(); // 当前时间
if (currentTime.getTime() >= targetTime.getTime()) {
console.log('执行任务');
// 执行某个任务
break;
}
}
--------------------------------------------------------------------------
var video_time = new Date('2024-05-01 00:00:59.0000');
if (video_time.getTime() >= new Date('2024-05-01 00:01:10.0000').getTime() )
{
console.log('时间已到');
}
----------------------------------------------------------------------------------------
读取和写入excel文件
导入第三方js代码
例子:
某些app一打开就有广告,而且难关掉,所以写个脚本,检测到打开app就自动检测广告,有广告就关闭。
代码如下:
//这个脚本无敌了,只要某个窗口切换,有广告就关闭。启动app就自动关
function cbWindowChange(textList, className, packageName, rawEvent) {
var startTime = new Date().getSeconds();
while(true)
{
var endtTime = new Date().getSeconds();
if (endtTime-startTime>=6)
{
console.log('任务结束');
break;
}
var ret = findView('txt*:跳过', {maxStep: 3});
if (ret.length > 0) {
click(ret.views[0], {click: false});
}
var ret = findView('txt:关闭', {maxStep: 3});
if (ret.length > 0) {
click(ret.views[0], {click: false});
}
var ret = findView('id:com.lptiyu.tanke:id/iv_close', {maxStep: 2});
if (ret.length > 0) {
click(ret.views[0], {click: false});
}
}
}
function main() {
console.log('enter main');
}
蚂蚁森林自动获取能量雨:
代码有点不行,只能点击1个能量雨,没办法,冰狐的速度有点慢
function main() {
console.log('enter main');
if (1 == launchApp('com.eg.android.AlipayGphone','txt:扫一扫')) {
var ret = findView('txt:蚂蚁森林', {maxStep: 10});
if (ret.length > 0) {
click(ret.views[0], {click: false});
}
sleep(4000);
requestScreenShot();
var ret = ocr(0.5, 0.5, 0.5, 0.5);
for (var i = 0; i < ret.length; i++) {
var obj = ret[i];
if (obj['text'] == "找能量") {
var centerX = obj['region'][0] + obj['region'][2] / 2;
var centerY = obj['region'][1] + obj['region'][3] / 2;
gestureClick(centerX, centerY, {afterWait: 3000});
break; // 找到后跳出循环
}
}
var ret = findView('txt:去收取', {maxStep: 20});
if (ret.length > 0) {
click(ret.views[0], {click: false});
}
var ret = findView('txt*:开启', {maxStep: 20});
if (ret.length > 0) {
click(ret.views[0], {click: false});
}
// ---------------------------------------------------------------------
while (true)
{
var ret = ocr();
// console.log(ret);
var sum=0;
for (var i = ret.length-1; i >=0; i--) {
var obj = ret[i];
if (obj['text'] == "绿色") {
var centerX = obj['region'][0] + obj['region'][2] / 2;
var centerY = obj['region'][1] + obj['region'][3] / 2 +80+sum; //能量运动的y偏移量
console.log(centerX,centerY) ;
gestureClick(centerX, centerY, {afterWait: 3000});
sum=sum+80;
}
}
flag = findView('txt:送TA机会', {maxStep: 1});
if (flag.length > 0) {
break;
}
}
//-----------------------------------------------------------------------------
//送TA机会,再来一次
var ret = findView('txt:送TA机会', {maxStep: 2});
if (ret.length > 0) {
click(ret.views[0], {click: false});
}
// var ret = findView('txt*:立即开启', {maxStep: 20});
// if (ret.length > 0) {
// click(ret.views[0], {click: false});
// }
}
}
百度阅读新闻
/**尽可能模拟本人的阅读行为 ,防止app检测到使用脚本*/
function read_new()
{
var ret = findView('txt:没有更多啦', {maxStep: 3});
while(ret.length<=0)
{
var randomInt =500+ Math.floor(Math.random() * 400);
var d = Math.random();
if(d>0.5)
{d=0.25}
scroll(null, 'up', {type: 1, distance: d, duration: randomInt,afterWait: Math.floor(d*4000) });//滑动的距离,取值(0-1],
ret = findView('txt*:没有更多啦', {maxStep: 3});
}
back2Page('txt:商城', {maxStep: 10, afterWait: 3000}); //返回到含有'我的'标签的页面
}
function main() {
if (1 == launchApp('百度','txt:推荐')) {
var i=0;
while(i<15)
{
var ret = findView('id*:obfuscated@cn:android.widget.ImageView', {flag:'find_all|unclickable',maxStep: 10});
if (ret.length > 0) {
console.log(ret)
click(ret.views[1], {click: false});
sleep(3000);
read_new();
}
var randomInt =500+ Math.floor(Math.random() * 400);
var d = Math.random();
if(d<0.4)
{d=d+0.4}
scroll(null, 'up', {type: 1, distance: d, duration: randomInt,afterWait: 2000});//滑动的距离
i+=1;
}
}
}
脚本太多不放了,有需要的可以找我。
经验
官方经验:如何查找没有id,没有text的控件?-码农教程-冰狐智能辅助 (aznfz.com)
找不到控件:获取UI树为空(空白)怎么办?找图,通过控件的颜色来找。
可以只选中几行代码,单独执行。
运行代码前打开冰狐app放到前台,不然可能会有延迟。
冰狐官方用的不是标准的javascipt,要按照他们的函数来,不要以js的标准来
脚本在手机运行的速度和官网调试运行的速度不一样,注意差别
运行没反应可能是代码没对,注意定义变量,注意分号,注意语法检查
获取UI树后,在顶部的tag输入搜索的文字,再一次获取,就可以快速找到对应的控件。(index=0取第一个,revel=2找到爷爷控件),不要看到文字就认为是在控件里的,是可点击的,需要慢慢调试。如果控件可点击但失败了,先模拟点击一次再点击控件一次
当我们想要操作的控件无法直接通过findView找到时(比如该控件没有text和id),可以先在目标控件附近寻找某个可以通过findView找到的控件(一般有显著的text或者id),然后再设置family参数,让其最终指向目标控件,最终通过family参数实现间接获取目标控件的目的。比如目标控件有兄弟控件和父亲控件,找到目标: var ret=findView('txt:兄弟文本',{family:[0,1]}); 先通过兄弟控件的文本找到0父亲控件,再找到父亲的第1个孩子也就是目标控件。
实在是找不到控件的,可以直接点击某个像素位置,或者可以使用ocr文字识别,找到文字的区域,直接点击该区域。 (远程控制功能可以查看该界面的像素坐标)
var ret=ocr(0.5,100,0.5,0.5); for( vat item of ret){ if (ifem.text.indexOf('包含有某文字') >-1) click()} 详细看官方视频
注意开启截屏权限。建议到群里保持安装最新版的冰狐,旧版可能出现各种问题。
调试模式下只能运行调试版本脚本,发布模式下只能运行发布版本脚本。多次点击客户端的头像就可以切换。调试完代码后就点击发布。
自定义数据在「管理中心」那里,不同的用户需要不同的运行参数,所以在那里自定义好数据,在脚本中调用参数。var name=getCustomData('自定义数据名')
搞好脚本后,要给别人使用,别人只需要下载app注册登录(或者你提供个小号给他登录), 然后你需要在网页端「管理中心」/「用户管理」中添加任意多个用户,这些用户作为您创建服务的终端用户在登录后可以直接使用您创建的服务(不能查看和修改服务源码),或者打包apk发给别人使用
总结
学了app自动化可以做什么?
1.自动刷视频领金币
2.自动抢红包
3.自动做淘宝京东的活动任务,自动采集蚂蚁森林能量雨
4.爬取app的数据,比如拼夕夕的商品数据
5.聊天机器人
6.钉钉自动打卡
......等等
早上某个时刻,自动亮屏执行脚本。
手机向亲人发消息问候,电脑自动局域网唤醒自动开机....
自动爬新闻,发表每日新闻等文章到各大传播知识平台
自动执行各大手机应用的签到,自动刷视频,自动抢购
播放进行的天气,播放今天的目标规划(行程)。然后播放音乐或新闻等
自动执行智能家居
自动唤醒AI女友,让她叫你起床