2012-02-03 72 views
2

嘿,我想知道如何在網頁上使用C#獲取所有元素。我用下面這段代碼:獲取所有<img>元素在網頁上

HtmlElementCollection collection = web.Document.GetElementsByTagName("img"); 

foreach(HtmlElement element in collection) { 
    //do my stuff with iterations 
} 

但是該代碼會彈出這樣的錯誤:

Specified cast is not valid. 

我怎麼會去正確地這樣做呢?

回答

1

foreach之前設置一個斷點。然後檢查collection中的類型。

我懷疑它可能需要一些基類HtmlElement

或者:

HtmlElementCollection collection = web.Document.GetElementsByTagName("img"); 

foreach(object e in collection) { 
    //do my stuff with iterations 
    var element = e as HtmlElement; 
    if (element == null) 
     Debug.Print("Type of e: {0}", e.GetType); 
    else 
    { 
    // ok 
    } 
} 
+0

對不起,但你是什麼意思? – 2012-02-03 08:54:22

+0

他意味着您應該在調試模式下逐句通過代碼,並查看您的集合是什麼類型。如果你從'GetElementsByTagName'中得到一個空的集合,或者如果按預期工作,這可能有助於清除。正如MSDN中所述,對象的類型應該是正常的。 – basti 2012-02-03 09:09:00

+0

@chiffre:謝謝,只是增加了一個'更清晰'的選擇。 – leppie 2012-02-03 09:09:37

-1

嘗試使用var而不是HtmlElement

var collection = web.Document.GetElementsByTagName("img"); 

foreach(var element in collection) { 
    //do my stuff with iterations 
} 

然後你可以將鼠標懸停在Visual Studio中的鼠標var會讓你自身的實際類型的迭代器返回。

最好的問候!

+0

他不需要使用var,因爲在MSDN(http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.getelementsbytagname.aspx)中明確指出,'GetElementsByTagName '返回'HtmlElementCollection'。 – basti 2012-02-03 09:04:23

+1

-1:HtmlElementCollection不是泛型的,因此'var'將是'object',對於這個問題來說幾乎沒有用處。 – leppie 2012-02-03 09:04:56

+0

我提供了一個通用場景來調查問題。你是對的,var不能給出好的結果。 – 2012-02-03 09:08:41

1

您必須確保您的文檔已完成加載,例如, G。這段代碼

private void DisplayMetaDescription() 
{ 
    if (webBrowser1.Document != null) //the statement! 
    { 
     HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("META"); 
     foreach (HtmlElement elem in elems) 
     { 
      //Some loop-stuff you propably want to do 
     } 
    } 
} 

MSDN做到這一點的if語句。

也可能與Question有關。

+0

如果用語句檢查文檔是否已加載,它仍會返回相同的錯誤。 – 2012-02-03 09:08:05

+0

您是否也嘗試過相關問題的解決方案? – basti 2012-02-03 09:09:45

+0

我想我發現了我的問題。我相信這跟我在初始化HtmlElementCollection的地方有關。 – 2012-02-03 09:16:49