【发布时间】:2019-07-31 22:40:56
【问题描述】:
我在 vba 中创建了一个脚本,使用 IE 填写网页中的一些输入,以便根据在输入框中输入的一些值到达新页面以检查某些项目的可用性。
引导您完成:脚本当前正在做什么:
- 从登录页面选择
Buy Bricks - 输入年龄
30和国家United Kingdom,然后点击submit按钮 - 在下一页上,在
Element/design数字框中输入乐高积木的唯一标识号以填充结果。
我的脚本可以满足上述所有要求。但是,当我尝试使用三个不同的数字时,例如
4219725、765467和230223,我可以看到中间的765467没有填充任何结果,但它会打印它的早期数字的结果.
这三个数字都已在我下面的脚本中的for loop 中使用。
如何让我的脚本在没有结果时不打印任何内容,而不是打印错误的结果?
到目前为止我的脚本:(无法退出硬编码延迟)
Sub GetDetails()
Const timeOut = 10
Dim IE As New InternetExplorer, Html As HTMLDocument
Dim elem As Object, post As Object, inputNum As Variant
Dim ageInput As Object, itm As Object, T As Date
With IE
.Visible = True
.navigate "https://www.lego.com/en-gb/service/replacementparts"
While .Busy Or .readyState < 4: DoEvents: Wend
Set Html = .document
Dim event_onChange As Object
Set event_onChange = .document.createEvent("HTMLEvents")
event_onChange.initEvent "change", True, False
Html.querySelectorAll(".arrow-list-info")(2).Click
Do: Set ageInput = Html.querySelector("input[id*='How old']"): DoEvents: Loop While ageInput Is Nothing
ageInput.innerText = 30
Html.querySelector("[label='United Kingdom").Selected = True
Html.querySelector("select").dispatchEvent event_onChange
Html.querySelector("[ng-click='startFlow()'").Click
While .Busy Or .readyState < 4: DoEvents: Wend
Set Html = .document
For Each inputNum In [{4219725,765467,230223}]
T = Timer
Do: Set post = Html.querySelector("[placeholder='Element/design number']"): DoEvents: Loop While post Is Nothing
post.ScrollIntoView
post.Focus
post.innerText = inputNum
Html.querySelector("button[ng-click='searchItemNumber()']").Click
'Can't kick out this hardcoded delay
Application.Wait Now + TimeValue("00:00:02")
Do
Set elem = Html.querySelector("div.list-item")
If Timer - T > timeOut Then Exit Do
DoEvents
Loop While elem Is Nothing
Set itm = Html.querySelector("h6.title")
If Not itm Is Nothing Then
Debug.Print itm.innerText
Else:
Debug.Print "Found Nothing"
End If
Next inputNum
Stop
End With
End Sub
【问题讨论】:
-
我不是 VBA 大师。在您打印“Found Nothing”的情况下,您是否需要在
Else之后使用:? -
不,我不需要,但我需要在没有结果时在电子表格中写一些东西@Priyank Panchal。谢谢。
-
手动输入有冲突的数字会产生什么结果?
-
No results@Luuklag. -
尝试用
If Not IsNull(itm) Then替换If Not itm Is Nothing Then,看看是否有帮助
标签: vba web-scraping internet-explorer-11