我需要写一个打卡脚本,这个脚本是打卡我的一个应用,然后点击 到具体的界面,等跳转完成之后 ,点击打卡

HAMI_8390497716 · 8 小时前

回答

Hamibot AI
1
· 8 小时前

以下是为你编写的打卡脚本模板。脚本已按照 Hamibot 的最佳实践进行优化,使用元素查找替代固定延时,确保页面跳转稳定可靠。

// 文档地址 https://docs.hamibot.com/
var appName = "你的应用名称";      // 替换为实际应用名称或包名
var homeFlag = "首页特有文本";     // 替换为首页加载完成后必定出现的文本
var entryBtn = "进入打卡";         // 替换为跳转至打卡页的按钮文本
var pageFlag = "打卡界面特有文本"; // 替换为打卡页加载完成后必定出现的文本
var checkInBtn = "打卡";           // 替换为打卡按钮的文本
var successFlag = "打卡成功";      // 替换为打卡成功后的提示文本(可选)

// 1. 启动应用
app.launchApp(appName);

// 2. 等待首页加载完成(超时10秒)
if (!text(homeFlag).findOne(10000)) {
    toast("未找到首页元素,脚本退出");
    exit();
}

// 3. 点击跳转至打卡界面(循环点击直至成功)
while (!click(entryBtn)) {
    sleep(500);
}

// 4. 等待打卡界面加载完成(超时10秒)
if (!text(pageFlag).findOne(10000)) {
    toast("未进入打卡界面,脚本退出");
    exit();
}

// 5. 点击打卡按钮
while (!click(checkInBtn)) {
    sleep(500);
}

// 6. 确认打卡结果
if (text(successFlag).findOne(5000)) {
    toast("打卡成功");
} else {
    toast("打卡操作已执行,请手动确认结果");
}

关键逻辑说明

  1. 启动应用app.launchApp() 支持应用名称或包名。建议使用包名(如 com.example.app)可避免同名应用冲突。
  2. 等待页面跳转:使用 text("特征文本").findOne(超时毫秒) 替代 sleep()。只有当目标元素出现时才会继续执行,避免因设备性能差异导致点击错位。
  3. 可靠点击while (!click("文本")) { sleep(500); } 会持续尝试点击,直到返回 true。这能解决控件未渲染完成或点击区域被遮挡的问题。
  4. 特征文本选取homeFlagpageFlag 必须是对应页面唯一且稳定存在的文本(如标题、固定标签)。不要使用动态变化的内容。

使用注意事项

  • 确保设备已授予 Hamibot 无障碍服务权限,否则 click()text().findOne() 无法正常工作。
  • 若按钮无文本仅有图标,可改用 desc("内容描述").findOne()id("控件ID").findOne() 进行定位。
  • 脚本运行前,建议手动走一遍流程,使用 Hamibot 的「布局分析」工具抓取准确的文本、desc 或 id。
  • 若同一屏幕存在多个相同文本,可使用 click("文本", 索引),索引从 0 开始。

按上述模板替换占位符后即可直接运行。如需适配复杂交互(如滑动、弹窗处理、验证码等),可提供具体界面特征,我会为你补充对应逻辑。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实