Vba VisualBasic:设置web元素的属性(不带ID)

Vba VisualBasic:设置web元素的属性(不带ID),vba,elements,Vba,Elements,HTML: 但是我得到了一个错误: WebBrowser1.Document.Forms(0).GetElementsByTagName("username")(0).SetAttribute("value", (Text)) 我做错了什么?这不会找到任何元素: Value of '0' is not valid for 'index'. 'index' should be between 0 and -1. Parameter name: index “标记名”不是指name属性的值,而是

HTML:

但是我得到了一个错误:

WebBrowser1.Document.Forms(0).GetElementsByTagName("username")(0).SetAttribute("value", (Text))

我做错了什么?

这不会找到任何元素:

Value of '0' is not valid for 'index'. 'index' should be between 0 and -1.
Parameter name: index
“标记名”不是指
name
属性的值,而是指HTML标记本身的名称。像这样:

WebBrowser1.Document.Forms(0).GetElementsByTagName("username")
当然,这可能会返回多个匹配的元素,因此需要进一步确定要修改的元素。要点是,您应该执行一些错误检查,以确保它找到任何内容,因为尝试为空集合编制索引将导致错误:

WebBrowser1.Document.Forms(0).GetElementsByTagName("input")
因为集合没有元素,所以索引
0

中没有任何内容,您可以尝试一下

WebBrowser1.Document.Forms(0).GetElementsByTagName("username")(0)

尝试删除“用户名”后的(0)。这个问题的标签至少应该包含javascript。另外,它是WITH,而不是whit。@user652411:我认为这不是在使用JavaScript。看起来
WebBrowser1
是一个VB对象,它的成员可以模仿JavaScript。所以你的意思是这是不可能的?或者我在这里遗漏了什么。@user2819294:我根本没这么说。我的意思是,为了按标记名获取元素,必须提供标记名(
input
),而不是
name
属性的值。然后,您将返回该标记名的所有元素的集合,在该集合中,您可以找到要查找的元素,并设置要设置的属性。我真的搞不懂这一点,也许您可以给我举个例子。您是否可以在不使用ID值的情况下自动填写facebook.com上的“电子邮件”字段?@user2819294:当然可以。您所需要做的就是在DOM中标识该元素。一旦你把它挑出来,你可以随意修改它。
WebBrowser1.Document.Forms(0).GetElementsByTagName("username")(0)
Me.WebBrowser1.Document.GetElementByName("username").SetAttribute("Value", txtUsername.Text)