2013-12-15 223 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