简体   繁体   中英

How to convert an IEnumerable<HtmlElement> to a regular HtmlElement

I'm trying to use the WebBrowser control in VS 2013 to enter text on a webpage. My app is written in C# . The Html for the webpage doesn't use standard ids, but instead it uses something called a data-gel-id . I believe this is custom to the company that built the webpage, but I'm not familiar enough with JavaScript to know for sure. This means I can't use the GetElementsById() method to point my app at the specific text box. The Html element is reproduced below:

<div class="rcPoint rcPointtext rcPointEditable" data-gel-id="gel_20" style="position: absolute; left: 25.9375%; top: 28.125%; font-size: 12%;"> 

I am trying to use the code snippet below to get the Html element by className. The code is based on a snippet from an MSDN forum post .

static IEnumerable<HtmlElement> ElementsByClass(HtmlDocument doc, string className)
{
    foreach (HtmlElement e in doc.All)
        if (e.GetAttribute("className") == className)
        {
            yield return e;
        }
}

However, when I try to assign the output of this method to an HtmlElement like so:

HtmlElement txtbox = ElementsByClass( doc2, "rcPoint rcPointtext rcPointEditable");

I get an error saying that you can't explicitly convert an IEnumerable to an HtmlElement.

So I have a few questions:

  1. Should I try to convert the IEnumerable to an Html element? And if so, how?
  2. Am I using the code snippet correctly? Are my arguments legit?
  3. Is this even the best way to point my app at the text box?

Thank you very much for your help and let me know if there's anything else I can post to help with the answer.

If you know the "custom id", you should probably try something like this

var gelId = "gel_20"; // This is the id you know
var txtbox = ElementsByClass( doc2, "rcPoint rcPointtext rcPointEditable")
             .FirstOrDefault(x => x.GetAttribute("data-gel-id") == gelId);
if (txtbox != null) {
    // Found textbox do something with it
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM