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

Selenium C#:如何通过部分Name定位元素?

解决通过部分匹配name属性定位元素的问题

嘿,我看你在尝试用部分匹配name属性定位元素时踩坑了,这问题我之前也碰到过!咱们先说说你代码里的问题:

你第一段代码里把XPath的语法//*[contains('Price')]直接传给By.Name()是完全错误的——By.Name()方法只接受精确匹配的name属性字符串,根本不支持XPath表达式,所以肯定找不到元素。第二段没写完的代码估计也是类似的逻辑错误,才会抛出编译问题。

下面给你两种靠谱的解决方案,都是能实现部分匹配name属性的:

方法一:用XPath精准定位

直接使用XPath表达式,明确指定匹配name属性包含"Price"的元素,注意要加上前缀.来限定在父元素(也就是你找到的第一个x-container)的子节点范围内查找:

var element = Driver.FindElements(By.ClassName("x-container")).First()
                    .FindElement(By.XPath(".//*[contains(@name, 'Price')]"));

如果需要忽略大小写匹配,可以把表达式改成:

.By.XPath(".//*[contains(lower-case(@name), 'price')]")

方法二:用CSS选择器更简洁

CSS选择器里用[name*='Price']就能匹配name属性包含"Price"的元素,写法更清爽,性能也不错:

var element = Driver.FindElements(By.ClassName("x-container")).First()
                    .FindElement(By.CssSelector("[name*='Price']"));

最后再给你两个小提醒:

  • 先确认Driver.FindElements(By.ClassName("x-container"))确实能找到元素,不然First()会直接抛出异常,建议改成FirstOrDefault()后再判断是否为null,避免崩溃。
  • 用浏览器F12开发者工具检查目标元素的name属性,确保确实包含"Price",别犯拼写错误或者大小写不匹配的低级错误哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:21:05