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

C#使用Html Agility Pack获取div属性报错及节点筛选问题

问题解决方法

出现空引用错误核心原因是你没有对节点、属性做非空校验,同时要注意XPath的节点索引从1开始计数,不是常用的0开头。具体实现步骤如下:

  • 首先确认你请求到的原始HTML字符串中确实存在3个及以上class="flex-item text-primary"的div节点,不要直接套用浏览器开发者工具里渲染后的结构(动态渲染的内容可能不会在原始请求中返回)
  • 取第三个节点的XPath写法注意索引为[3],如果需要模糊匹配class包含对应类的节点,可以调整XPath避免漏匹配
  • 所有取值操作前必须做非空判断,避免空引用报错

示例代码

using HtmlAgilityPack;

// 此处替换为你实际爬取到的页面HTML字符串
string htmlContent = "你的页面HTML内容";

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmlContent);

// 方式1:class完全匹配时直接取第三个节点
HtmlNode targetNode = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='flex-item text-primary'][3]");

// 方式2:如果节点class还有其他额外类,用模糊匹配的XPath
// HtmlNode targetNode = htmlDoc.DocumentNode.SelectSingleNode("//div[contains(@class,'flex-item') and contains(@class,'text-primary')][3]");

if (targetNode != null)
{
    if (targetNode.Attributes.Contains("data-original-title"))
    {
        string attrValue = targetNode.Attributes["data-original-title"].Value;
        Console.WriteLine($"属性值为:{attrValue}");
    }
    else
    {
        Console.WriteLine("目标节点不存在data-original-title属性");
    }
}
else
{
    // 排查时可以先输出所有匹配到的节点总数
    var allMatchNodes = htmlDoc.DocumentNode.SelectNodes("//div[@class='flex-item text-primary']");
    Console.WriteLine($"匹配到的同class节点总数:{allMatchNodes?.Count ?? 0}");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:27:04