<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");
答案 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完全格式不正确。
<input .... />
。最后删除不必要的额外'<input>'
!onfocus="showInfoBox(this, 'Varchar(100) Latin capital letters only (A-Z) and spaces between surnames')"
; name=Surname"
应为name="Surname"
。<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