2010-08-08 9 views
5

Ich habe versucht, diesen Code zu verwenden, um das Element nach Klasse in HTML/Ajax zu lesen GetElementByClass ist keine Option in WebBrowser.Document. Ich kann nicht scheinen, einen Rückgabewert zu erhalten, dann das Mitglied anzurufen. Gibt es dafür eine Arbeit?So wählen Sie eine Klasse von GetElementByClass und klicken Sie darauf programmgesteuert

Referenzen: Getting HTMLElements by Class Name

Beispiel:

<span class="example">(<a href="http://www.test.com/folder/remote/api?=test" onclick=" return do_ajax('popup_fodder', 'remote/api?=test', 1, 1, 0, 0); return false; " class="example">test</a>)</span> 

Beispielcode:

HtmlElementCollection theElementCollection = default(HtmlElementCollection); 
    theElementCollection = webBrowser1.Document.GetElementsByTagName("span"); 
    foreach (HtmlElement curElement in theElementCollection) 
    { 
     //If curElement.GetAttribute("class").ToString = "example" It doesn't work. 
     // This should be the work around. 
     if (curElement.OuterHtml.Contains("example")) 
     { 
      MessageBox.Show(curElement.GetAttribute("InnerText")); // Doesn't even fire. 
      // InvokeMember(test) after class is found. 
     } 
    } 

Antwort

0

Warum nicht qjuery der Selektor-Engine für diesen Einsatz. Und auch, wo erwartet Sie die messagebox.show erscheinen?

+3

Awesome, eine Gabel arbeitet von Jquery? ;) –

+0

Messagebox.Show sollte mir den Text anzeigen, den er abgerufen hat. JQuery, mit dem ich nicht vertraut bin. Hast du ein Beispiel in diesem Fall? – Nightforce2

4

Dies ist ein Beispiel dafür, wie ich das Webbrowser-Steuerelement verwendet habe, um klassenspezifische Elemente zu finden und aufzurufen. Klicken Sie auf einen Link darin.

vereinfacht>

foreach (HtmlElement item in webBrowser1.Document.GetElementsByTagName("li")) 
     { 
      // use contains() if the class attribute is 
      // class="page_item page-item-218 current_page_item" 
      //this to be more on spot! >> if (item.OuterHtml.Contains("class=\"page_item")) 
      // or 
      if (item.OuterHtml.Contains("page_item")) 
      { 
       foreach (HtmlElement childItem in item.Children) 
       { 
        if (childItem.TagName == "A") 
        { 
         //Click the link/Current element 
         childItem.InvokeMember("Click"); 
         break; 
        } 
       } 
       break; 
      } 
     } 

macht auf diese Weise Arbeit? ..

es hier für mich funktioniert.

oder vielleicht missverstanden ich Ihre Frage?

+0

Dadurch wird das Ereignis im Link Beispiel nicht ausgelöst. Ich versuche das Ajax-Ereignis "Test" auszulösen, wenn du den Link noch einmal ansiehst. =) – Nightforce2

12

Ich gebe zu, es ist nicht sehr intuitiv, aber Sie müssen GetAttribute("className") verwenden, anstatt GetAttribute("class")

HtmlElementCollection theElementCollection = default(HtmlElementCollection); 
theElementCollection = webBrowser1.Document.GetElementsByTagName("span"); 
foreach (HtmlElement curElement in theElementCollection) 
{ 
    if (curElement.GetAttribute("className").ToString() == "example") 
    { 
     MessageBox.Show(curElement.GetAttribute("InnerText")); // Do something you want 
    } 
} 
0
Dim HtmlElementcolltwo As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("button") 
     For Each eleme As HtmlElement In HtmlElementcolltwo 
      ' Check the attributtes you want 
      If eleme.GetAttribute("className") = "derrt_submit feed-zed-bff" Then 
       'Check even the text if you want 
       ' If elem.InnerText = "Sign In" Then 
       'Invoke your event 
       eleme.InvokeMember("click") 
       'End If 
      End If 
     Next 

dies auch statt mit „Klasse“ Verwendung „classname“

Verwandte Themen