您是 Hamibot 1.6.7(Auto.js 分支)的 JavaScript 自动化专家。
请为 TikTok Lite 日本版(包名:com.ss.android.ugc.tiktok.lite 或应用名称 “TikTok Lite”)创建一个完全符合以下所有规格的自动化脚本,仅此一个脚本。
【必须规格】
・应用启动后,从前台视频 Feed 已显示的状态开始
・每个视频的观看时间 = 在 5000ms~35000ms 之间完全随机(精确到毫秒级随机)
・观看完成后,向下一个视频滑动
- 滑动时间 = 在 250ms~500ms 之间完全随机
- 滑动坐标 = X轴固定为 device.width/2
开始Y = device.height * 0.78 ±30px 随机
结束Y = device.height * 0.22 ±30px 随机
・加入人性化的细微偏差(滑动坐标加入 ±30px 左右的随机偏移)
【附加行为(概率)】
・观看完成后 以 1/10 的概率(10%) 点击「いいね」按钮
→ 使用 desc("いいね") 或 descContains("いいね") 获取后执行 .click()
・观看完成后 以 1/50 的概率(2%) 点击「お気に入り/ブックマーク/保存」按钮
→ 使用 desc("保存") 或 desc("ブックマーク") 或 descContains("お気に入り") 获取后执行 .click()
(优先使用先匹配到的按钮)
【广告处理(必须)】
・观看中或滑动后,如果出现「広告」「スポンサー」「Ad」「Sponsored」等文本,则立即向上滑动跳过
→ 使用 textMatches(/広告|スポンサー|Ad|Sponsored/).findOne(500) 进行检测
【防封禁措施(最重要)】
・所有 sleep / 等待时间都使用 random() 实现完全随机化
・滑动速度、坐标、行动间隔都要加入人性化的细微变化
・脚本内将1天运行时间上限以注释形式保留(方便后续修改)
・偶尔(约1/15概率)在随机位置进行轻微点击,增加人性化行为
【脚本结构要求】
・使用 auto(); 启动无障碍服务
・使用 launchApp("TikTok Lite");
・使用 while(true) 循环
・使用 console.log 输出运行日志
・结束时使用 toast + exit()
・所有注释请使用中文,写得清晰易懂(即使是新手也能看懂)
请严格一丝不苟地按照以上所有要求编写,不要添加任何多余功能,只专注于这个普通视频自动滑动功能。
请直接输出可以立即复制粘贴到 Hamibot 中的完整脚本代码。
回答
// 文档地址 https://docs.hamibot.com/
// 启动无障碍服务
auto();
// 启动 TikTok Lite 应用
launchApp("TikTok Lite");
// 等待应用加载完成,确保包名匹配
waitForPackage("com.ss.android.ugc.tiktok.lite");
// 等待界面稳定
sleep(5000);
// 记录脚本开始时间
var startTime = new Date().getTime();
// 获取屏幕尺寸
var screenWidth = device.width;
var screenHeight = device.height;
// 主循环
while (true) {
// 【防封禁措施】1 天运行时间上限检查(默认注释,如需启用请取消下方注释)
// if (new Date().getTime() - startTime > 24 * 60 * 60 * 1000) {
// console.log("已达到 1 天运行上限,脚本停止");
// break;
// }
// 【广告处理】检测是否存在广告文本
// 使用 textMatches 匹配多种语言的广告标识,超时设置 500ms
var adElement = textMatches(/広告 | スポンサー|Ad|Sponsored/).findOne(500);
if (adElement != null) {
console.log("检测到广告,立即向上滑动跳过");
// 广告跳过滑动:速度较快,坐标居中
var adSwipeDuration = random(200, 400);
swipe(screenWidth / 2, screenHeight * 0.8, screenWidth / 2, screenHeight * 0.2, adSwipeDuration);
sleep(1000); // 滑动后稍作等待
continue; // 跳过本次循环剩余步骤,直接进入下一次视频检测
}
// 【观看时间】完全随机 5000ms ~ 35000ms
var watchTime = random(5000, 35000);
console.log("当前视频观看时间:" + watchTime + "ms");
sleep(watchTime);
// 【附加行为】概率点击「いいね」(1/10 概率)
if (random(1, 10) == 1) {
console.log("触发点赞行为");
var likeBtn = desc("いいね").findOne(0);
if (likeBtn == null) {
likeBtn = descContains("いいね").findOne(0);
}
if (likeBtn != null) {
likeBtn.click();
sleep(random(500, 1000)); // 点击后随机等待
}
}
// 【附加行为】概率点击「保存/收藏」(1/50 概率)
if (random(1, 50) == 1) {
console.log("触发保存行为");
var saveBtn = desc("保存").findOne(0);
if (saveBtn == null) {
saveBtn = desc("ブックマーク").findOne(0);
}
if (saveBtn == null) {
saveBtn = descContains("お気に入り").findOne(0);
}
if (saveBtn != null) {
saveBtn.click();
sleep(random(500, 1000)); // 点击后随机等待
}
}
// 【防封禁措施】偶尔随机点击 (1/15 概率)
if (random(1, 15) == 1) {
console.log("触发人性化随机点击");
// 在屏幕中间区域随机点击,避开边缘
var randomX = random(parseInt(screenWidth * 0.2), parseInt(screenWidth * 0.8));
var randomY = random(parseInt(screenHeight * 0.2), parseInt(screenHeight * 0.8));
click(randomX, randomY);
sleep(random(300, 800));
}
// 【滑动操作】向下一个视频滑动
// 滑动时间随机 250ms ~ 500ms
var swipeDuration = random(250, 500);
// 计算滑动坐标,加入±30px 随机偏移
var startX = parseInt(screenWidth / 2);
var startYBase = parseInt(screenHeight * 0.78);
var startY = startYBase + random(-30, 30);
var endYBase = parseInt(screenHeight * 0.22);
var endY = endYBase + random(-30, 30);
console.log("执行滑动:(" + startX + ", " + startY + ") -> (" + startX + ", " + endY + "), 耗时:" + swipeDuration + "ms");
// 执行滑动
swipe(startX, startY, startX, endY, swipeDuration);
// 滑动后等待,确保视频加载
sleep(random(1000, 2000));
}
// 脚本结束时的提示与退出(当循环打破时执行)
toast("脚本运行结束");
hamibot.exit();