auto.waitFor(); // 等待无障碍权限
// 核心配置(仅保留必要项,直接修改即可)
const CONFIG = {
unlock: {
password: "915124", // 锁屏数字密码(4-6位)
retryTimes: 3, // 最大解锁重试次数
delay: 1200, // 系统响应延迟
keyDelay: 300 // 按键间隔
},
app: {
name: "i国网",
package: "com.sgcc.iguowang",
activity: "com.sgcc.iguowang.SplashActivity"
}
};
// 1. 唤醒屏幕
function wakeUp() {
if (!device.isScreenOn()) {
try { device.wakeUp(); }
catch (e) { click(device.width - 30, device.height * 0.2); }
sleep(CONFIG.unlock.delay);
}
}
// 2. 调出密码键盘
function showKeyboard() {
swipe(device.width/2, device.height0.85, device.width/2, device.height0.45, 500);
sleep(CONFIG.unlock.delay * 1.5);
return text("0").exists();
}
// 3. 点击数字键
function clickNum(num) {
const widget = text(String(num)).findOne(CONFIG.unlock.delay);
if (!widget) return false;
click(widget.bounds().centerX(), widget.bounds().centerY());
sleep(CONFIG.unlock.keyDelay);
return true;
}
// 4. 输入密码(返回是否输入成功)
function inputPwd() {
if (!/^\d{4,6}$/.test(CONFIG.unlock.password)) {
toast("密码格式错误");
return false;
}
// 逐位输入密码,若某一位失败则返回false
for (let num of CONFIG.unlock.password.split("")) {
if (!clickNum(num)) {
toast(数字${num}点击失败);
return false;
}
}
sleep(CONFIG.unlock.delay * 2); // 等待系统验证密码
return true; // 密码输入完成即视为成功(绕过控件验证)
}
// 5. 简化解锁验证:密码输入成功=解锁成功(彻底解决鸿蒙识别问题)
function checkUnlock() {
toast("解锁成功!"); // 直接提示解锁成功
console.log("密码输入完成,判定解锁成功");
return true;
}
// 6. 启动i国网
function startApp() {
try {
app.launchApp(CONFIG.app.name);
const isLaunched = waitForActivity(CONFIG.app.activity, 10000);
toast(isLaunched ? "i国网启动成功" : "启动超时");
} catch (e) {
toast(启动失败:${e.message});
}
}
// 主流程(解锁→启动):优化重试逻辑,避免密码输入后反复重试
function main() {
wakeUp();
let unlocked = false;
let pwdInputSuccess = false; // 标记密码是否输入成功
for (let i = 1; i <= CONFIG.unlock.retryTimes; i++) {
console.log(解锁尝试 ${i}/${CONFIG.unlock.retryTimes});
// 仅当密码键盘调出成功时,才尝试输入密码
if (showKeyboard()) {
pwdInputSuccess = inputPwd();
if (pwdInputSuccess && checkUnlock()) {
unlocked = true;
break; // 密码输入成功,直接退出重试循环
}
}
// 未达最大重试次数时,等待后继续
if (i < CONFIG.unlock.retryTimes && !pwdInputSuccess) {
sleep(CONFIG.unlock.delay);
} else {
break; // 密码输入成功但验证(伪)失败,也退出循环
}
}
if (unlocked) {
startApp();
} else if (pwdInputSuccess) {
// 密码输入成功但脚本误判,仍强制启动App
toast("密码输入成功,强制启动i国网");
startApp();
} else {
toast("解锁失败,请手动操作");
}
}
main();
下面添加一段智能识别关闭弹窗的脚本
请你帮我整理好了,我是小白只能靠你了
回答
// 文档地址 https://docs.hamibot.com/
在启动i国网应用后添加这段智能弹窗关闭脚本,可以自动识别并处理常见弹窗:
/**
* 智能识别并关闭弹窗
* @param {number} maxAttempts - 最大尝试次数
* @param {number} interval - 每次检测间隔(ms)
* @returns {boolean} - 是否有弹窗被关闭
*/
function closePopups(maxAttempts = 3, interval = 800) {
let popupClosed = false;
const cancelTexts = ["取消", "关闭", "稍后", "跳过", "不允许", "拒绝", "以后再说", "暂不升级", "X", "x", "×"];
for (var attempt = 1; attempt <= maxAttempts; attempt++) {
console.log("弹窗检测第 " + attempt + " 次");
// 1. 优先尝试点击标准关闭按钮
for (var i = 0; i < cancelTexts.length; i++) {
var textToFind = cancelTexts[i];
try {
if (text(textToFind).exists()) {
var widget = text(textToFind).findOnce();
if (widget) {
var bounds = widget.bounds();
click(bounds.centerX(), bounds.centerY());
console.log("已点击【" + textToFind + "】按钮");
popupClosed = true;
sleep(interval);
break;
}
}
} catch (e) {
// 忽略单个文本查找错误
}
}
// 2. 如果标准按钮未找到,尝试点击屏幕边缘区域
if (!popupClosed) {
var screenWidth = device.width;
var screenHeight = device.height;
// 尝试点击左上角区域(有时可关闭弹窗)
click(screenWidth * 0.1, screenHeight * 0.1);
sleep(200);
// 尝试点击右上角区域(X按钮常见位置)
click(screenWidth * 0.9, screenHeight * 0.1);
sleep(200);
// 检查是否已关闭(简单检测是否有确认按钮)
if (!text("确定").exists() && !text("好的").exists()) {
popupClosed = true;
}
if (popupClosed) {
sleep(interval);
}
}
// 3. 如果仍检测到弹窗特征,继续尝试
if (!popupClosed && attempt < maxAttempts) {
sleep(interval);
} else {
break;
}
}
if (popupClosed) {
toast("已处理可能的弹窗");
}
return popupClosed;
}
将以下代码添加到startApp()函数调用之后:
// 7. 智能关闭弹窗
function handlePopups() {
sleep(2000); // 等待应用完全启动
closePopups(4, 600); // 增加尝试次数,缩短间隔
// 二次确认:检查是否还有遮挡界面的弹窗
if (text("确定").exists() || id("confirm").exists()) {
clickIfExist("取消");
}
}
// 修改startApp函数,使其返回是否成功启动
function startApp() {
try {
app.launchApp(CONFIG.app.name);
var isLaunched = waitForActivity(CONFIG.app.activity, 10000);
toast(isLaunched ? "i国网启动成功" : "启动超时");
return isLaunched;
} catch (e) {
toast("启动失败:" + e.message);
return false;
}
}
// 修改主流程
function main() {
wakeUp();
var unlocked = false;
var pwdInputSuccess = false;
for (var i = 1; i <= CONFIG.unlock.retryTimes; i++) {
console.log("解锁尝试 " + i + "/" + CONFIG.unlock.retryTimes);
if (showKeyboard()) {
pwdInputSuccess = inputPwd();
if (pwdInputSuccess && checkUnlock()) {
unlocked = true;
break;
}
}
if (i < CONFIG.unlock.retryTimes && !pwdInputSuccess) {
sleep(CONFIG.unlock.delay);
} else {
break;
}
}
if (unlocked) {
if (startApp()) {
handlePopups(); // 添加弹窗处理
}
} else if (pwdInputSuccess) {
toast("密码输入成功,强制启动i国网");
if (startApp()) {
handlePopups(); // 添加弹窗处理
}
} else {
toast("解锁失败,请手动操作");
}
}
这段弹窗处理脚本具有以下特点:
- 优先识别"取消"、"关闭"等常见按钮文本
- 自动尝试点击右上角X按钮位置
- 对于无法通过文本识别的弹窗,尝试点击屏幕边缘区域关闭
- 设置合理的重试机制,避免无限循环
- 与你的脚本结构兼容,特别适配鸿蒙系统场景
注意:如果遇到特定于"i国网"应用的特殊弹窗,可以根据实际界面元素调整cancelTexts数组中的文本内容。
补充回答 1
Hamibot新手入门指南
作为Hamibot小白,这份指南将帮助你快速上手使用这个强大的自动化工具。
1. 安装Hamibot
首先需要在你的设备上安装Hamibot应用:
- Android设备:从Hamibot官网下载APK安装包
- 如果下载失败,请将下载链接复制到浏览器中直接下载安装
2. 基本概念
Hamibot是一个自动化脚本平台,让你可以:
- 编写脚本自动完成手机操作
- 通过API远程控制脚本执行
- 集成AI能力(如OpenAI)增强脚本功能
3. 获取API令牌
- 打开Hamibot应用
- 进入"账号"或"设置"页面
- 找到"API令牌"选项
- 创建新令牌(以hmp_开头的字符串)
4. 常用API操作示例
查询API使用配额
// 文档地址 https://docs.hamibot.com/
var res = http.request('https://api.hamibot.com/v1/usage', {
method: 'GET',
headers: {
authorization: '你的令牌(hmp开头)',
},
});
log(res.body.json());
运行脚本
// 文档地址 https://docs.hamibot.com/
http.request('https://api.hamibot.com/v1/scripts/你的脚本_id/run', {
method: 'POST',
headers: {
authorization: '你的令牌(hmp开头)',
},
body: JSON.stringify({
devices: ["设备ID"],
vars: {"key": "value"} // 脚本配置参数
}),
});
调用OpenAI功能
// 文档地址 https://docs.hamibot.com/
http.request('https://api.hamibot.com/v1/openai/chatcmpl', {
method: 'POST',
contentType: 'application/json',
headers: {
authorization: '你的令牌(hmp开头)',
},
body: JSON.stringify({
messages: [{
role: 'user',
content: '你好'
}]
}),
});
5. 注意事项
- 每次调用OpenAI接口消耗3金币
- API调用有配额限制,可通过订阅提升配额
- JavaScript代码需兼容Rhino 1.7.15引擎(避免使用箭头函数等新特性)
- 脚本ID可以在Hamibot应用的脚本详情页面找到
6. 常见问题
Q: 如何查看脚本ID?
A: 在Hamibot应用中打开脚本详情页面,URL中包含的字符串就是脚本ID
Q: 金币用完了怎么办?
A: 可以在Hamibot应用内查看订阅选项,购买更多配额
Q: API返回422错误是什么意思?
A: 表示参数错误,请检查请求参数是否符合文档要求
希望这份指南能帮助你顺利开始使用Hamibot!如果你有具体问题,可以告诉我你想实现什么功能,我会提供针对性的建议。