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

如何在Selenium中匹配属性名前缀为_ngcontent-且后缀为-63的元素以提取目标td?

如何在Selenium中匹配属性名前缀为_ngcontent-且后缀为-63的元素以提取目标td?

你遇到的这个问题在Angular应用里挺常见的——框架自动生成的_ngcontent-xxx-xx这类属性,中间的随机字符确实会给元素定位添不少麻烦。你之前的XPath思路方向是对的,但确实搞错了匹配对象:你需要匹配的是属性名的前缀和后缀,而不是属性值,所以之前的写法自然匹配不到。

给你两个可行的解决方案:

方案一:匹配符合规则的属性名

用XPath遍历元素的所有属性,判断属性名是否满足前缀为_ngcontent-、后缀为-63的规则,对应的代码如下:

By.xpath("//td[@*[starts-with(name(), '_ngcontent-') and ends-with(name(), '-63')]]");

这里的逻辑拆解一下:

  • //td:先筛选出页面上所有的td元素
  • @*:遍历当前td元素的所有属性
  • starts-with(name(), '_ngcontent-'):检查属性名是否以_ngcontent-开头
  • ends-with(name(), '-63'):同时检查属性名是否以-63结尾
  • 整个表达式的作用就是:找到所有拥有符合该属性名规则的td元素

方案二:基于业务标识定位(更推荐)

其实依赖Angular生成的这类框架属性并不是最佳实践,因为它们会随着构建版本、组件结构变化而改变。如果你的目标td有固定的业务特征(比如文本内容、自定义class),直接用这些特征定位会更稳定:

  • 定位包含文本1的目标td:
By.xpath("//td[span/text()='1']");
  • 定位包含CKH HOLDINGS且子元素span带有noBr类的td:
By.xpath("//td[span[@class='noBr' and text()='CKH HOLDINGS']]");

备注:内容来源于stack exchange,提问作者pebble unit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:04:36