2014-10-04 49 views
0

我试图为输入标签刮取随机站点。无法用HTML敏捷包检索输入标签

所以我需要写这样的方式,它将与大多数网站一起工作。

目前我有

void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
{ 

    HtmlAgilityPack.HtmlDocument dom = new HtmlAgilityPack.HtmlDocument(); 

    dom.LoadHtml(e.Result); 

    var node = dom.DocumentNode.Element("html"); 

    var inputs = node.ChildNodes["body"].Descendants("input"); 

,但是这是行不通的。

节点返回我想要的数据,但输入始终为空。

当我做node.ChildNodes["body"].Descendants().ToList();我看到名为“input”的条目。

enter image description here

我这么想吗?

+0

我不能重现该问题,你是怎么检查'inputs'价值? 'var inputs = node.ChildNodes [“body”]。后裔(“input”)。ToList()'? – har07 2014-10-04 02:37:12

+0

请更新您的示例,其中显示“不工作”的代码以及究竟“结果为空”的代码(因为如果根据我的理解,“后代”应该返回空的枚举)。 – 2014-10-04 03:09:07

+0

@ har07这会产生一个没有任何内容的集合。 – 2014-10-04 03:46:46

回答

1

你的代码很好,只是你验证的方式是错误的。截图中所有那些null值并不表示IEnumerable<T>为空,您可以尝试在监视窗口中调用inputs.ToArray()inputs.ToList()来验证结果。

记住IEnumerable<T>懒加载的项目,直到必要的,例如,直到你遍历,调用ToList()/ToArray()

+0

不知道这一点。非常有用。谢谢。 – 2014-10-04 04:19:58