// 文档地址:https://docs.hamibot.com/
// 新增功能:获取页面中的所有文本信息
// 修改说明:在launch后增加等待逻辑,确保获取目标APP页面文本而非Hamibot界面
// 方法二:通过包名
if (launch("com.ZlBeM.gyL6X")) {
toast("打开成功");
// 等待目标APP成为前台
try {
waitForPackage("com.ZlBeM.gyL6X");
// 等待页面完全加载
sleep(2000);
toast("页面加载完成,开始获取文本");
} catch (e) {
toast("等待APP启动超时:" + e.message);
exit();
}
} else {
toast("打开失败");
exit();
}
我希望打开应用之后,获取应用界面的所有文字应该怎么做
那我应该怎么看到所有文字内容呢? 好像在应用界面也没有显示出来
回答
文档地址:https://docs.hamibot.com/
要获取应用界面中的所有文字,你可以结合 launch
和 waitForPackage
来确保目标应用已经启动并处于前台状态。接着可以使用 Hamibot 提供的 UI 查找功能来获取界面上的所有文本信息。
以下是完整示例代码:
// 方法二:通过包名启动应用并获取界面文本
if (launch("com.ZlBeM.gyL6X")) {
toast("打开成功");
// 等待目标APP成为前台
try {
waitForPackage("com.ZlBeM.gyL6X");
// 等待页面完全加载
sleep(2000);
toast("页面加载完成,开始获取文本");
// 获取当前界面中所有的文本信息
var texts = className("TextView").find();
if (texts && texts.length > 0) {
for (var i = 0; i < texts.length; i++) {
log(texts[i].text());
}
} else {
toast("未找到任何文本内容");
}
} catch (e) {
toast("等待APP启动超时:" + e.message);
exit();
}
} else {
toast("打开失败");
exit();
}
解释:
launch("com.ZlBeM.gyL6X")
启动指定包名的应用。waitForPackage("com.ZlBeM.gyL6X")
确保该应用处于前台。sleep(2000)
给应用一定时间加载界面。className("TextView").find()
查找当前界面中所有TextView
控件(通常是显示文本的地方)。- 遍历输出每个 TextView 的文本内容。
请根据你的实际需求调整控件类型或选择器条件。
补充回答 1
文档地址:https://docs.hamibot.com/
如果你在应用界面没有看到任何文本输出,可能是由于以下原因:
1. 确认获取的控件是否在屏幕上可见
有些 TextView
控件可能被设置为 不可见(gone / invisible) 或者位于屏幕之外(超出可视区域),你可以添加过滤条件来确保只获取屏幕上可见的控件:
var texts = className("TextView").visibleToUser(true).find();
这样可以过滤掉不在屏幕可视范围内的控件。
2. 查看日志输出
你当前使用的 log()
函数会将内容输出到 Hamibot 的日志系统中。要查看这些日志,请:
- 打开 Hamibot 应用;
- 进入“运行日志”页面;
- 查看你的脚本执行过程中输出的内容。
3. 使用 toast()
显示部分结果
由于日志信息较多时可能不易查看,建议你先限制输出数量,例如打印前几个文本内容:
for (var i = 0; i < Math.min(texts.length, 5); i++) {
toast("文本内容:" + texts[i].text());
sleep(1000); // 延迟显示,方便查看
}
4. 检查控件是否存在
有时候界面上可能并没有 TextView
控件,或者控件类型不同(比如 Button
、EditText
等也包含文本)。你可以尝试获取更多类型的控件:
var allTexts = [];
var textViews = className("TextView").find();
var buttons = className("Button").find();
var editTexts = className("EditText").find();
// 合并所有文本内容
function addTexts(arr) {
for (var i = 0; i < arr.length; i++) {
allTexts.push(arr[i].text());
}
}
addTexts(textViews);
addTexts(buttons);
addTexts(editTexts);
// 输出去重后的文本内容
allTexts = uniqueArray(allTexts);
toast("共找到 " + allTexts.length + " 条不同文本");
log(allTexts.join("\n"));
// 辅助函数:数组去重
function uniqueArray(arr) {
return arr.filter((value, index, self) => self.indexOf(value) === index);
}
5. 使用布局分析工具验证
Hamibot 提供了“布局分析”功能,可以实时查看当前界面的控件结构:
- 在 Hamibot 主界面点击右上角 “≡” 菜单;
- 选择 “布局分析”;
- 切换到目标应用界面;
- 查看界面上是否有文本控件以及它们的类名和属性。
总结
你现在需要做的步骤是:
- 添加
.visibleToUser(true)
过滤屏幕外控件; - 使用
toast()
显示部分内容,确认是否获取成功; - 查看 Hamibot 日志获取完整输出;
- 使用布局分析工具验证界面结构。
如果仍然无法获取内容,可能是该应用使用了自定义控件或绘制方式(如 Canvas 绘图),这种情况下 OCR 文字识别是一个替代方案。需要我提供 OCR 获取屏幕文字的方法吗?