2010-08-08 8 views
5

J'ai essayé d'utiliser ce code pour lire l'élément par classe en html/ajax sachant que GetElementByClass n'est pas une option dans webBrowser.Document. Je n'arrive pas à obtenir une valeur de retour, puis j'invoque le membre. Y a-t-il un travail pour ça?Comment sélectionner une classe par GetElementByClass et cliquez dessus par programmation

Références: Getting HTMLElements by Class Name

Exemple:

<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> 

code Exemple:

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. 
     } 
    } 

Répondre

0

Pourquoi utilisez-vous pas le moteur de sélection de qjuery pour cela. Et aussi, où attendez-vous que le messagebox.show apparaisse?

+3

Impressionnant, une fourchette de jquery? ;) –

+0

Messagebox.Show était de me montrer le texte qu'il a récupéré. JQuery je ne suis pas familier avec. Vous avez un exemple dans ce cas? – Nightforce2

4

Ceci est un exemple de la façon dont j'ai utilisé le contrôle webbrowser pour trouver des éléments spécifiques à la classe et invoquer Cliquez sur un lien à l'intérieur.

simplifié>

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; 
      } 
     } 

fonctionne ce chemin? ..

ça marche pour moi ici. Ou peut-être que je mal compris votre question?

+0

Cela ne déclenche pas l'événement dans le lien Exemple. J'essaie de déclencher l'événement ajax "Test" si vous regardez à nouveau le lien. =) – Nightforce2

12

je l'avoue n'est pas très intuitif, mais vous devez utiliser GetAttribute("className") au lieu de 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 

Cela fonctionne également au lieu d'utiliser « classe » utilisation « className »