使用JavaScript编写针对百度极速版APP的自动化脚本通常涉及到使用WebView测试框架,比如Puppeteer或Selenium,这些工具允许你控制一个浏览器或WebView环境,从而与网页或APP中的Web内容进行交互。然而,对于原生APP(如百度极速版)的自动化测试,通常需要使用专门的移动应用自动化框架,如Appium。
Appium支持多种编程语言,包括JavaScript。要使用JavaScript和Appium进行自动化测试,你通常需要使用Appium的WD库。但请注意,直接操作原生APP的界面元素(如按钮、文本框等)通常需要使用元素的ID、类名或其他标识符,这些标识符可能随着APP的更新而发生变化。
以下是一个简化的示例,展示了如何使用JavaScript和Appium的WD库来启动一个Android设备上的百度极速版APP,并尝试与其中的某个元素进行交互。请注意,这个示例假设你已经正确设置了Appium服务器,并且已经知道了要与之交互的元素的ID。
首先,你需要安装必要的npm包:
bash复制代码
npm install wd appium |
然后,你可以编写如下的JavaScript脚本:
javascript复制代码
while (true) {
v_百度有效分钟 = parseInt(v_百度有效秒数 / 60);
toast("已经观看视频: " + v_百度有效分钟 + "分钟");
logd("v_无动作计次: ", v_无动作计次);
if (v_无动作计次 >= 30) {
v_无动作计次 = 0;
for (let i = 0; i < 5; i++) {
back();
sleep(300);
}
utils.openApp("com.baidu.searchbox.lite");
}
let node_评论图标 = id("com.baidu.searchbox.lite:id/fi7").getOneNodeInfo(100);
if (node_评论图标) {
//有可能在短剧中
let node = id("com.baidu.searchbox.lite:id/dmu").getOneNodeInfo(1000)
//在视频中
if (v_百度有效分钟 < v_百度检测分钟数) {
var result = swipeToPoint(548 + random(-10, 10), 1911 + random(-10, 10), 558 + random(-10, 10), 461 + random(-10, 10), random(450, 2111));
if (result) {
v_再看一个领取 = 0
toast("滑动成功");
var randoms = random(10, 30);
logd(randoms)
toast("总数: " + randoms);
v_百度有效秒数 = v_百度有效秒数 + randoms;
for (let i = randoms; i >= 0; i--) {
toast("观看倒计时: " + i);
sleep(1000);
}
} else {
toast("滑动失败");
}
}
let node_直播中 = text("直播中").getOneNodeInfo(100);
if (node_直播中) {
var result = swipeToPoint(548 + random(-10, 10), 1911 + random(-10, 10), 558 + random(-10, 10), 461 + random(-10, 10), random(450, 2111));
logd("直播中滑动");
}
let node_秒后播放下一个视频 = textMatch(".*秒后播放下一个视频").getOneNodeInfo(100);
if (node_秒后播放下一个视频) {
swipeToPoint(548 + random(-10, 10), 1911 + random(-10, 10), 558 + random(-10, 10), 461 + random(-10, 10), random(450, 2111));
}
} else {
//没在视频中
logd("没在视频中");
if (v_百度有效分钟 < v_百度检测分钟数) {
let node_评论图标 = id("com.baidu.searchbox.lite:id/fi7").getOneNodeInfo(100);
if (node_评论图标 == null) {
logd("没在 评论图标");
try {
let node_视频 = text("视频").id("com.baidu.searchbox.lite:id/bf2").getOneNodeInfo(100).previousSiblings()[0];
if (node_视频) {
logd("点击 视频");
logd(node_视频.bounds.left + 5, node_视频.bounds.top + 5);
clickPoint(node_视频.bounds.left + 5, node_视频.bounds.top + 5)
v_无动作计次 = 0;
} else {
v_无动作计次 = v_无动作计次 + 1;
}
} catch (e) {
logd("没找到 视频按钮");
let node_视频 = text("视频").getOneNodeInfo(100);
if (node_视频) {
logd("找到 视频");
node_视频.click();
} else {
logd("没找到 视频");
}
}
}
}
let node_立即提现 = text("立即提现").getOneNodeInfo(100);
if (node_立即提现) {
node_立即提现.click();
logd("立即提现")
} else {
logd("NO 立即提现")
}
let node_继续阅读赚更多 = text("继续阅读赚更多").getOneNodeInfo(100)
if (node_继续阅读赚更多) {
node_继续阅读赚更多.click();
logd("继续阅读赚更多")
} else {
logd("NO 继续阅读赚更多")
}
let node_额外领金币 = textMatch("额外领.*金币").getOneNodeInfo(100);
if (node_额外领金币) {
node_额外领金币.click();
v_无动作计次 = 0;
}
let node_s后可领取奖励 = textMatch(".*s后可领取奖励").getOneNodeInfo(100);
if (node_s后可领取奖励) {
v_无动作计次 = 0;
}
let node_看广告立即领特权 = text("看广告立即领特权").getOneNodeInfo(100);
if (node_看广告立即领特权) {
node_看广告立即领特权.click();
} else {
v_无动作计次 = v_无动作计次 + 1;
}
try {
let node_任务完成_关闭 = text("任务完成").getOneNodeInfo(100).parent().siblings()[0];
if (node_任务完成_关闭) {
node_任务完成_关闭.click();
}
} catch (e) {
logd("没有找到 任务完成")
}
let node_关闭 = desc("关闭").pkg("com.baidu.searchbox.lite").getOneNodeInfo(100);
if (node_关闭) {
node_关闭.click();
}
let node_已领取金币 = textMatch("已领取.*金币").getOneNodeInfo(100);
let node_已减少秒宝箱时长 = textMatch("已减少.*秒宝箱时长").getOneNodeInfo(100);
if (node_已领取金币 != null || node_已减少秒宝箱时长 != null) {
logd("1")
let node_关闭 = id("com.baidu.searchbox.lite:id/iap").getOneNodeInfo(100);
if (node_关闭) {
logd("2");
logd((node_关闭.bounds.left + node_关闭.bounds.right) / 2, (node_关闭.bounds.top + node_关闭.bounds.bottom) / 2);
node_关闭.clickEx();
//clickPoint((node_关闭.bounds.left+node_关闭.bounds.right) /2,(node_关闭.bounds.top+node_关闭.bounds.bottom) /2);
} else {
logd("3")
}
}
for (let i = 0; i < 30; i++) {
let node_现金收益 = text("现金收益(元)").getOneNodeInfo(100);
if (node_现金收益) {
let node_可领Arr = text("可领").getNodeInfo(100);
if (node_可领Arr) {
for (let i = 0; i < node_可领Arr.length; i++) {
logd("找到 可领", JSON.stringify(node_可领Arr[i].bounds));
clickPoint(node_可领Arr[i].bounds.left + 5, node_可领Arr[i].bounds.bottom + 5);
sleep(1000 * 3);
}
try {
let node_微信提现关闭 = text("微信提现").getOneNodeInfo(100).parent().parent().nextSiblings()[0];
if (node_微信提现关闭) {
logd("找到 node_微信提现关闭");
node_微信提现关闭.click();
sleep(1000);
}
} catch (e) {
logd("没有找到 node_微信提现关闭");
let node_我知道了 = text("我知道了").getOneNodeInfo(100);
if (node_我知道了) {
node_我知道了.click();
v_无动作计次 = 0;
} else {
v_无动作计次 = v_无动作计次 + 1;
}
}
} else {
logd("没有找到 可领");
}
}
sleep(500);
if (v_滑动方位 == "向左") {
logd(v_滑动方位);
swipeToPoint(886, 1040, 291, 1020, 500);
v_滑动计次 = v_滑动计次 + 1;
if (v_滑动计次 >= 3) {
v_滑动方位 = "向右";
v_滑动计次 = 0;
}
} else if (v_滑动方位 == "向右") {
logd(v_滑动方位);
swipeToPoint(291, 1020, 886, 1040, 500);
v_滑动计次 = v_滑动计次 + 1;
if (v_滑动计次 >= 3) {
v_滑动方位 = "完成";
v_滑动计次 = 0;
}
} else if (v_滑动方位 == "完成") {
logd(v_滑动方位);
v_滑动方位 = "向左";
v_滑动计次 = 0;
break;
}
}
let node_立即领取 = text("立即领取").getOneNodeInfo(100);
if (node_立即领取) {
node_立即领取.click();
}
let node_立即收下 = text("立即收下").getOneNodeInfo(100);
if (node_立即收下) {
logd("立即收下");
node_立即收下.click();
} else {
logd("没有找到 立即收下");
v_无动作计次 = v_无动作计次 + 1;
}
let node_残忍离开 = text("残忍离开").getOneNodeInfo(100);
if (node_残忍离开) {
node_残忍离开.click();
v_无动作计次 = 0;
} else {
v_无动作计次 = v_无动作计次 + 1;
}
let node_我知道了 = text("我知道了").getOneNodeInfo(100);
if (node_我知道了) {
node_我知道了.click();
v_无动作计次 = 0;
} else {
v_无动作计次 = v_无动作计次 + 1;
}
try {
let node_可以提现啦_前面的关闭 = text("可以提现啦").getOneNodeInfo(100).previousSiblings()[0];
if (node_可以提现啦_前面的关闭) {
node_可以提现啦_前面的关闭.click();
v_无动作计次 = 0;
} else {
v_无动作计次 = v_无动作计次 + 1;
}
} catch (e) {
logd("没有找到 可以提现啦");
}
let node_去阅读赚更多 = text("去阅读赚更多").getOneNodeInfo(100);
if (node_去阅读赚更多) {
node_去阅读赚更多.click();
v_无动作计次 = 0;
} else {
v_无动作计次 = v_无动作计次 + 1;
}
let node_开心收下 = text("开心收下").getOneNodeInfo(100)
if (node_开心收下) {
node_开心收下.click();
v_无动作计次 = 0;
} else {
v_无动作计次 = v_无动作计次 + 1;
}
}
if (v_百度有效分钟 >= v_百度检测分钟数) {
let node_任务_1 = id("com.baidu.searchbox.lite:id/aj0").getOneNodeInfo(1000)
if (node_任务_1) {
node_任务_1.click();
}
let node_任务 = text("任务").id("com.baidu.searchbox.lite:id/bf2").getOneNodeInfo(100);
if (node_任务) {
logd("找到 任务");
node_任务.click();
sleep(1000);
} else {
logd("没有找到 任务");
// let node_视频 = text("视频").id("com.baidu.searchbox.lite:id/bf2").getOneNodeInfo(100);
// if (node_视频) {
// logd("找到 视频");
// node_视频.click();
// sleep(1000);
// } else {
// logd("没有找到 视频");
// }
let node_进入视频专辑的返回 = id("com.baidu.searchbox.lite:id/agr").getOneNodeInfo(1000);
if (node_进入视频专辑的返回) {
logd("找到 进入视频专辑的返回");
node_进入视频专辑的返回.click();
sleep(1000);
} else {
logd("没有找到 进入视频专辑的返回");
}
let node_动态 = text("动态").getOneNodeInfo(100);
let node_全部 = text("全部").getOneNodeInfo(100);
if (node_动态 != null || node_全部 != null) {
let node_node_进入视频专辑的返回_1 = id("com.baidu.searchbox.lite:id/dac").getOneNodeInfo(100)
if (node_node_进入视频专辑的返回_1) {
logd("找到 进入视频专辑的返回_1");
node_node_进入视频专辑的返回_1.click();
sleep(1000);
} else {
logd("没有找到 进入视频专辑的返回_1");
}
}
let node_选集 = text("选集").getOneNodeInfo(100);
let node_粉丝 = text("粉丝").getOneNodeInfo(100);
if (node_选集 != null && node_粉丝 == null) {
let node_推荐 = text("推荐").getOneNodeInfo(100);
if (node_推荐) {
logd("推荐")
node_推荐.click();
sleep(1000);
}
}
}
let node_微信提现 = text("微信提现").getOneNodeInfo(100);
if (node_微信提现) {
node_微信提现.click();
}
let node_关闭应用 = text("关闭应用").getOneNodeInfo(100);
if (node_关闭应用) {
node_关闭应用.click();
}
//兑换人民币
let node_金币收益 = text("金币收益").getOneNodeInfo(100);
if (node_金币收益) {
node_金币收益.click();
sleep(1000);
}
let node_随时兑换 = text("随时兑换").getOneNodeInfo(100);
if (node_随时兑换) {
node_随时兑换.click();
sleep(1000);
}
let node_确认兑换 = text("确认兑换").getOneNodeInfo(100);
if (node_确认兑换) {
node_确认兑换.click();
sleep(1000);
}
let node_去提现 = text("去提现").getOneNodeInfo(100);
if (node_去提现) {
node_去提现.click();
sleep(1000);
}
// let node_看视频赚金币 = textMatch("看视频赚.*金币").getOneNodeInfo(100);
// if (node_看视频赚金币) {
// node_看视频赚金币.click();
// sleep(1000);
// }
//提现步骤
try {
let node_提现记录_具体金额_元_十位 = text("提现记录").getOneNodeInfo(100).parent().nextSiblings()[1].child(0).child(1).text;
let node_提现记录_具体金额_元_个位 = text("提现记录").getOneNodeInfo(100).parent().nextSiblings()[1].child(1).child(0).text;
var 总金额 = parseInt(node_提现记录_具体金额_元_十位 + node_提现记录_具体金额_元_个位);
logd("目前总金额:" + 总金额);
let node_立即提现 = text("立即提现").getOneNodeInfo(1000);
if (node_立即提现) {
logd("找到 立即提现");
clickPoint((parseInt(node_立即提现.bounds.left) + parseInt(node_立即提现.bounds.right)) / 2, (parseInt(node_立即提现.bounds.top) + parseInt(node_立即提现.bounds.bottom)) / 2 + 100);
sleep(1000);
let node_提现到支付宝 = text("提现到支付宝").getOneNodeInfo(1000);
if (node_提现到支付宝) {
node_提现到支付宝.click();
sleep(1000);
return;
}
} else {
logd("没找到 立即提现");
for (let i = 0; i < 6; i++) {
if (总金额 == 20) {
let node_20元 = text("20元").getOneNodeInfo(100);
if (node_20元) {
try {
let 进一步信息 = node_20元.nextSiblings()[0].text;
if (进一步信息) {
if (进一步信息.indexOf("阅读") > -1) {
logd("需要继续阅读");
node_20元.click();
sleep(1000);
let node_去阅读 = text("去阅读").getOneNodeInfo(100);
if (node_去阅读) {
node_去阅读.click();
sleep(1000);
}
} else if (进一步信息.indexOf("天后") > -1) {
logd("天后解锁");
总金额 = 10;
logd("降低总金额为:10 试试提现;");
}
}
} catch (e) {
logd("没有进一步信息");
node_20元.click();
sleep(1000);
let node_提现到支付宝 = text("提现到支付宝").getOneNodeInfo(1000);
if (node_提现到支付宝) {
node_提现到支付宝.click();
break;
}
}
}
} else if (总金额 == 10) {
let node_10元 = text("10元").getOneNodeInfo(100);
if (node_10元) {
try {
let 进一步信息 = node_10元.nextSiblings()[0].text;
if (进一步信息) {
if (进一步信息.indexOf("阅读") > -1) {
logd("需要继续阅读");
node_10元.click();
sleep(1000);
let node_去阅读 = text("去阅读").getOneNodeInfo(100);
if (node_去阅读) {
node_去阅读.click();
sleep(1000);
}
} else if (进一步信息.indexOf("天后") > -1) {
logd("天后解锁");
总金额 = 3;
logd("降低总金额为:3 试试提现;");
}
}
} catch (e) {
logd("没有进一步信息");
node_10元.click();
sleep(1000);
let node_提现到支付宝 = text("提现到支付宝").getOneNodeInfo(1000);
if (node_提现到支付宝) {
node_提现到支付宝.click();
break;
}
}
}
} else if (总金额 == 3) {
let node_3元 = text("3元").getOneNodeInfo(100);
if (node_3元) {
try {
let 进一步信息 = node_3元.nextSiblings()[0].text;
if (进一步信息) {
if (进一步信息.indexOf("阅读") > -1) {
logd("需要继续阅读");
node_3元.click();
sleep(1000);
let node_去阅读 = text("去阅读").getOneNodeInfo(100);
if (node_去阅读) {
node_去阅读.click();
sleep(1000);
}
} else if (进一步信息.indexOf("天后") > -1) {
logd("天后解锁");
总金额 = 1;
logd("降低总金额为:1 试试提现;");
}
}
} catch (e) {
logd("没有进一步信息");
node_3元.click();
sleep(1000);
let node_提现到支付宝 = text("提现到支付宝").getOneNodeInfo(1000);
if (node_提现到支付宝) {
node_提现到支付宝.click();
break;
}
}
}
} else if (总金额 == 1) {
let node_1元 = text("1元").getOneNodeInfo(100);
if (node_1元) {
try {
let 进一步信息 = node_1元.nextSiblings()[0].text;
if (进一步信息) {
if (进一步信息.indexOf("阅读") > -1) {
logd("需要继续阅读");
node_1元.click();
sleep(1000);
let node_去阅读 = text("去阅读").getOneNodeInfo(100);
if (node_去阅读) {
node_去阅读.click();
sleep(1000);
}
} else if (进一步信息.indexOf("天后") > -1) {
logd("天后解锁");
总金额 = 0.5;
logd("降低总金额为:0.5 试试提现;");
}
}
} catch (e) {
logd("没有进一步信息");
node_1元.click();
sleep(1000);
let node_提现到支付宝 = text("提现到支付宝").getOneNodeInfo(1000);
if (node_提现到支付宝) {
node_提现到支付宝.click();
break;
}
}
}
} else if (总金额 == 0.5) {
let node_0点5元 = text("0.5元").getOneNodeInfo(100);
if (node_0点5元) {
try {
let 进一步信息 = node_0点5元.nextSiblings()[0].text;
if (进一步信息) {
if (进一步信息.indexOf("阅读") > -1) {
logd("需要继续阅读");
node_0点5元.click();
sleep(1000);
let node_去阅读 = text("去阅读").getOneNodeInfo(100);
if (node_去阅读) {
node_去阅读.click();
sleep(1000);
}
} else if (进一步信息.indexOf("天后") > -1) {
logd("天后解锁");
总金额 = 0.3;
logd("降低总金额为:0.3 试试提现;");
}
}
} catch (e) {
logd("没有进一步信息");
node_0点5元.click();
sleep(1000);
let node_提现到支付宝 = text("提现到支付宝").getOneNodeInfo(1000);
if (node_提现到支付宝) {
node_提现到支付宝.click();
break;
}
}
}
} else if (总金额 == 0.3) {
let node_0点3元 = text("0.3元").getOneNodeInfo(100);
if (node_0点3元) {
try {
let 进一步信息 = node_0点3元.nextSiblings()[0].text;
if (进一步信息) {
if (进一步信息.indexOf("阅读") > -1) {
logd("需要继续阅读");
node_0点3元.click();
sleep(1000);
let node_去阅读 = text("去阅读").getOneNodeInfo(100);
if (node_去阅读) {
node_去阅读.click();
sleep(1000);
}
} else if (进一步信息.indexOf("天后") > -1) {
logd("天后解锁");
}
}
} catch (e) {
logd("没有进一步信息");
node_0点3元.click();
sleep(1000);
let node_提现到支付宝 = text("提现到支付宝").getOneNodeInfo(1000);
if (node_提现到支付宝) {
node_提现到支付宝.click();
break;
}
}
}
}
}
}
} catch (e) {
logd("没有找到具体金额");
let node_提现记录 = text("提现记录").getOneNodeInfo(100);
if (node_提现记录) {
return;
}
}
}
}
在这个脚本中,我们首先导入了wd
模块,并设置了与设备和APP相关的desired
参数。然后,我们初始化了一个与Appium服务器的会话,并设置了设备参数。之后,我们查找了一个具有特定ID的元素并点击它。最后,我们处理任何可能出现的错误,并在完成所有操作后结束会话。
请注意,这只是一个非常基础的示例。在实际应用中,你可能需要处理更复杂的场景,如等待元素出现、处理弹窗、滚动页面等。此外,由于APP的结构和元素ID可能会随着版本更新而变化,因此自动化脚本可能需要定期维护和更新。
再次强调,直接操作APP的界面元素需要对APP的结构和元素标识符有深入的了解。如果你不熟悉这些,可能需要先对APP进行UI探索,或者使用开发者工具(如Appium Inspector)来查看和获取元素的标识符。
交流QQ群:878191637