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

如何使用HTML AgilityPack按ID选择元素并获取其InnerHtml?

解决方案

问题分析

  1. doc.DocumentNode.Id("acceptance-list-container") 是错误用法,HtmlNode没有名为Id的方法,正确获取指定ID元素的方法是GetElementById。
  2. 你的XPath表达式/div[@id='acceptance-list-container'] 仅从文档根节点查找直接子级的div,但目标元素大概率不是根的直接子元素,导致找不到节点,FirstOrDefault()返回null后调用InnerHtml触发空引用异常。

修正后的代码

protected void WebScrapper()
{
    var url = @"https://www.itftennis.com/en/tournament/w15-valencia/esp/2022/w-itf-esp-35a-2022/acceptance-list/"; 
    var webGet = new HtmlWeb();
    HtmlDocument doc = webGet.Load(url);

    // 方法1:使用GetElementById(推荐,ID唯一查找效率更高)
    var targetElement = doc.GetElementById("acceptance-list-container");
    if (targetElement != null)
    {
        Response.Write(targetElement.InnerHtml);
    }
    else
    {
        Response.Write("未找到指定ID的元素");
    }

    // 方法2:使用正确的XPath全局查找(备用方案)
    // var targetNodes = doc.DocumentNode.SelectNodes("//div[@id='acceptance-list-container']");
    // if (targetNodes != null && targetNodes.Count > 0)
    // {
    //     Response.Write(targetNodes[0].InnerHtml);
    // }
    // else
    // {
    //     Response.Write("未找到指定ID的元素");
    // }
}

关键修改点

  • 替换错误的Id方法为doc.GetElementById(),这是HTML AgilityPack专门用于ID查找的原生方法。
  • XPath表达式改为//div[@id='acceptance-list-container'],//表示在整个文档范围内查找匹配节点,而非仅根节点的直接子元素。
  • 增加空值判断,避免因找不到元素触发ArgumentNullException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:01:02