【问题标题】:Html Agility Pack DocumentNode.SelectNodes returns nullHtml 敏捷包 DocumentNode.SelectNodes 返回 null
【发布时间】:2018-03-04 23:11:00
【问题描述】:

我在尝试查找元素中的值时遇到了一些麻烦。我认为原因是因为它只在 div 中,而不是在表格或类似的东西中。我不确定,但这与其他人的例子不同。 这是我的代码:

private async void ButtonNext_Click(object sender, EventArgs e)
    {
        HtmlWeb web = new HtmlWeb();
        var doc = await Task.Factory.StartNew(() => web.Load("https://hsreplay.net/decks/aeVbjoWFmDWILMwbMi9RCh/"));
        var node = doc.DocumentNode.SelectNodes("//*[@id=\"mulligan - guide\"]/div/div/div[1]/div/div[4]/div/div/div[2]");
    }

var 节点返回 null。我试图获取的值在这里:

89.3%

这是我试图获得的 89.3% 的值。

任何帮助将不胜感激! 谢谢!

【问题讨论】:

  • 您尝试获取的内容是通过 javascript 异步加载的。尝试在您选择的浏览器中禁用 javascript。如果您像您一样加载网页,那么您在禁用 javascript 的情况下所看到的就是您所拥有的。据我所知,HtmlAgilityPack 是强大的 HTML 解析器,但它不会呈现任何内容。但我可能错了。

标签: c# html winforms visual-studio-2017 html-agility-pack


【解决方案1】:

你可能会得到你想要的。创建一个WebBrowser 实例,设置DocumentCompleted 事件处理程序(希望这意味着在触发事件时也会执行javascript 和类似的东西)。然后,当调用处理程序时,获取WebBrowser 的源代码(希望已被脚本更新),创建一个HtmlAgilityPack.HtmlDocument 并触发您的查询。

using(var ie = new WebBrowser())
{
    ie.DocumentCompleted += (s, args) => 
    {
        var doc = new HtmlDocument();
        doc.LoadHtml(ie.DocumentText);
        var node = doc.DocumentNode.SelectNodes("//*[@id=\"mulligan - guide\"]/div/div/div[1]/div/div[4]/div/div/div[2]");
    };
    ie.Navigate("https://hsreplay.net/decks/aeVbjoWFmDWILMwbMi9RCh/");
}

未测试

【讨论】:

  • 我试过了,它抱怨“发件人”。错误:CS0163。
  • 如果您阅读错误描述,我很确定您能够解决此错误;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2014-03-26
  • 1970-01-01
  • 2017-05-20
  • 2011-03-04
  • 1970-01-01
  • 2011-01-26
相关资源
最近更新 更多