使用Excel VBA在HTML输入框中写入内容

3
我使用VBA加载一个网页并登录,用户名为myusername,密码为mypassword
我想要使用VBA在网页的输入字段中写入搜索词。
但由于该输入字段没有名称和ID,所以我没有成功。
以下是我的代码:
Sub MyLogin()

Dim IE As InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
With IE
    .Visible = True
    .navigate "https://www.example.com"

    Do Until .readyState = 4
        DoEvents
    Loop

    .document.all.Item("username").Value = "myusername"
    .document.all.Item("password").Value = "mypassword"
    .document.forms(0).submit

End With

Do Until IE.readyState = 4
    DoEvents
Loop

Dim inputfield As HTMLInputElement
For Each inputfield In IE.document.getElementsByTagName("input")
    If inputfield.Type = "text" Then inputfield.Value = "mysearch"
Next

Do Until IE.readyState = 4
    DoEvents
Loop

End Sub

我想要填写的 HTML 字段:

input class="input-inboxsearch form-control" type="text" value="" placeholder="姓名,电子邮件" maxlength="71"

如何设置输入字段的值?


2
尝试使用getElementsByClassName("input-inboxsearch form-control")代替。 - Miqi180
1个回答

0

根据@Miqi180的评论,您可以尝试将代码部分从Dim inputfield As HTMLInputElement替换为以下内容:

Dim inputfield As Object
Set inputfield = IE.document.getElementsByClassName("input-inboxsearch form-control")
If inputfield.length > 0 Then
    inputfield(0).Value = "mysearch"
End If

'carry on with your code

getElementsByClassName 方法会返回一个集合,所以您需要检查它的 length,然后访问集合中的元素。如果只有一个具有该类的元素,则可以引用集合的第 0 个元素。

我将 inputfield 变量设置为 Object,因为您似乎在使用后期绑定。


谢谢您的帮助。我已经进行了修改。现在没有错误信息了。但是搜索框中仍然没有任何内容显示。 - dupont
当我调试打印inputfield.length时,它返回0。是否有什么可以防止getelementsbyclass过程收集数据的东西?当我在Google网页上尝试该过程时,它完美地运行。再次感谢您的帮助。 - dupont
也许您需要仔细检查输入字段上的类属性 - 您确定它是 input-inboxsearch form-control 吗?通常,这应该可以正常工作 - 我注意到您的代码已经导航到了一个页面并登录了。也许您需要检查 IE.document 是否指向您的第二个页面(登录后),而不是第一个页面(登录前)。 - Robin Mackenzie
非常感谢您的帮助。类属性是正确的。我认为正如您所说的那样,两个网页之间存在冲突(登录前和登录后)。我应该重命名第二个网页吗?对如何做到这一点有什么建议将不胜感激。迄今为止提供的帮助非常有用。感谢所有贡献者。 - dupont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接