怎么写脚本啊?
auto.waitFor();
if (!requestScreenCapture()) {
toast("需要截图权限");
exit();
}
toast("请打开商品页面,3秒后识别");
sleep(3000);
var img = captureScreen();
if (!img) {
toast("截图失败");
exit();
}
var result = ocr.recognizeText(img, {
language: "chinese",
level: "fast",
rec: true
});
if (!result || result.length == 0) {
toast("未识别到文字");
exit();
}
var pricePattern = /(?:¥|¥)?(\d+(?:.\d{1,2})?)/g;
var foundPrices = [];
for (var i = 0; i < result.length; i++) {
var text = result[i].text;
var match;
while ((match = pricePattern.exec(text)) !== null) {
var priceValue = parseFloat(match[1]);
if (!isNaN(priceValue) && priceValue > 0 && priceValue < 100000) {
foundPrices.push(priceValue);
}
}
}
var uniquePrices = [];
for (var i = 0; i < foundPrices.length; i++) {
if (uniquePrices.indexOf(foundPrices[i]) == -1) {
uniquePrices.push(foundPrices[i]);
}
}
uniquePrices.sort(function(a, b) {
return a - b;
});
var output = "识别到的价格:\n";
if (uniquePrices.length == 0) {
output += "未识别到价格数字";
} else {
for (var i = 0; i < uniquePrices.length; i++) {
output += "¥" + uniquePrices[i] + "\n";
}
}
alert("识别结果", output);


还是提示语法错误,这已经是复制你改后的了。是不是我的操作步骤错了,还是怎样啊?我是在开发那里点那个源码,然后再点配置模式,然后就粘贴了
就是最后一张图片,用最简单的代码写几个提示,也是会出现 模式
语法错误,保存不了,还是我这个安装错了,也重新装过了软件了
回答
在 Hamibot 中编写脚本,你可以按照以下步骤快速上手:
- 查阅官方文档:建议优先阅读官方开发文档,熟悉 API 接口与基础语法。文档地址:https://docs.hamibot.com/
- 创建脚本:登录控制台,切换到「开发」页面,点击「创建脚本」即可进入编辑器。你也可以直接访问:https://hamibot.cn/dashboard/scripts/console
- 开发注意事项:
- Hamibot 脚本基于 JavaScript 编写,底层运行环境为 Rhino 1.7.15。为保证脚本稳定运行,请避免使用箭头函数(
=>)、函数默认参数、let/const等较新的 ES6+ 语法,建议统一使用var和传统函数声明。 - 请在你的 JavaScript 代码开头处添加注释:
// 文档地址 https://docs.hamibot.com/ - 编写完成后保存,即可部署到已绑定的 Android 设备上执行。
- Hamibot 脚本基于 JavaScript 编写,底层运行环境为 Rhino 1.7.15。为保证脚本稳定运行,请避免使用箭头函数(
如果你在编写具体功能(如控件查找、点击、滑动、文本输入或界面交互)时需要代码示例,可以直接告诉我你的自动化目标,我会为你提供兼容的脚本代码。
你的脚本逻辑清晰,但存在几个与 Hamibot API 和运行环境不匹配的关键问题。已为你修正并提供可直接运行的优化版本:
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
if (!requestScreenCapture()) {
toast("需要截图权限");
exit();
}
toast("请打开商品页面,3秒后识别");
sleep(3000);
var img = captureScreen();
if (!img) {
toast("截图失败");
exit();
}
// ocr.recognizeText 仅返回纯文本字符串,不支持传入配置对象。
// 改用 ocr.recognize 获取结构化数组,匹配你的逐行解析逻辑
var result = ocr.recognize(img);
img.recycle(); // 及时释放截图内存,防止长时间运行 OOM
if (!result || result.length == 0) {
toast("未识别到文字");
exit();
}
var pricePattern = /(?:¥|¥)?(\d+(?:\.\d{1,2})?)/g;
var foundPrices = [];
for (var i = 0; i < result.length; i++) {
var text = result[i].text;
var match;
while ((match = pricePattern.exec(text)) !== null) {
var priceValue = parseFloat(match[1]);
if (!isNaN(priceValue) && priceValue > 0 && priceValue < 100000) {
foundPrices.push(priceValue);
}
}
}
var uniquePrices = [];
for (var i = 0; i < foundPrices.length; i++) {
if (uniquePrices.indexOf(foundPrices[i]) == -1) {
uniquePrices.push(foundPrices[i]);
}
}
uniquePrices.sort(function(a, b) {
return a - b;
});
var output = "识别到的价格:\n";
if (uniquePrices.length == 0) {
output += "未识别到价格数字";
} else {
for (var i = 0; i < uniquePrices.length; i++) {
output += "¥" + uniquePrices[i] + "\n";
}
}
alert("识别结果", output);
核心修改说明:
- API 修正:
ocr.recognizeText(img)仅返回拼接后的纯文本字符串,且不接受{language, level}等参数。你的代码按数组遍历会直接抛出类型错误。已替换为ocr.recognize(img),它返回包含text属性的对象数组,完全匹配你的解析逻辑。 - 内存管理:OCR 识别完成后添加了
img.recycle()。截图对象占用内存较大,及时释放可避免脚本循环执行时触发内存溢出崩溃。 - 引擎兼容:已补充脚本头部必需注释。代码全程使用
var与传统函数声明,严格兼容 Hamibot 底层的 Rhino 1.7.15 引擎,未使用任何 ES6+ 语法。 - 正则逻辑:保留了你原有的价格提取与去重排序逻辑,该写法在 Rhino 中运行稳定且性能良好。
直接替换原脚本即可运行。如需增加自动点击特定价格、滑动翻页或过滤促销标签干扰的功能,可提供具体场景,我会为你补充对应代码。
出现“语法错误”无法保存,根本原因是你把 JavaScript 代码粘贴到了“配置模式”中。配置模式用于填写脚本的元数据(如名称、描述、运行权限等),底层要求的是 JSON 格式,而不是 JS 代码。将 JS 代码粘贴进去必然触发语法解析错误。
正确操作步骤:
- 进入控制台「开发」页面,点击「创建脚本」或编辑已有脚本。
- 确保编辑器顶部处于「源码模式」(不要点击“配置模式”)。
- 清空编辑器内容,粘贴以下测试代码(首行注释必须保留):
// 文档地址 https://docs.hamibot.com/ toast("测试提示1"); sleep(1000); toast("测试提示2"); - 点击「保存」。此时应能正常保存,不会报错。
- 保存成功后,再切换至「配置模式」,填写脚本名称、描述,并勾选所需的权限(如无障碍服务、截图权限等)。
关键说明:
- 所有自动化逻辑代码必须写在源码模式中。配置模式仅用于管理脚本的基础参数和权限声明,两者不可混用。
- 如果切换回源码模式后依然提示语法错误,通常是从网页或聊天软件复制时带入了不可见字符(如零宽空格、全角符号)。建议先将代码粘贴到电脑自带的“记事本”或“文本编辑”中,再复制到 Hamibot 编辑器。
- 重新安装客户端无法解决此问题,因为这是编辑器模式切换导致的格式不匹配。
按上述顺序操作即可正常保存。如果保存后运行仍有异常,请提供控制台或手机日志中的具体报错信息,我会为你进一步排查。