使用VBA EXCEL填写USPS webform下拉列表

时间:2015-08-27 17:47:59

标签: excel vba webforms

我正在尝试自动填写USPS网络表单,它适用于街道地址,城市和邮政编码,但我无法填写州下拉列表。有什么想法吗?

这是我目前拥有的代码:

Sub USPS()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True

IE.Navigate "https://tools.usps.com/go/ZipLookupAction!input.action?mode=1&refresh=true"
Do
DoEvents
Loop Until IE.READYSTATE = 4

Call IE.Document.getElementByID("tAddress").SetAttribute("value", "2 Peabody Terrace")
Call IE.Document.getElementByID("tCity").SetAttribute("value", "Cambridge")
Call IE.Document.getElementByID("sState").SetAttribute("value", "MA")
Call IE.Document.getElementByID("Zzip").SetAttribute("value", "02138")

Set AllHyperLinks = IE.Document.GetElementsByTagName("A")
    For Each hyper_link In AllHyperLinks
    If ID = "lookupZipFindBtn" Then
        hyper_link.Click
        Exit For
    End If
    Next
End Sub

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

对您的代码进行此更改:

'Call IE.Document.getElementByID("sState").SetAttribute("value", "MA")
With IE.Document.getElementByID("sState")
    For i = 0 To .Length - 1
        If .Item(i).Value = "MA" Then
            .Item(i).Selected = True
            Exit For
        End If
    Next
End With

这将有效...但网页仍然会显示Select元素没有改变。这是一种幻觉。我怀疑页面中有一些JavaScript干扰了这个元素的显示。

但是,如果你在VBEditor的立即窗口中执行此操作:

?IE.Document.getElementByID("sState").value

...您将看到控件的值确实已更改为' MA'。

此外,如果您继续点击网页的“查找”按钮,您会看到“MA' MA' MA' MA' MA'实际上包含在'您输入:'。

所以我上面的代码就是你问题的解决方案。

答案 1 :(得分:0)

CSS选择器:

您可以使用CSS选择器执行此操作。

①我使用的第一个选择器是用于初始登录页面以选择search by address

#zip-lookup-app a > span

这表示span标签内的a标签在ID为zip-lookup-app的元素内。 "#"表示ID。

这与以下内容匹配,我想要第一个。

CSS query

②第二个选择器:

#tState option[value='MA']

这表示在ID为option的元素内选择属性为value,值为'MA'的{​​{1}}标签。 tState表示属性。


VBA:

因为我想进行第一个匹配,所以可以使用"[]"的{​​{1}}方法来应用CSS选择器,如下所示:

querySelector