如何将IEnumerable <htmlelement>转换为常规HtmlElement

时间:2016-05-26 21:16:56

标签: javascript c# html .net

我正在尝试使用VS 2013中的WebBrowser控件在网页上输入文字。我的应用程序是用C#编写的。网页的Html不使用标准ID,而是使用名为data-gel-id的内容。我相信这是建立网页的公司的习惯,但我对JavaScript的熟悉程度不够。这意味着我无法使用GetElementsById()方法将我的应用指向特定文本框。 Html元素转载如下:

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

我正在尝试使用下面的代码片段来通过className获取Html元素。该代码基于MSDN论坛post的摘录。

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

但是,当我尝试将此方法的输出分配给HtmlElement时,如下所示:

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

我收到错误消息,说明您无法将IEnumerable显式转换为HtmlElement。

所以我有几个问题:

  1. 我应该尝试将IEnumerable转换为Html元素吗?而如果 又怎样?
  2. 我是否正确使用了代码段?我的论点合法吗?
  3. 这是将我的应用指向文本框的最佳方式吗?
  4. 非常感谢您的帮助,请告诉我是否还有其他任何内容可以帮助我找到答案。

1 个答案:

答案 0 :(得分:0)

如果您知道&#34;自定义ID&#34;,您应该尝试这样的事情

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
}