C#如何获取href不同但类名相同的cmc-link类第二行元素的值
你当前使用的GetElementById方法仅能匹配页面中id属性为指定值的唯一元素,无法筛选class属性匹配的元素,也不能定位到第二个符合条件的目标元素,正确实现方式如下:
基础实现(无需额外依赖)
// 筛选所有class为cmc-link的元素 List<HtmlElement> cmcLinks = new List<HtmlElement>(); foreach (HtmlElement element in webBrowser2.Document.All) { if (element.GetAttribute("className") == "cmc-link") { cmcLinks.Add(element); } } // 先判断是否存在至少2个符合条件的元素,避免索引越界报错 if (cmcLinks.Count >= 2) { // 索引从0开始计数,第二个元素对应下标为1 textBox2.Text = cmcLinks[1].InnerText?.Trim() ?? string.Empty; }
简化实现(需引用LINQ)
如果项目允许使用LINQ,可以简化筛选逻辑:
using System.Linq; var cmcLinks = webBrowser2.Document.All.Cast<HtmlElement>() .Where(e => e.GetAttribute("className") == "cmc-link") .ToList(); if (cmcLinks.Count >= 2) { textBox2.Text = cmcLinks[1].InnerText?.Trim() ?? string.Empty; }
注意事项
- DOM的
class属性在C# WebBrowser控件中对应的属性名为className,需要通过GetAttribute("className")获取 - 建议保留列表长度校验逻辑,避免页面结构变化导致的索引越界异常
- 可以按需对取出的文本做数值转换、格式调整等二次处理
内容的提问来源于stack exchange,提问作者Nelson Furtado
相关产品推荐
相关产品推荐

