HtmlAgilityPack 找不到节点

HtmlAgilityPack cannot find node

我正在尝试从 Here

获取 Start 调用的跨度

Chrome 给了我这个 xPath://*[@id="guide-pages"]/div[2]/div[1]/div/div[1]/div/div/div[2]/div/div[3]/div[2]/div[1]/h2

但是 HtmlAgilityPack returns 为空,在我尝试将它们一一删除之后;这有效: //*[@id="guide-pages"]/div[2]/div[1] ,但其余部分无效。

我的完整代码:

HtmlDocument doc = new HtmlDocument();
var text = await ReadUrl();
doc.LoadHtml(text);
Console.WriteLine($"Getting Data From: {doc.DocumentNode.SelectSingleNode("//head/title").InnerText}"); //Works fine
Console.WriteLine(doc.DocumentNode.SelectSingleNode("//*[@id='guide-pages']/div[2]/div[1]/div/div[1]/div/div/div[2]/div/div[3]/div[2]/div[1]/h2") == null);

输出:

Getting Data From: Miss Fortune Build Guide : [7.11] KOREAN MF Build - Destroy the Carry! [Added Support] :: League of Legends Strategy Builds
True

不要使用来自 Chrome 的 xpath。请改用 HtmlAgilityPack 中的 LINQ。例如 .Descendants("div") 会给你所有 div 在 1 html 节点下。每个 html 节点都有元数据,如 id、属性(类...),您可以从那里查询您想要的 div。 这是检查 HtmlNode 是否有 类 的一种便捷方法。

    public static bool HasClass(this HtmlNode node, params string[] classValueArray)
    {
        var classValue = node.GetAttributeValue("class", "");
        var classValues = classValue.Split(' ');
        return classValueArray.All(c => classValues.Contains(c));
    }