首页 文章

HtmlAgilityPack找不到节点

提问于
浏览
0

我试图从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返回null;这有效: //*[@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

1 回答

  • 1

    不要使用Chrome中的xpath . 请改用HtmlAgilityPack中的LINQ . 例如 .Descendants("div") 将为您提供1 html节点下的所有 div . 每个html节点都有元数据,如id,attributes(classes ...),你可以从那里查询你想要的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));
        }
    

相关问题