2013-12-15 171 views
2

我对C#相当陌生,我试图从浏览器内的游戏中获得一个关卡。这是我使用的代码,并将其与错误从html获得价值

“对象引用不设置到对象的实例”

HtmlElementCollection elmnt = webBrowser1.Document 
             .GetElementById("levelFrontTopArea") 
             .GetElementsByTagName("value"); 
levellabel.Text = elmnt[0].InnerText; 

下面我会告诉你的HTML代码来:

<div class="levelFrontTopArea"> 
    <a style="text-decoration:none" href="/profile.php">7</a> 
</div> 
+0

虽然他是得到一个'NullReference'例外,它只是因为他是试图让这并不有一个ID类元素。问题实际上是关于如何获得类元素。 – paqogomez

回答

2

如果要按类获取元素,可以循环访问div标签。

static IEnumerable<HtmlElement> ElementsByClass(HtmlDocument doc, string className) 
{ 
    foreach (HtmlElement e in doc.All) 
    if (e.GetAttribute("className") == className) 
     yield return e; 
} 

你可以这样调用:

var elmnt = ElementsByClass(webBrowser1.Document, "levelFrontTopArea"); 
levellabel.Text = elmnt.FirstOrDefault().InnerText; 
+0

无法将[]的索引应用于表达式的类型'System.Collections.Generic.IEnumerable Tooproforyahoo

+0

糟糕,只是复制你的代码,你可以通过使用'FirstOrDefault'获得第一个元素因为该方法返回一个IEnumerable,你可以在foreach中使用它也是如此。 – paqogomez

0

您正在使用GetElementByID,但您的div没有ID。尝试将您的HTML更改为:

<div ID="levelFrontTopArea" class="levelFrontTopArea"> 
    <a style="text-decoration:none" href="/profile.php">7</a> 
</div> 
+0

我不能从源代码更改代码如果它只是阅读它,对吧? – Tooproforyahoo

+0

我不确定你的意思。你自己写了html吗?或者它是由什么产生的? – charlieparker

+0

它被生成。 – Tooproforyahoo