您的位置:首页 > 房产 > 建筑 > 汕头建设银行_域名怎么做网站_百度竞价怎么操作_全网关键词指数查询

汕头建设银行_域名怎么做网站_百度竞价怎么操作_全网关键词指数查询

2025/5/15 9:21:34 来源:https://blog.csdn.net/qq_42069296/article/details/146419653  浏览:    关键词:汕头建设银行_域名怎么做网站_百度竞价怎么操作_全网关键词指数查询
汕头建设银行_域名怎么做网站_百度竞价怎么操作_全网关键词指数查询
import uiautomator2 as u2
import xml.etree.ElementTree as ET# 连接设备
d = u2.connect()# 获取屏幕的 XML 结构
xml_str = d.dump_hierarchy()  # 返回 XML 字符串# 解析 XML
root = ET.fromstring(xml_str)# 提取所有 text 属性
all_texts = []
for elem in root.iter():text = elem.attrib.get("text")if text and text.strip() != "":all_texts.append(text.strip())print("屏幕所有文本:", all_texts)

运行结果

D:\1_Python3.8\python.exe D:\2_PythonProject\Multilingual_comparison\text_extraction2.py 
屏幕所有文本: ['推荐', '电影', '电视', '少儿', '歌名', '歌手', '20°', '20°', '75米']进程已结束,退出代码为 0

常见问题

1. ‌文本缺失或截断
  • 原因‌:XML 中可能记录完整文本,但屏幕显示因布局限制被截断(如 ellipsize 属性)‌16。
  • 解决‌:直接通过控件对象获取完整文本:
    element = d(textStartsWith="部分文本")
    full_text = element.get_text()
    

  • 如果希望在获取文本时,同时获取文本的字体、粗细、大小

  • 从 XML 属性中提取(部分设备/系统支持)

  • import uiautomator2 as u2
    import xml.etree.ElementTree as ETd = u2.connect()
    #通过 dump_hierarchy() 获取当前屏幕的 XML 结构,确保数据为最新
    xml_str = d.dump_hierarchy()  # 获取 实时XML 字符串
    root = ET.fromstring(xml_str)elements_info = []
    for elem in root.iter():text = elem.attrib.get("text", "").strip()# if text != "":# print(text)if not text:continue# 获取字体大小(单位:sp/dp,需转换)text_size = elem.attrib.get("textSize")# 获取字体样式(bold/italic等)text_style = elem.attrib.get("textStyle", "")# 获取字体名称(通常为系统默认,如 sans-serif、monospace)font_family = elem.attrib.get("fontFamily", "system-default")elements_info.append({"text": text,"font_size": text_size,"font_weight": "bold" if "bold" in text_style else "normal","font_family": font_family})print(elements_info)

    运行结果

  • D:\1_Python3.8\python.exe D:\2_PythonProject\Multilingual_comparison\text_extraction2.py 
    [{'text': '推荐', 'font_size': None, 'font_weight': 'normal', 'font_family': 'system-default'}, {'text': '电影', 'font_size': None, 'font_weight': 'normal', 'font_family': 'system-default'}, {'text': '电视', 'font_size': None, 'font_weight': 'normal', 'font_family': 'system-default'}, {'text': '少儿', 'font_size': None, 'font_weight': 'normal', 'font_family': 'system-default'}, {'text': '歌名', 'font_size': None, 'font_weight': 'normal', 'font_family': 'system-default'}, {'text': '歌手', 'font_size': None, 'font_weight': 'normal', 'font_family': 'system-default'}, {'text': '20°', 'font_size': None, 'font_weight': 'normal', 'font_family': 'system-default'}, {'text': '20°', 'font_size': None, 'font_weight': 'normal', 'font_family': 'system-default'}, {'text': '79米', 'font_size': None, 'font_weight': 'normal', 'font_family': 'system-default'}]进程已结束,退出代码为 0

  • 通过上述方法,可稳定获取 Android 当前页面的实时文本数据,适用于自动化测试、数据采集等场景‌

  • 注意事项

  • XML 属性的局限性

    • textSize 可能以像素(px)或设备无关像素(dp/sp)为单位,需手动转换。
    • fontFamily 通常只返回系统默认值(如 sans-serif),自定义字体可能无法获取。

    • 通过 Android 的 XML 布局或 UI 层次结构获取的文本内容,‌可能无法与屏幕实际显示完全一致‌。以下是可能导致差异的典型场景及原因:
    • 一、动态内容修改导致不一致

    • 运行时文本更新
      XML 中的文本可能是初始值,但代码中通过 setText() 动态修改了显示内容(如根据用户输入、网络请求更新文字),此时 XML 结构不会实时同步‌4。
      示例:XML 中定义按钮文本为“提交”,但代码中根据状态改为“已提交”。

    • 多语言/资源动态加载
      若应用支持多语言,实际显示的文字可能基于当前系统语言动态加载资源文件(如 strings.xml),而 XML 仅记录默认语言的文本‌4。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com