我现在需要完成一个手机上的自动化操作。我现在需要做一个脚本,具体步骤如下:1、点击页面上第一个(核实信息)按钮,等待载入完成,点击右下角提交,其中提交会出现两个分支,1、弹出小窗:存在未核实人员标签,是否去核实? 如果出现这个小窗,则点击(继续保存),会显示:人口基本信息保存成功。2、直接显示:人口基本信息保存成功。不管哪条分支,等出现后点击返回键(这是一个安卓手机投屏窗口,可以点击物理按钮返回也可以点击左上角返回)。然后回到上一层的列表(就是有核实信息的那一列。)点击右上角的筛选,然后点击最上层的筛选,等待载入后出现新列表,开始下一轮。但是注意的是,每一次操作都有概率出现:请求中 小窗,要等待该窗口消失后再继续下一步操作。我建议选择HAMIBOT平台,请你根据我的要求,我们两个一步一步搭建出一个可用的HAMIBOT脚本,你可以向我自由提问?我现在已经通过USB连接手机,ADB如果默认不能调用,则调用G:\scrcpy-win64-v3.3.4目录的。目前手机已经打开了第一个页面 也就是有核实窗口的页面,请你自己规划路径,一步一步慢慢实现我的要求。如果需要帮助,你可以告诉我我要怎么做,我会尽可能协助你(但是我代码能力为0)
回答
你好!很高兴能协助你搭建这个自动化脚本。Hamibot 是一个运行在安卓手机上的应用,脚本也是直接在手机上执行的,而不是通过电脑端的 ADB 或 Scrcpy 直接控制(Scrcpy 仅用于投屏查看)。
为了让你能够顺利运行,我们需要分步骤进行。由于你的代码基础为零,我会尽量简化操作,并提供一个可以直接复制使用的脚本模板,但需要你配合确认一些界面上的具体文字。
第一步:环境准备与权限检查
在开始写脚本前,必须确保手机权限已开启,否则脚本无法点击屏幕。
- 无障碍服务:进入手机「设置」→「无障碍」→找到 Hamibot → 开启开关。
- 后台弹出界面:进入手机「设置」→「应用管理」→ 找到 Hamibot → 允许「显示悬浮窗」或「后台弹出界面」。
- 截图权限:首次运行脚本时,系统会弹窗请求截图权限,请点击「允许」。
第二步:确认界面元素信息
脚本的核心是识别界面上的按钮和文字。我需要你提供以下关键信息的准确内容(你可以打开 Hamibot 的「调试」功能或使用截图工具查看):
- 「核实信息」按钮的确切文字是什么?(例如:“核实信息”还是“去核实”?)
- 「提交」按钮的确切文字是什么?
- 「继续保存」按钮的确切文字是什么?
- 「筛选」按钮的确切文字是什么?
- 「请求中」小窗的确切文字是什么?
如果你暂时无法获取这些 ID,我们可以先用文字匹配的方式编写脚本。
第三步:脚本搭建方案
我为你规划了一个包含循环、异常处理和返回逻辑的脚本结构。你可以将下面的代码复制到 Hamibot 在线编辑器中。
注意: 代码中用 // TODO: 标记的地方,需要你根据实际界面文字进行修改。
// 文档地址 https://docs.hamibot.com/
// 全局配置区域,请在此处修改实际界面文字
var CONFIG = {
btn_verify_info: "核实信息", // 第一个要点的按钮文字
btn_submit: "提交", // 右下角提交按钮文字
btn_continue_save: "继续保存", // 未核实人员弹窗的按钮文字
msg_success: "人口基本信息保存成功", // 保存成功的提示文字
btn_filter: "筛选", // 列表页右上角筛选按钮文字
popup_request: "请求中", // 可能出现的请求中弹窗文字
sleep_interval: 1000 // 每次操作间隔时间(毫秒)
};
// 核心函数:等待特定弹窗消失
function waitForPopupDisappear(text) {
var startTime = new Date().getTime();
while (true) {
var exists = text(text).exists();
if (!exists) {
return true;
}
// 如果超过 30 秒还没消失,强制退出防止死循环
if (new Date().getTime() - startTime > 30000) {
toast("检测到" + text + "窗口长时间未消失,请手动处理");
return false;
}
sleep(500);
}
}
// 核心函数:等待特定文字出现
function waitForTextAppear(text) {
var startTime = new Date().getTime();
while (true) {
if (text(text).exists()) {
return true;
}
if (new Date().getTime() - startTime > 10000) {
return false;
}
sleep(500);
}
}
// 主循环逻辑
function mainLoop() {
while (true) {
// 1. 检查是否有“请求中”弹窗,如果有则等待消失
if (text(CONFIG.popup_request).exists()) {
toast("检测到请求中,等待窗口关闭");
waitForPopupDisappear(CONFIG.popup_request);
}
// 2. 点击第一个“核实信息”按钮
toast("开始点击核实信息");
if (!text(CONFIG.btn_verify_info).findOne()) {
toast("未找到核实信息按钮,可能已结束任务");
exit();
}
text(CONFIG.btn_verify_info).findOne().click();
sleep(CONFIG.sleep_interval);
// 3. 点击“提交”按钮
toast("点击提交");
if (!text(CONFIG.btn_submit).findOne()) {
toast("未找到提交按钮");
exit();
}
text(CONFIG.btn_submit).findOne().click();
sleep(CONFIG.sleep_interval);
// 4. 处理分支逻辑
// 分支 A: 存在未核实人员标签弹窗
if (text(CONFIG.btn_continue_save).exists()) {
toast("发现未核实弹窗,点击继续保存");
text(CONFIG.btn_continue_save).findOne().click();
sleep(CONFIG.sleep_interval);
}
// 5. 等待“保存成功”提示出现
toast("等待保存成功");
if (!waitForTextAppear(CONFIG.msg_success)) {
toast("未检测到保存成功,可能流程中断");
// 这里可以选择重试或退出,建议先退出观察
exit();
}
// 6. 点击返回键
toast("执行返回");
back();
sleep(CONFIG.sleep_interval);
// 7. 点击筛选
toast("点击筛选");
if (!text(CONFIG.btn_filter).findOne()) {
toast("未找到筛选按钮");
exit();
}
text(CONFIG.btn_filter).findOne().click();
sleep(CONFIG.sleep_interval);
// 8. 点击最上层筛选选项(此处需要确认具体是哪个选项的文字)
// 假设筛选后会出现一个新的列表项,你需要指定点击哪一个
// 这里暂时用通用查找,请根据实际情况调整
toast("点击筛选选项");
// 示例:点击第一个出现的筛选结果,或者指定文字
// text("具体筛选选项文字").findOne().click();
// 由于不确定具体选项文字,这里暂不写死,请你在测试时补充
// 9. 等待新列表载入
toast("等待新列表载入");
sleep(CONFIG.sleep_interval * 3);
// 10. 循环继续
toast("一轮完成,开始下一轮");
}
}
// 启动脚本
mainLoop();
第四步:如何测试与调试
- 保存脚本:将上述代码粘贴到 Hamibot 编辑器,点击保存。
- 运行脚本:在设备列表中选中你的手机,点击运行。
- 观察日志:脚本运行时,Hamibot 界面下方会有日志输出。如果报错,请查看日志中的错误信息。
- 关于筛选选项:代码第 8 步中,我留了注释。因为你说“点击最上层的筛选”,这通常意味着筛选后会弹出一个下拉菜单或新页面。你需要告诉我那个选项的具体文字,或者告诉我它是否会自动加载。
第五步:需要你确认的问题
为了让脚本更精准,请回答以下问题:
- 界面上所有按钮的确切文字是什么?(特别是“筛选”后的那个选项文字)。
- “请求中”的小窗出现时,是否需要点击“确定”关闭,还是自动消失?(如果是自动消失,上面的代码已经处理;如果需要点击,需增加点击逻辑)。
- 脚本运行过程中,如果出现意外情况(比如找不到按钮),你是希望它停止,还是重试一次?
请先尝试按照上述步骤操作,并回复我上述问题的答案,我会帮你优化代码。