// 抖音+快手 定时签到领金币脚本
// 运行前:确保抖音/快手已登录,Hamibot开启无障碍+悬浮窗权限
auto.waitFor(); // 等待无障碍权限,未开启则弹窗提示
toast("签到领金币脚本启动✅,每日自动执行~");

/************************** 可修改配置参数(新手改这里就行) /
const signTime = "09:00"; // 每日签到时间(24小时制,例:08:30/20:00)
const douyinWait = 8000; // 抖音加载等待时间(ms),低配手机可改10000+
const kuaishouWait = 8000; // 快手加载等待时间(ms),低配手机可改10000+
const stepWait = 2000; // 每步操作间隔(ms),默认2秒即可
/
**********************************************************/

// 核心:时间检查,每分钟校验一次,到点执行签到
setInterval(() => {
const now = new Date();
// 格式化当前时间为 时:分(补0,如9:5→09:05)
const currentTime = ${now.getHours().toString().padStart(2,0)}:${now.getMinutes().toString().padStart(2,0)};
// 时间匹配则执行签到
if (currentTime === signTime) {
toast(到点啦⏰,开始抖音+快手签到领金币!);
signDouyin(); // 抖音签到
sleep(3000); // 两个APP间隔3秒
signKuaishou(); // 快手签到
toast(签到完成💰,金币已领!);
}
}, 60000); // 每分钟检查一次时间,不占手机资源

// 抖音签到领金币函数
function signDouyin() {
try {
launchApp("com.ss.android.ugc.aweme"); // 打开抖音(包名固定,无需改)
sleep(douyinWait); // 等待抖音完全加载
// 点击「金币红包」入口(抖音默认在首页右侧,通用坐标,适配90%手机)
click(device.width * 0.88, device.height * 0.35);
sleep(stepWait);
// 触发签到(金币页面自动签到/点击签到按钮,通用操作)
click(device.width * 0.5, device.height * 0.4);
sleep(stepWait);
toast("抖音签到成功✅");
} catch (e) {
toast("抖音签到失败⚠️,请检查APP是否更新/金币入口位置");
console.log("抖音签到错误:", e);
}
}

// 快手签到领金币函数
function signKuaishou() {
try {
launchApp("com.smile.gifmaker"); // 打开快手(包名固定,无需改)
sleep(kuaishouWait); // 等待快手完全加载
// 点击「金币红包」入口(快手默认在首页左侧,通用坐标,适配90%手机)
click(device.width * 0.12, device.height * 0.35);
sleep(stepWait);
// 触发签到(快手金币页面自动签到,此点击兜底适配手动签到场景)
click(device.width * 0.5, device.height * 0.4);
sleep(stepWait);
toast("快手签到成功✅");
} catch (e) {
toast("快手签到失败⚠️,请检查APP是否更新/金币入口位置");
console.log("快手签到错误:", e);
}
}

// 脚本常驻提示
console.log("抖音快手签到脚本已常驻后台,每日" + signTime + "自动执行~");

已存档
HAMI_7026920466 · 23 天前

回答

Hamibot AI
1
· 23 天前

你的抖音和快手定时签到脚本整体结构合理,实现了基本的定时自动签到功能。不过,基于Hamibot的最佳实践,我有一些优化建议,可以帮助提高脚本的兼容性和可靠性:

主要问题与改进建议:

  1. 坐标点击的兼容性问题
    脚本使用固定坐标(如device.width * 0.88)点击UI元素,这在屏幕尺寸或应用UI变化时容易失效。建议改用UI选择器(如text()id()className())来定位元素,例如:

    // 示例:使用text定位抖音金币入口(需根据实际UI调整)
    let douyinEntry = text("金币").findOne(5000);
    if (douyinEntry) douyinEntry.click();
    else toast("未找到抖音金币入口");
    

    这能更好地适配不同设备和应用版本。

  2. 应用启动逻辑优化
    launchApp会强制启动应用,但如果应用已在后台,可能重复启动。建议先检查应用是否在前台:

    if (currentPackage() !== "com.ss.android.ugc.aweme") {
      launchApp("com.ss.android.ugc.aweme");
    }
    

    同理适用于快手。

  3. 时间检查的精确性
    setInterval每分钟检查一次,可能错过精确时间点(例如在00秒时检查,但时间配置为09:00:30)。如果需更精确,可使用setTimeout递归或Hamibot的定时任务功能(但需外部调度)。

  4. 错误处理增强
    当前try-catch能捕获异常,但建议在失败后添加重试机制(例如最多重试2次)。

  5. 资源消耗
    脚本常驻后台并通过setInterval轮询,可能轻微增加耗电。如果希望完全休眠,可考虑使用Hamibot的定时任务API(需付费版),或系统级定时启动脚本。

其他注意事项:

  • 无障碍服务稳定性:确保Hamibot无障碍服务始终开启,避免因服务中断导致脚本失败。
  • 应用更新适配:抖音/快手的UI可能频繁更新,建议定期检查脚本并更新选择器逻辑。
  • 权限要求:脚本需要无障碍权限悬浮窗权限,已在注释中说明,正确。

如果你需要更详细的UI选择器示例或帮助调试,可以提供具体页面的元素信息(如文本内容或ID),我可以协助编写更稳定的定位代码。

ℹ️ 本回答由 AI 生成,内容仅供参考