You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用find_elements返回结果的.text会重新执行该函数吗?为何出现StaleElement异常

问题1解答

  • 访问元素.text属性不会重新运行find_elements函数。find_elements执行后返回的是一组指向当前UI节点的引用对象,并不是元素的永久副本。
  • 第一行代码执行时,对应类名的UI节点还处于可用状态,因此可以正常拿到引用不会触发异常。后续触发StaleElementReferenceException是因为在拿到引用到访问属性的间隔中,App UI发生了重绘、节点更新或页面刷新,原有引用指向的节点已经被销毁,所以访问任何元素属性都会抛出该异常。

问题2解答

  • 该解决思路是正确的:需要在拿到元素引用的第一时间就提取文本存入普通列表,普通列表的内容不会随UI更新失效。
  • 报错原因是find_elements返回的是WebElement对象组成的列表,.text是单个WebElement对象的属性,无法直接作用于列表。
  • 可行实现方案如下:
# 方法1:直接遍历提取文本,适合UI相对稳定的场景
chatblocks = driver2.find_elements_by_class_name("android.widget.TextView")
chat_text_list = [block.text for block in chatblocks]
# 取倒数第三个文本直接操作普通列表即可
chatblocktext = chat_text_list[-3]

# 方法2:加异常捕获适配UI可能实时变动的场景
chat_text_list = []
for block in driver2.find_elements_by_class_name("android.widget.TextView"):
    try:
        chat_text_list.append(block.text)
    except StaleElementReferenceException:
        # 遇到失效节点可跳过或按需求填充默认值
        chat_text_list.append("")

内容的提问来源于stack exchange,提问作者HFOrangefish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 08:39:03