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

使用find_elements和get_attribute遇not attached错误,如何通过单次请求解决

问题原因

你遇到的not attached错误本质是StaleElementReferenceException:原写法先获取所有匹配的li元素实例存到内存,再逐个调用get_attribute读取属性,中间如果页面DOM发生动态更新(比如会话列表刷新、元素重渲染),已经拿到的元素引用就会和DOM脱离,调用属性方法就会报错。

推荐解决方案

方案1:JavaScript批量提取(最优,兼容性最好)

直接调用浏览器原生JS完成全量属性查询,整个过程在浏览器侧执行,不需要持有元素引用,完全规避元素失效问题:

dialogs = self.execute_script("""
  return Array.from(document.querySelectorAll('ul#im_dialogs li.nim-dialog_unread'))
    .map(item => item.dataset.listId)
""")

方案2:XPath直接定位属性节点

如果你更习惯用XPath语法,可以直接在路径末尾指定要提取的属性,一次性拿到所有属性节点后读取值即可:

attr_list = self.find_elements_by_xpath('//ul[@id="im_dialogs"]/li[contains(@class, "nim-dialog_unread ")]/@data-list-id')
dialogs = [attr.text for attr in attr_list]

注意:部分旧版本Selenium对属性节点的查找支持有限,如果遇到不生效的情况优先使用方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:06:02