Webbrowser getelementsbyname?

时间:2015-01-15 20:21:01

标签: c# html input webbrowser-control

<input onfocus="showInfoBox(this, "Varchar(100) Latin capital letters only (A-Z) and spaces between surnames")" onblur="hideInfoBox()" value="" name="Surname"><input>

我需要通过webbrowser填充输入。当我尝试填充时,我收到System.ArgumentOutOfRangeException错误。我如何填写此输入区域?

这是我的代码

webBrowser1.Document.GetElementsByTagName("Surname")[0].SetAttribute("MySurName", "true");

3 个答案:

答案 0 :(得分:1)

您的代码无效。当您使用GetElementByTagName时,您需要使用标记名称进行搜索。在您的情况下,标记名称为input。您可以查看article

你的名字中也有一个拼写错误"。见name=Surname"。您可以尝试使用GetElementByName方法。检查此article请注意您缺少输入类型。在谷歌搜索不同的input types

public HtmlElementCollection GetElemByName(string name)
{
    if (webBrowser1.Document == null)
         return null;

        HtmlDocument doc = webBrowser1.Document;

        return doc.All.GetElementsByName(name);                 
}

之后你正在调用方法;

HtmlElementCollection col = GetElemByName("SurName");
if(col != null && col.Count > 0)
    col[0].SetAttribute("AnyAttribute", value); // be aware THERE IS NO ATTRIBUTE MySurName !!!

如果您有多个具有相同名称的元素,我不知道您是否要循环元素。还要区分属性和属性值。如果您希望您的名字成为MySurName,则需要此

col[0].SetAttribute("name", "MySurName");

答案 1 :(得分:1)

异常的原因是函数GetElementsByTagName找到零元素,因此集合为空,因此当您尝试访问空集合的元素1时,异常抛出。

按名称获取元素,如&#34; Surname&#34;您应该使用GetElementsByName代替GetElementsByTagName,这应该用于标记行&#39;输入&#39;。

但是,没有函数会返回一个好的结果,因为你提供的html完全格式不正确。

  1. &#39;输入&#39;标签是自我关闭的,应该如下所示:<input .... />。最后删除不必要的额外'<input>'
  2. 小心引号。应该是onfocus="showInfoBox(this, 'Varchar(100) Latin capital letters only (A-Z) and spaces between surnames')"; name=Surname"应为name="Surname"
  3. 输入必须具有type属性(<input type='text'<input type='checkbox'等)

答案 2 :(得分:1)

这应该适合你:

    Dim inp As HtmlElement
    For Each inp In wb.Document.GetElementsByTagName("input")
    If inp.GetAttribute("name") = "surname" Then
    inp.SetAttribute("value", "your text")
    End If
    Next