"ui";
var myAPP = {};
myAPP.title = "抖音关注私信" //脚本名称
myAPP.packageName = "com.ss.android.ugc.aweme" //程序包名
myAPP.appVersion = "7.4.0" //app版本
myAPP.characteristic = "feiyun" //存储标识
myAPP.mainMenu = 0 //下拉菜单索引
myAPP.taskNum = 0 //任务计数
myAPP.totalNum = "5000" //任务总数(总共执行多少个后停止)
myAPP.every = "10" //每执行多少个
myAPP.suspend = "60" //暂停,秒
myAPP.delayMin = "1" //随机延时最小值,秒
myAPP.delayMax = "3" //随机延时最大值,秒
myAPP.findTimeout = "1" //寻找节点超时时间,秒
myAPP.taskTimeout = "60" //任务超时时间,秒
myAPP.isMale = false //选择男
myAPP.isLady = false //选择女
myAPP.isNoOne = false //选择无
myAPP.isNickStart = false //话术前添加昵称
myAPP.isSignEnd = false //话术后添加字符表情
myAPP.talking01 = "一只刚上线的小可爱~"
myAPP.talking02 = ""
myAPP.talking03 = ""
//--------------------------------------------------------------------------------------------
ui.layout(
<ScrollView>
<vertical>
<appbar>
<toolbar id="toolbar" title="{{myAPP.title}}" />
</appbar>
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<linear>
<Switch id="autoService" text="无障碍服务:" checked="{{auto.service != null}}" w="auto" textStyle="bold" />
</linear>
</vertical>
<View bg="#E51400" h="*" w="5" />
</card>
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<linear>
<text text="功能选择:" textColor="black" w="auto" />
<spinner id="mainMenu" entries="关注|私信|关注私信" spinnerMode="dialog" />
</linear>
</vertical>
<View bg="#dddddd" h="*" w="3" />
</card>
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<linear>
<text text="性别选择:" textColor="black" w="auto" />
<checkbox id="isMale" checked="{{myAPP.isMale}}" text="男" w="auto" marginLeft="10" />
<checkbox id="isLady" checked="{{myAPP.isLady}}" text="女" w="auto" marginLeft="10" />
<checkbox id="isNoOne" checked="{{myAPP.isNoOne}}" text="无" w="auto" marginLeft="10" />
</linear>
</vertical>
<View bg="#dddddd" h="*" w="3" />
</card>
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<linear>
<text text="计划运行:" textColor="black" w="auto" />
<input id="totalNum" color="black" inputType="number" w="60" />
<text text="个后,停止" textColor="black" w="auto" />
</linear>
<linear>
<text text="每执行:" textColor="black" w="auto" />
<input id="every" color="black" inputType="number" w="60" />
<text text="个,暂停" textColor="black" w="auto" />
<input id="suspend" color="black" inputType="number" w="60" />
<text text="秒" textColor="black" w="auto" />
</linear>
<linear>
<text text="任务间隔:" textColor="black" w="auto" />
<input id="delayMin" color="black" inputType="numberDecimal" w="60" />
<text text="~" textColor="black" w="auto" />
<input id="delayMax" color="black" inputType="numberDecimal" w="60" />
<text text="秒" textColor="black" w="auto" />
</linear>
<linear>
<text text="任务超时:" textColor="black" w="auto" />
<input id="taskTimeout" color="black" inputType="number" w="60" />
<text text="秒" textColor="black" w="auto" />
</linear>
</vertical>
<View bg="#dddddd" h="*" w="3" />
</card>
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="10 8" h="auto">
<linear>
<checkbox id="isNickStart" checked="{{myAPP.isNickStart}}" text="" w="auto" />
<text text="话术前添加昵称" textColor="black" w="auto" />
</linear>
<linear>
<checkbox id="isSignEnd" checked="{{myAPP.isSignEnd}}" text="" w="auto" />
<text text="话术后添加随机符号表情" textColor="black" w="auto" />
</linear>
</vertical>
<View bg="#dddddd" h="*" w="3" />
</card>
<card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
<vertical padding="18 8" h="auto">
<linear>
<text text="话术内容:" textColor="black" w="auto" />
<input id="talking01" color="black" inputType="number" w="*" />
</linear>
<linear>
<text text="话术内容:" textColor="black" w="auto" />
<input id="talking02" color="black" inputType="number" w="*" />
</linear>
<linear>
<text text="话术内容:" textColor="black" w="auto" />
<input id="talking03" color="black" inputType="number" w="*" />
</linear>
</vertical>
<View bg="#dddddd" h="*" w="3" />
</card>
<button style="Widget.AppCompat.Button.Colored" margin="10" id="start">启动</button>
</vertical>
</ScrollView>
);
//--------------------------------------------------------------------------------------------
getData(true); // 读取界面配置
threads.start(function () {
//在新线程执行的代码
//请求截图
if (!requestScreenCapture()) {
log("请求截图失败");
exit();
} else {
log("请求截图成功");
}
});
//开关的单击事件
ui.autoService.on("check", function (checked) {
// 用户勾选无障碍服务的选项时,跳转到页面让用户去开启
if (checked && auto.service == null) {
app.startActivity({
action: "android.settings.ACCESSIBILITY_SETTINGS"
});
}
if (!checked && auto.service != null) {
auto.service.disableSelf();
}
});
// 当用户回到本界面时,resume事件会被触发
ui.emitter.on("resume", function () {
// 此时根据无障碍服务的开启情况,同步开关的状态
ui.autoService.checked = auto.service != null;
});
// 按钮单击事件
ui.start.on("click", () => {
saveData(); // 保存界面配置
getData(false); //读取界面配置
//程序开始运行之前判断无障碍服务
if (auto.service == null) {
toastLog("请先开启无障碍服务!");
return; //返回。不再往下执行
};
// 屏蔽音量键调节声音
events.setKeyInterceptionEnabled("volume_up", true);
//启用按键监听
events.observeKey();
//监听音量键按下
events.onKeyDown("volume_up", () => {
toastLog('按音量键停止');
exit(); //停止、退出脚本
});
// log(myAPP.every)
threads.start(function () {
//在新线程执行的代码
main()
});
});
//--------------------------------------------------------------------------------------------
function main() {
// 不能在ui线程执行阻塞操作,请在子线程或子脚本执行,或者使用setInterval循环检测当前activity和package
app.launch(myAPP.packageName) //启动APP
// recents() //显示最近任务
waitForActivity("com.netease.vopen.activity.SigFragmentActivity") //等待粉丝列表页
sleep(random(parseInt(myAPP.delayMin), parseInt(myAPP.delayMax)) * 1000) //随机延时
var date1 = new Date(), date2
toastLog("开始执行")
while (true) {
if (textEndsWith("的粉丝").exists()) {
log("当前在粉丝列表页面")
//寻找用户昵称
var object = id("friends_name").find();
if (!object.empty()) {
var 是否执行 = false
var 是否私信 = false
// 遍历用户昵称
object.forEach(function (currentValue, index) {
log("当前用户名:" + currentValue.text())
var farther = currentValue.parent().parent().parent()
if (farther.clickable()) {
//点击,进入个人资料页
if (farther.click()) {
sleep(random(parseInt(myAPP.delayMin), parseInt(myAPP.delayMax)) * 1000) //随机延时
log("开始判断性别")
// 判断性别
var sex = APP_取用户性别()
if (myAPP.isMale && myAPP.isLady && myAPP.isNoOne) {
是否执行 = true
} else if (myAPP.isMale && myAPP.isLady) {
if (sex == 1 || sex == 0) {
是否执行 = true
}
} else if (myAPP.isMale && myAPP.isNoOne) {
if (sex == 1 || sex == 2) {
是否执行 = true
}
} else if (myAPP.isLady && myAPP.isNoOne) {
if (sex == 0 || sex == 2) {
是否执行 = true
}
} else if (myAPP.isMale && sex == 1) {
是否执行 = true
} else if (myAPP.isLady && sex == 0) {
是否执行 = true
} else if (myAPP.isNoOne && sex == 2) {
是否执行 = true
} else {
toastLog("Error:请设置性别")
};
if (是否执行) {
if (myAPP.mainMenu == "0") {
// 关注
if (APP_关注用户()) {
log("关注成功")
myAPP.taskNum++; //变量递增
date1 = new Date(); //开始时间
sleep(random(parseInt(myAPP.delayMin), parseInt(myAPP.delayMax)) * 1000) //随机延时
}
} else if (myAPP.mainMenu == "1") {
// 私信
是否私信 = true
} else if (myAPP.mainMenu == "2") {
// 关注+私信
APP_关注用户()
是否私信 = true
};
if (是否私信) {
if (APP_发送文本私信()) {
log("私信成功")
myAPP.taskNum++; //变量递增
date1 = new Date(); //开始时间
sleep(random(parseInt(myAPP.delayMin), parseInt(myAPP.delayMax)) * 1000) //随机延时
};
};
};
};
//返回到粉丝列表
if (id("timeline_profile_msg_btn").exists()) {
id("back_actionbar").click() //返回
sleep(random(parseInt(myAPP.delayMin), parseInt(myAPP.delayMax)) * 1000) //随机延时
};
};
});
} else {
toastLog("Error:没找到╭(╯^╰)╮");
};
} else {
toastLog("Error:不在粉丝列表页面")
};
// 检查是否在粉丝列表页面
if (textEndsWith("的粉丝").exists()) {
//开始翻页
id("list").findOne().scrollForward()
};
};
};
// 保存界面配置
function saveData() {
// ui.mainMenu.getSelectedItemPosition() 获取下拉菜单选中的索引
setStorageData(myAPP.characteristic, "mainMenu", ui.mainMenu.getSelectedItemPosition())
setStorageData(myAPP.characteristic, "totalNum", ui.totalNum.text())
setStorageData(myAPP.characteristic, "every", ui.every.text())
setStorageData(myAPP.characteristic, "suspend", ui.suspend.text())
setStorageData(myAPP.characteristic, "delayMin", ui.delayMin.text())
setStorageData(myAPP.characteristic, "delayMax", ui.delayMax.text())
setStorageData(myAPP.characteristic, "taskTimeout", ui.taskTimeout.text())
setStorageData(myAPP.characteristic, "isMale", ui.isMale.isChecked())
setStorageData(myAPP.characteristic, "isLady", ui.isLady.isChecked())
setStorageData(myAPP.characteristic, "isNoOne", ui.isNoOne.isChecked())
setStorageData(myAPP.characteristic, "isNickStart", ui.isNickStart.isChecked())
setStorageData(myAPP.characteristic, "isSignEnd", ui.isSignEnd.isChecked())
setStorageData(myAPP.characteristic, "talking01", ui.talking01.text())
setStorageData(myAPP.characteristic, "talking02", ui.talking02.text())
setStorageData(myAPP.characteristic, "talking03", ui.talking03.text())
};
// 读取界面配置
// isSetVlue:是否设置ui组件的值。逻辑型参数
function getData(isSetVlue) {
// 判断本地是否存储了菜单的索引值。
if (getStorageData(myAPP.characteristic, "mainMenu") != undefined) {
// 重新定义菜单索引
myAPP.mainMenu = getStorageData(myAPP.characteristic, "mainMenu")
// 设置菜单选中的项目
isSetVlue && ui.mainMenu.setSelection(myAPP.mainMenu);
};
if (getStorageData(myAPP.characteristic, "totalNum") != undefined) {
myAPP.totalNum = getStorageData(myAPP.characteristic, "totalNum")
};
isSetVlue && ui.totalNum.setText(myAPP.totalNum);
if (getStorageData(myAPP.characteristic, "every") != undefined) {
myAPP.every = getStorageData(myAPP.characteristic, "every")
};
isSetVlue && ui.every.setText(myAPP.every);
if (getStorageData(myAPP.characteristic, "suspend") != undefined) {
myAPP.suspend = getStorageData(myAPP.characteristic, "suspend")
};
isSetVlue && ui.suspend.setText(myAPP.suspend);
if (getStorageData(myAPP.characteristic, "delayMin") != undefined) {
myAPP.delayMin = getStorageData(myAPP.characteristic, "delayMin")
};
isSetVlue && ui.delayMin.setText(myAPP.delayMin);
if (getStorageData(myAPP.characteristic, "delayMax") != undefined) {
myAPP.delayMax = getStorageData(myAPP.characteristic, "delayMax")
};
isSetVlue && ui.delayMax.setText(myAPP.delayMax);
if (getStorageData(myAPP.characteristic, "taskTimeout") != undefined) {
myAPP.taskTimeout = getStorageData(myAPP.characteristic, "taskTimeout")
};
isSetVlue && ui.taskTimeout.setText(myAPP.taskTimeout);
// 选择框
if (getStorageData(myAPP.characteristic, "isMale") != undefined) {
myAPP.isMale = getStorageData(myAPP.characteristic, "isMale")
};
isSetVlue && ui.isMale.setChecked(myAPP.isMale);
if (getStorageData(myAPP.characteristic, "isLady") != undefined) {
myAPP.isLady = getStorageData(myAPP.characteristic, "isLady")
};
isSetVlue && ui.isLady.setChecked(myAPP.isLady);
if (getStorageData(myAPP.characteristic, "isNoOne") != undefined) {
myAPP.isNoOne = getStorageData(myAPP.characteristic, "isNoOne")
};
isSetVlue && ui.isNoOne.setChecked(myAPP.isNoOne);
if (getStorageData(myAPP.characteristic, "isNickStart") != undefined) {
myAPP.isNickStart = getStorageData(myAPP.characteristic, "isNickStart")
};
isSetVlue && ui.isNickStart.setChecked(myAPP.isNickStart);
if (getStorageData(myAPP.characteristic, "isSignEnd") != undefined) {
myAPP.isSignEnd = getStorageData(myAPP.characteristic, "isSignEnd")
};
isSetVlue && ui.isSignEnd.setChecked(myAPP.isSignEnd);
// 话术内容
if (getStorageData(myAPP.characteristic, "talking01") != undefined) {
myAPP.talking01 = getStorageData(myAPP.characteristic, "talking01")
};
isSetVlue && ui.talking01.setText(myAPP.talking01);
if (getStorageData(myAPP.characteristic, "talking02") != undefined) {
myAPP.talking02 = getStorageData(myAPP.characteristic, "talking02")
};
isSetVlue && ui.talking02.setText(myAPP.talking02);
if (getStorageData(myAPP.characteristic, "talking03") != undefined) {
myAPP.talking03 = getStorageData(myAPP.characteristic, "talking03")
};
isSetVlue && ui.talking03.setText(myAPP.talking03);
};
/*
修改日期:20190801
起始页面:个人资料页
备注说明:
返回值:字符串型
*/
function APP_取用户昵称() {
var nickName = ""
let object = className("TextView").depth(17).find();
if (!object.empty()) {
object.forEach(function (currentValue, index) {
if (index == 0) {
nickName = currentValue.text()
}
});
} else {
log("没找到╭(╯^╰)╮");
};
return nickName //返回昵称
};
/*
修改日期:20190805
起始页面:个人资料页
备注说明:
返回值:整数型
*/
function APP_取用户性别() {
// 0,女;1,男;2,无
let objectAge = textEndsWith("岁").depth(18).findOne(1000)
let objectMan = textEndsWith("男").depth(18).findOne(1000)
let objectWomen = textEndsWith("女").depth(18).findOne(1000)
if (objectAge != null || objectMan != null || objectWomen != null) {
var rect;
if (objectAge != null) {
rect = objectAge.bounds() //获取性别范围
} else if (objectMan != null) {
rect = objectMan.bounds() //获取男 范围
} else if (objectWomen != null) {
rect = objectWomen.bounds() //获取女 范围
};
var img = captureScreen(); //屏幕截图
// log(images.pixel(img, 66, 940))
var point = findColor(img, -16148307, {
region: [rect.left, rect.top, rect.width(), rect.height()],
threshold: 4
});
if (point) {
log("找到蓝色啦:" + point); //性别为男
return 1
} else {
log("没找到蓝色,开始寻找粉色");
var point = findColor(img, -3390887, {
region: [rect.left, rect.top, rect.width(), rect.height()],
threshold: 4
});
if (point) {
log("找到粉色啦:" + point); //性别为女
return 0
} else {
log("没找到粉色,该用户未设置性别");
return 2
}
};
} else {
log("Error:未获取到性别节点")
}
return 2
};
/*
修改日期:20190805
起始页面:个人资料页
备注说明:
返回值:布尔型
*/
function APP_关注用户() {
var isFollow = false
let object = text("关注").depth(18).findOne(1000)
if (object != null) {
if (object.clickable()) {
object.click(); //点击关注按钮
sleep(random(1000, 3000)) //随机延时
if (findNode("text", "取消关注")) {
log("关注成功")
isFollow = true
} else if (findNode("text", "已请求")) {
log("已请求关注,关注失败.这是私密账号")
} else {
log("关注失败")
}
} else {
log("关注节点不可点击")
}
} else if (findNode("text", "取消关注")) {
log("已关注,无需执行关注")
} else if (findNode("text", "已请求")) {
log("已请求关注,无需执行关注.这是私密账号")
} else {
log("未找到关注按钮,可能已关注或APP版本不符合")
}
return isFollow
};
// function APP_取用户昵称() {
// var nickName = ""
// waitForActivity("com.netease.vopen.timeline.ui.UserTimelineActivity") //等待个人资料页出现
// if (id("mid_title").exists()) {
// nickName = id("mid_title").findOne().text() //获取昵称
// } else {
// log("Error:未获取到昵称节点")
// }
// return nickName //返回昵称
// };
// function APP_取用户性别() {
// // 0,女;1,男;2,无
// waitForActivity("com.netease.vopen.timeline.ui.UserTimelineActivity") //等待个人资料页出现
// if (id("timeline_profile_gender").exists()) {
// var rect = id("timeline_profile_gender").findOne().bounds() //获取性别范围
// var img = captureScreen(); //屏幕截图
// // log(images.pixel(img, 413,287))
// var point = findColor(img, -622207, {
// region: [rect.left, rect.top, rect.width(), rect.height()],
// threshold: 4
// });
// if (point) {
// // log("找到粉色啦:" + point); //性别为女
// return 0
// } else {
// // log("没找到粉色,开始寻找蓝色");
// var point = findColor(img, -7943189, {
// region: [rect.left, rect.top, rect.width(), rect.height()],
// threshold: 4
// });
// if (point) {
// // log("找到蓝色啦:" + point); //性别为男
// return 1
// } else {
// // log("没找到蓝色,该用户未设置性别");
// return 2
// }
// }
// } else {
// log("未获取到性别节点,未设置性别")
// };
// return 2
// };
// function APP_关注用户() {
// var isFollow = false
// waitForActivity("com.netease.vopen.timeline.ui.UserTimelineActivity") //等待个人资料页出现
// if (id("timeline_profile_care_btn").exists()) {
// var text = id("timeline_profile_care_btn").findOne().text() //获取关注按钮的标题
// if (text == "关注") {
// id("timeline_profile_care_btn").click()
// isFollow = true
// sleep(random(parseInt(myAPP.delayMin), parseInt(myAPP.delayMax)) * 1000) //随机延时
// } else {
// log("已经关注过")
// }
// } else {
// log("Error:未获取到关注按钮节点")
// }
// return isFollow
// };
function APP_取随机话术() {
var talkings = Array()
if (myAPP.talking01 != "") {
talkings.push(myAPP.talking01)
}
if (myAPP.talking02 != "") {
talkings.push(myAPP.talking02)
}
if (myAPP.talking03 != "") {
talkings.push(myAPP.talking03)
}
return talkings[random(0, talkings.length - 1)]
};
function APP_取随机符号表情() {
var arr = ["o(╯□╰)o", "╯▂╰", "╯0╰", "⊙﹏⊙", "˙▽˙", "⊙▂⊙", "⊙0⊙", "ゃōゃ", "●0●", "∪ω∪", "(^人^)"]
return arr[random(0, arr.length - 1)]
};
/*
修改日期:20190705
起始页面:个人资料页
备注说明:
返回值:布尔型
*/
function APP_发送文本私信() {
var 执行结果 = false
waitForActivity("com.netease.vopen.timeline.ui.UserTimelineActivity") //等待个人资料页出现
var nickName = APP_取用户昵称()
var talking = APP_取随机话术()
// 判断私信按钮是否存在
if (id("timeline_profile_msg_btn").exists()) {
id("timeline_profile_msg_btn").click() //点击私信按钮
sleep(random(100, 500)) //随机延时
waitForActivity("com.netease.vopen.im.MessageActivity") //等待会话页出现
sleep(random(100, 500)) //随机延时
if (id("avatar").exists()) {
log("历史已经发送过")
} else {
//话术前添加昵称
if (myAPP.isNickStart) {
talking = nickName + talking
};
// 话术后添加随机符号表情
if (myAPP.isSignEnd) {
talking = talking + APP_取随机符号表情()
};
setText(talking) //设置话术(向输入框投递文本)
sleep(random(100, 500)) //随机延时
text("发送").click() //发送话术
执行结果 = true
sleep(random(parseInt(myAPP.delayMin), parseInt(myAPP.delayMax)) * 1000) //随机延时
};
// 返回到个人资料页
desc("转到上一层级").click()
sleep(random(parseInt(myAPP.delayMin), parseInt(myAPP.delayMax)) * 1000) //随机延时
} else {
log("Error:未获取到私信按钮节点")
};
return 执行结果
};
//保存本地数据
function setStorageData(name, key, value) {
const storage = storages.create(name); //创建storage对象
storage.put(key, value);
};
//读取本地数据
function getStorageData(name, key) {
const storage = storages.create(name); //创建storage对象
if (storage.contains(key)) {
return storage.get(key, "");
};
//默认返回undefined
};
//删除本地数据
function delStorageData(name, key) {
const storage = storages.create(name); //创建storage对象
if (storage.contains(key)) {
storage.remove(key);
};
};
/*
寻找节点
@way:查找方式: text/desc/id/className
@str:節點文本
@timeOut:查找超时的时间,默认1000毫秒。可空
*/
function findNode(way, str, timeOut) {
if (!timeOut) { timeOut = 1000 }
let result = false //点击结果
let object;
if (way == "text") {
object = text(str).findOne(timeOut);
} else if (way == "desc") {
object = desc(str).findOne(timeOut);
} else if (way == "id") {
object = id(str).findOne(timeOut);
} else if (way == "className") {
object = className(str).findOne(timeOut);
} else {
log("Error:findNode-way参数不正确")
}
if (object != null) {
result = true
} else {
// log("Error:findNode-组件不存在/没找到")
}
return result;
};
/*
点击节点中心点坐标
@way:查找方式
@str:節點文本
@sleepTime:点击成功后的延时,默认1000毫秒。可空
*/
function clickNodeR(way, str, sleepTime) {
if (!sleepTime) { sleepTime = 1000 }
let result = false //点击结果
let object;
if (way == "text") {
object = text(str).findOne(1000);
} else if (way == "desc") {
object = desc(str).findOne(1000);
} else if (way == "id") {
object = id(str).findOne(1000);
} else if (way == "className") {
object = className(str).findOne(1000);
} else {
log("Error:clickNodeR-way参数不正确")
}
if (object != null) {
let x = object.bounds().centerX();
let y = object.bounds().centerY();
log(x, y)
if (x > 0 && y > 0) {
result = click(parseInt(x), parseInt(y));
} else {
log("Error:clickNodeR-中心点坐标不在可视区")
}
result && sleep(sleepTime);
} else {
log("Error:clickNodeR-组件不存在/没找到")
}
return result;
};
/*
点击节点
@way:查找方式
@str:節點文本
@sleepTime:点击成功后的延时,默认1000毫秒。可空
*/
function clickNode(way, str, sleepTime) {
if (!sleepTime) { sleepTime = 1000 }
let result = false //点击结果
let object;
if (way == "text") {
object = text(str).findOne(1000);
} else if (way == "desc") {
object = desc(str).findOne(1000);
} else if (way == "id") {
object = id(str).findOne(1000);
} else if (way == "className") {
object = className(str).findOne(1000);
} else {
log("Error:clickNode-way参数不正确")
}
if (object != null) {
if (object.clickable()) {
result = object.click();
result && sleep(sleepTime);
// if (result) {
// sleep(sleepTime);
// }
} else {
log("Error:clickNode-组件不可点击")
}
} else {
log("Error:clickNode-组件不存在/没找到")
}
return result;
};
11
最新推荐文章于 2023-12-31 12:00:46 发布