我正在尝试在IE表单字段中输入密码,但没有反应。我收到“需要对象”错误。
我尝试使用以下代码:
IE.document.getElementById("password").Value = "xxx"
IE.document.getElementsByName("password").Value = "xxx"
IE.document.forms("form-signsubmit").all("password").Value = "xxx"
我还尝试遍历名称为“ Input”的标签。在整个脚本中,我有3个标记为“ Input”的标签,它只会找到最后一个不是密码节点的标签,因此它似乎不存在。
HTML代码:
有人知道我在做什么错吗?
答案 0 :(得分:1)
尝试检查代码是否可以使用发送键在字段中输入密码。
示例代码:
Sub demo()
' add references to Microsoft HTML object library and Microsoft Internet controls.
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://example.com"
IE.Visible = True
While IE.Busy
DoEvents
Wend
Set TrackID = IE.document.getElementById("txt_abc")
TrackID.Focus
Application.SendKeys ("(123456)"), True
Application.SendKeys ("{ENTER}"), True
End Sub
答案 1 :(得分:0)
我过去处理过类似的问题。首先,会有一些网站非常擅长阻止您尝试做的事情。通常,有很多解决方法,但是有时很难用这些网站的构建方法来找出解决方案。
检查是否找到正确的元素。没有提供很多细节,但是您确定VBA正在找到该特定元素吗?也许有多个具有该名称的字段,在这种情况下,您需要告诉VBA选择哪个字段。例如:
IE.Document.GetElementByName("password")(0).Value
其中(0)代表您要选择的那个。如有必要,请更改。
我的第二个建议是先将FOCUS放在该元素上,尝试更改该值,然后再关注另一个元素。
IE.Document.getElementByName("password").Focus
IE.Document.getElementByName("password").Value = "xxx"
IE.Document.getElementByName("AnotherElement").Focus
关于为什么需要这样做的文档并不多,但是在过去处理此类尝试防止自动化的网站时,这是一种对我有用的解决方案。
最后一个想法是触发事件。转到开发人员工具(通常是F12将其拉起),然后查看是否有任何事件侦听器绑定到该字段。如果找到它,则可能需要手动触发一个事件,例如:
IE.Document.getElementByName("password").FireEvent ("onchange")
这些只是我在互联网上看到的一些解决方案。但是,我的直觉告诉我,这可能是VBA试图找到正确字段而不是网站试图阻止自动化的问题。但是,由于您正在处理密码字段,因此我想尝试尝试防止自动化可以提高安全性。