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

C# Selenium如何按style位置值范围查找元素?

问题解决与解答

一、你的XPath错误原因及修正

你原来的XPath用contains(@style,'top:<200')和contains(@style,'top:>100')完全不匹配实际场景——你的style属性里并没有<或>符号,只有类似top:131;的数值格式,所以根本找不到任何元素。

正确的做法是从style属性中提取top的数值再做范围比较,对应的XPath如下:

driver1.FindElements(By.XPath(@"//area[contains(@class,'minimap') and 
    number(substring-before(substring-after(@style, 'top:'), ';')) > 100 and 
    number(substring-before(substring-after(@style, 'top:'), ';')) < 200]"));

XPath逻辑说明:

  • substring-after(@style, 'top:'):提取top:之后的字符串部分
  • substring-before(..., ';'):提取上述结果中;之前的数值部分
  • number(...):把提取到的字符串转换成数字,方便做大小比较
  • 直接定位area元素(比//*更精准),同时保留contains(@class,'minimap')的过滤条件

二、C# Selenium中能否按位置值范围查找元素?

可以,有两种常用方式:

方式1:直接用XPath在定位阶段筛选(推荐)

就是上面给出的XPath写法,直接在定位时完成数值范围过滤,执行效率更高。

方式2:先获取所有目标元素,再在C#代码中筛选

如果XPath的字符串处理逻辑对你来说太复杂,也可以先拿到所有符合class的元素,再遍历提取top值做判断:

using System.Collections.Generic;

// 先获取所有带minimap类的area元素
var allMinimapAreas = driver1.FindElements(By.CssSelector("area.minimap"));
var filteredElements = new List<IWebElement>();

foreach (var element in allMinimapAreas)
{
    string styleAttr = element.GetAttribute("style");
    // 提取top数值,处理可能存在的空格
    string topValueStr = styleAttr.Split(new[] { "top:" }, System.StringSplitOptions.None)[1]
                                  .Split(';')[0]
                                  .Trim();
    
    if (int.TryParse(topValueStr, out int topValue))
    {
        if (topValue > 100 && topValue < 200)
        {
            filteredElements.Add(element);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:18:11