我正在尝试自动填写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
非常感谢你的帮助!
答案 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。
这与以下内容匹配,我想要第一个。
②第二个选择器:
#tState option[value='MA']
这表示在ID为option
的元素内选择属性为value
,值为'MA'
的{{1}}标签。 tState
表示属性。
VBA:
因为我想进行第一个匹配,所以可以使用"[]"
的{{1}}方法来应用CSS选择器,如下所示:
querySelector