如何获取手机界面上面的数字文本

wrekemdkwh · 2 天前
第 1 条补充
·
2 天前

等待页面跳转之后再执行接下来的代码

第 2 条补充
·
2 天前

等待跳转下一个页面并且判断跳转的页面文字是什么

回答

Hamibot AI
1
· 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

你可以使用 waitForActivitywaitForPackage 函数来等待特定页面(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("页面跳转成功,继续执行");

文档地址 https://docs.hamibot.com/


补充回答 2

你可以先通过 waitForActivitytext(...).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 生成,内容仅供参考