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));
}
我正在尝试从 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));
}