How to getelement by class?

与世无争的帅哥 提交于 2019-11-27 15:43:53

There is nothing built-in in the WebBrowser control to retrieve an element by class name. Since you know it is going to be an a element the best you can do is get all a elements and search for the one you want:

var links = webBrowser1.Document.GetElementsByTagName("a");
foreach (HtmlElement link in links)
{
    if (link.GetAttribute("className") == "show1")
    {
        //do something
    }
}

Extension Method for HtmlDocument

Returns a list of elements with a particular tag, which coincides with the given className

It can be used to capture the elements only on the tag, or only by class name

internal static class Utils
{
  internal static List<HtmlElement> getElementsByTagAndClassName(this HtmlDocument doc, string tag = "", string className = "")
  {
      List<HtmlElement> lst = new List<HtmlElement>();
      bool empty_tag = String.IsNullOrEmpty(tag);
      bool empty_cn = String.IsNullOrEmpty(className);
      if (empty_tag && empty_cn) return lst;
      HtmlElementCollection elmts = empty_tag ? doc.All : doc.GetElementsByTagName(tag);
      if (empty_cn)
      {
         lst.AddRange(elmts.Cast<HtmlElement>());
         return lst;
      }
      for (int i = 0; i < elmts.Count; i++)
      {
         if (elmts[i].GetAttribute("className") == className)
         {
            lst.Add(elmts[i]);
         }
      }
      return lst;
   }
}

Usage:

WebBrowser wb = new WebBrowser();
List<HtmlElement> lst_div = wb.Document.getElementsByTagAndClassName("div");// all div elements
List<HtmlElement> lst_err_elmnts = wb.Document.getElementsByTagAndClassName(String.Empty, "error"); // all elements with "error" class
List<HtmlElement> lst_div_err = wb.Document.getElementsByTagAndClassName("div", "error"); // all div's with "error" class

I followed up these answers and make my method to hide div by class name.

I shared for whom concern.

public void HideDivByClassName(WebBrowser browser, string classname)
        {
            if (browser.Document != null)
            {
                var byTagName = browser.Document.GetElementsByTagName("div");
                foreach (HtmlElement element in byTagName)
                {
                    if (element.GetAttribute("className") == classname)
                    {
                        element.Style = "display:none";
                    }
                }
            }
        }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!