如何在C#中使用Selenium从列表的多个div元素中提取值并存入列表
解决方案
步骤1:安装依赖库
优先使用NuGet安装HtmlAgilityPack,这是.NET生态下最成熟的HTML节点解析库,比正则匹配容错性更高,可适配各类不规范的HTML结构。
步骤2:核心实现代码
using HtmlAgilityPack; using System.Collections.Generic; using System.Linq; public List<string> ExtractOrderNumbers(string htmlContent) { var orderNumbers = new List<string>(); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(htmlContent); // 筛选所有class为spareValue的div节点,返回空集合避免空引用异常 var spareDivs = doc.DocumentNode.SelectNodes("//div[contains(@class, 'spareValue')]") ?? Enumerable.Empty<HtmlNode>(); foreach (var div in spareDivs) { // 获取当前div下的label节点 var labelNode = div.SelectSingleNode(".//span[contains(@class, 'label')]"); if (labelNode == null) continue; // 仅处理OrderNumber对应的节点 if (labelNode.InnerText.Trim() == "OrderNumber:") { var partNumNode = div.SelectSingleNode(".//span[contains(@class, 'PartNumber')]"); if (partNumNode != null) { orderNumbers.Add(partNumNode.InnerText.Trim()); } } } return orderNumbers; }
补充说明
- 若需要将编号转为数值类型,可在添加到列表时用
int.TryParse做校验转换,避免格式错误导致程序崩溃 - 如果还未获取到网页HTML源码,可通过
HttpClient发起请求获取响应内容后,再传入上述方法处理 - 若页面内容是JavaScript动态渲染生成的,需要先使用无头浏览器(如PuppeteerSharp)获取渲染完成后的完整HTML再做解析
- 不推荐使用正则匹配提取,HTML结构稍有变动就会导致匹配失效,仅在无解析库可用的场景下临时使用
内容的提问来源于stack exchange,提问作者Cruder
相关产品推荐
相关产品推荐

