我试图获得div类“darkgreen”的值,即46.98。我尝试了以下代码,但我得到了一个Null异常。
以下是我正在尝试的代码:
private void button1_Click(object sender, EventArgs e)
{
var doc = new HtmlWeb().Load("https://rotogrinders.com/grids/nba-defense-vs-position-cheat-sheet-1493632?site=fanduele");
HtmlAgilityPack.HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class='darkgreen']");
foreach (HtmlAgilityPack.HtmlNode node in nodes)
{
Console.WriteLine(node.InnerText);
}
}
如果我使用doc.DocumentNode.SelectNodes(“// div [@ class ='rgt-hdr colorize']”)运行相同的代码,它确实会没有错误地提取标题数据。
我在想,也许子节点可能是一个解决方案,但我不确定,因为我无法让它继续工作。
答案 0 :(得分:1)
您的问题是您查找的HTML是由javascript创建的。您加载到Document变量中的HTML是由javascript创建的。如果您在Web浏览器中查看页面源代码,您将看到在HtmlDocument变量中加载的确切HTML。
下面的示例将为您提供用于创建表的数据(JSON)。我不知道这对你想要做的事情是否足够。
public static void Main(string[] args)
{
Console.WriteLine("Program Started!");
HtmlDocument doc;
doc = new HtmlWeb().Load("https://rotogrinders.com/grids/nba-defense-vs-position-cheat-sheet-1493632?site=fanduele");
HtmlNode node = doc.DocumentNode.SelectSingleNode("//section[@class='bdy content article full cflex reset long table-page']/following-sibling::script[1]");
int start = node.InnerText.IndexOf("[");
int length = node.InnerText.IndexOf("]") - start +1;
Console.WriteLine(node.InnerText.Substring(start, length));
Console.WriteLine("Program Ended!");
Console.ReadKey();
}
替代解决方案
或者您可以将Selenium与PhantomJS一起使用。然后将HTML从无头浏览器加载到您的文档变量中,然后您的xpath将起作用。