如何获取手机界面上面的数字文本
第 1 条补充
· 2 天前
等待页面跳转之后再执行接下来的代码
第 2 条补充
· 2 天前
等待跳转下一个页面并且判断跳转的页面文字是什么
回答
要获取手机界面上的数字文本,你可以使用 Hamibot 提供的控件查找和文本提取功能。以下是具体方法:
方法一:通过 text() 查找包含数字的控件
如果界面上的数字是以文本形式显示(如 TextView),你可以使用 text() 或 textMatches() 函数来查找并获取其内容。
// 文档地址 https://docs.hamibot.com/
// 示例:查找屏幕上第一个文本为 "123" 的控件
let obj = text("123").findOne();
if (obj) {
let textValue = obj.text();
toast("找到文本:" + textValue);
} else {
toast("未找到指定文本");
}
方法二:使用正则表达式匹配任意数字
如果你不知道具体的数字,但想获取界面上某个区域或所有数字文本,可以使用正则表达式进行匹配。
// 文档地址 https://docs.hamibot.com/
// 示例:查找第一个纯数字文本的控件
let digitObj = textMatches(/^\d+$/).findOne();
if (digitObj) {
let numberText = digitObj.text();
toast("提取到的数字文本:" + numberText);
} else {
toast("未找到数字文本");
}
方法三:遍历多个可能的数字控件
如果你想获取多个数字控件的内容,可以使用 find() 获取列表后遍历处理。
// 文档地址 https://docs.hamibot.com/
// 示例:查找所有由数字组成的文本
let digitObjs = textMatches(/^\d+$/).find();
if (digitObjs.empty()) {
toast("没有找到数字文本");
} else {
for (let i = 0; i < digitObjs.size(); i++) {
let numText = digitObjs.get(i).text();
log("第 " + (i + 1) + " 个数字文本:" + numText);
}
}
注意事项
- 确保已开启无障碍服务,并具有“显示悬浮窗”权限。
- 数字必须是应用中以可访问方式渲染的文本(即能被辅助功能识别)。
- 如果数字是在图片中或通过自定义绘制显示,则无法通过此方式获取。
推荐结合 UI 分析工具(如 Hamibot 的“选择器”功能)先查看目标数字是否可以被识别为文本节点。
补充回答 1
你可以使用 waitForActivity 或 waitForPackage 函数来等待特定页面(Activity)或应用出现,从而确保页面跳转完成后再执行后续代码。
方法一:等待特定 Activity
如果你知道目标页面的 Activity 名称,可以使用:
// 等待某个 Activity 出现,轮询间隔为 200 毫秒
waitForActivity("com.example.ActivityName", 200);
// 页面跳转完成后执行下面的代码
log("已进入目标页面,继续执行");
方法二:等待特定应用界面
如果要等待进入某个应用的界面,可以通过包名等待:
// 等待微信界面出现
waitForPackage("com.tencent.mm", 200);
// 跳转完成,继续操作
log("已进入微信,继续执行后续脚本");
方法三:结合文本等待(适用于无明确 Activity 的情况)
如果无法获取 Activity 或包名,可以等待页面中某个特征文字出现:
// 等待页面中出现“订单详情”文本
text("订单详情").waitFor();
// 确认页面已加载
log("页面跳转完成,开始下一步操作");
建议用法组合
在实际使用中,可先触发跳转动作,再配合等待:
// 示例:点击按钮后等待新页面出现
click(500, 800);
sleep(1000); // 可选:等待动画开始
// 使用三种方式之一等待页面加载完成
waitForPackage("com.taobao.taobao");
// 或者
// waitForActivity("com.taobao.browser.TBBaseActivity");
// 或者
// text("商品详情").waitFor();
log("页面跳转成功,继续执行");
补充回答 2
你可以先通过 waitForActivity 或 text(...).waitFor() 等待页面跳转完成,然后使用 text(...).find() 或遍历控件的方式判断当前页面是否包含特定文字。
以下是一个完整示例:等待跳转到新页面,并识别页面中出现的关键文本:
// 文档地址 https://docs.hamibot.com/
// 步骤1:触发跳转(例如点击某个按钮)
click(500, 600);
sleep(800); // 可选:给跳转留出初始时间
// 步骤2:等待目标页面的特征控件出现(确保跳转完成)
text("商品详情").waitFor(); // 假设目标页有“商品详情”字样
// 步骤3:获取当前页面所有文本控件并提取内容
var allTexts = [];
var widgets = textMatches(/.+/).find(); // 匹配非空文本的所有控件
for (var i = 0; i < widgets.length; i++) {
var textContent = widgets[i].text();
if (textContent && textContent.trim().length > 0) {
allTexts.push(textContent.trim());
}
}
// 步骤4:输出识别到的文字
log("当前页面包含的文本:" + allTexts.join(", "));
// 步骤5:根据关键文本进行判断
if (allTexts.includes("立即购买")) {
log("已进入商品详情页");
} else if (allTexts.includes("登录")) {
log("跳转到了登录页");
} else if (allTexts.some(t => t.includes("订单"))) {
log("进入了订单相关页面");
} else {
log("进入了一个未知页面");
}
提示:
- 使用
text(...).waitFor()能有效阻塞直到页面元素出现,避免空页面误判。 textMatches(/.+/)可匹配所有非空文本控件,适合批量提取信息。- 若你知道要判断的具体文本(如标题),可直接用
text("标题名").exists()来快速判断。
该方法兼容性强,适用于大多数需要“等待跳转 + 内容识别”的场景。
ℹ️ 本回答由 AI 生成,内容仅供参考