使用vba在IE字段中输入文本值不起作用

时间:2019-07-18 15:53:15

标签: excel vba internet-explorer

我正在尝试在IE表单字段中输入密码,但没有反应。我收到“需要对象”错误。

我尝试使用以下代码:

  1. IE.document.getElementById("password").Value = "xxx"
  2. IE.document.getElementsByName("password").Value = "xxx"
  3. IE.document.forms("form-signsubmit").all("password").Value = "xxx"

我还尝试遍历名称为“ Input”的标签。在整个脚本中,我有3个标记为“ Input”的标签,它只会找到最后一个不是密码节点的标签,因此它似乎不存在。

HTML代码:

!

有人知道我在做什么错吗?

2 个答案:

答案 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试图找到正确字段而不是网站试图阻止自动化的问题。但是,由于您正在处理密码字段,因此我想尝试尝试防止自动化可以提高安全性。