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

如何使用Selenium定位Angular的_ngcontent动态属性元素(Python)

解决Selenium定位Angular _ngcontent属性元素的问题

第一步:定位所有目标span元素

Angular生成的_ngcontent-xxx-c324是样式隔离用的属性,你之前的代码错误匹配了文本内容,正确做法是通过XPath捕获属性名以_ngcontent-开头的span元素:

elements = drv.find_elements(By.XPATH, '//span[starts-with(name(), "_ngcontent-")]')

这个XPath会命中所有带_ngcontent-xxx-c324类属性的span,不管中间动态变化的xxx部分是什么。

第二步:按_ngcontent属性分组文本

用字典按属性名分组存储对应文本,核心是提取每个元素的_ngcontent-xxx-c324属性名作为分组键:

from collections import defaultdict

# 初始化分组容器
grouped_texts = defaultdict(list)

for elem in elements:
    # 遍历元素属性,找到_ngcontent开头的属性名
    ng_attr_name = None
    for attr in elem.get_property('attributes'):
        if attr['name'].startswith('_ngcontent-'):
            ng_attr_name = attr['name']
            break
    # 将非空文本加入对应分组
    if ng_attr_name and elem.text.strip():
        grouped_texts[ng_attr_name].append(elem.text.strip())

# 输出分组结果
for attr_key, text_list in grouped_texts.items():
    print(f"[{attr_key}] 对应的文本列表:")
    for text in text_list:
        print(f"  - {text}")

关键细节

  • 不要硬编码完整的_ngcontent-xxx-c324属性名,xxx是会话动态生成的,每次登录都会变化,用starts-with和遍历属性的方式能适配所有场景。
  • 用defaultdict可以自动处理新分组的创建,避免手动判断键是否存在。
  • 过滤空文本,避免分组里出现无效内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:30:12