如何提取HTML中包含指定CSS值的所有元素ID并存入列表
问题根源
你当前代码存在两个核心错误,才会导致重复获取同一个ID:
- 统计匹配元素总数时错误使用了
By.TagName("My_Value"),TagName对应的是HTML原生标签名(比如div、p、button),你的统计逻辑本身就和要匹配的带My_Value样式类的元素不符 - 循环内每次都调用
driver.FindElement(By.CssSelector("div.My_Value")),这个API的默认特性就是返回第一个匹配到的元素,所以不管循环执行多少次,每次取的都是同一个首个元素,自然只会重复返回第一个ID
修复方案
不需要单独统计数量再循环,直接一次性获取所有匹配的元素集合,遍历集合逐个提取ID即可:
List<string> MyList = new List<string>(); // 一次性获取所有带有My_Value样式类的div元素集合 var targetElements = driver.FindElements(By.CssSelector("div.My_Value")); foreach(var element in targetElements) { // 逐个提取元素ID加入列表 string id = element.GetAttribute("id"); // 可选判断:过滤掉没有设置ID的元素,避免列表存入空值 if(!string.IsNullOrEmpty(id)) { MyList.Add(id); } }
简化写法
如果你的项目支持Linq语法,可以直接用链式调用一步拿到结果:
List<string> MyList = driver.FindElements(By.CssSelector("div.My_Value")) .Select(element => element.GetAttribute("id")) .Where(id => !string.IsNullOrEmpty(id)) .ToList();
内容的提问来源于stack exchange,提问作者lufekon
相关产品推荐
相关产品推荐

