Как выбрать класс с помощью GetElementByClass и нажать на него программно - PullRequest
6 голосов
/ 09 августа 2010

Я пытался использовать этот код для чтения элементов по классам в html / ajax, зная, что GetElementByClass не является опцией в webBrowser.Document.Я не могу получить возвращаемое значение, а затем вызвать член.Есть ли обходной путь для этого?

Ссылки: Получение HTMLElements по имени класса

Пример:

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

Пример кода:

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

Ответы [ 4 ]

15 голосов
/ 31 марта 2011

Я признаю, что это не очень интуитивно понятно, но вам нужно использовать GetAttribute("className") вместо 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
    }
}
4 голосов
/ 09 августа 2010

это пример того, как я использовал элемент управления webbrowser, чтобы найти элементы, специфичные для класса, и вызвать Click внутри ссылки.

упрощенный>

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

так работает? ..

у меня это работает прямо здесь.

или, может быть, я неправильно понял ваш вопрос?

0 голосов
/ 04 сентября 2017
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

Это также работает вместо "class", используйте "className"

0 голосов
/ 09 августа 2010

Почему бы вам не использовать движок селектора qjuery для этого.А также, где вы ожидаете появления messagebox.show?

...