检查 VBA 页面上是否存在元素
Check with VBA if an element exists on the page
我有 15,000 种产品,我需要知道它们是 X、Y 还是 Z。下面的代码在亚马逊上检查产品是否属于 XYZ 类型。
大神帮帮我,果然有效。唯一的例外是当它搜索亚马逊不再销售的产品时。然后页面上不存在我要查找的包含我正在搜索的产品描述的元素 ID,并且代码在第
行中断
text = document.getelementbyID("result_0").innertext
错误 "Object variable or With block variable not set"。
如何在继续执行其余代码之前检查元素是否存在?
谢谢!
山姆
Sub LetsAutomateIE()
Dim barcode As String
Dim rowe As Integer
Dim document As HTMLDocument
Set ie = CreateObject("InternetExplorer.Application")
Dim Element As HTMLDivElement
Dim text As String
Dim pos As Integer
rowe = 2
While Not IsEmpty(Cells(rowe, 2))
barcode = Cells(rowe, "B").Value
With ie
.Visible = False
.navigate2 "https://www.amazon.co.uk/s/ref=nb_sb_noss_1?url=search-
alias%3Daps&field-keywords=" & barcode
Do Until ie.readyState = 4
Loop
End With
Set document = ie.document
text = document.getElementById("result_0").innerText
If InStr(text, "X") Or InStr(text, "Y") Or InStr(text,
"Z") <> 0 Then pos = 1
If pos <> 0 Then Cells(rowe, 4) = "Y" Else Cells(rowe, 4) = "N"
rowe = rowe + 1
Wend
Set ie = Nothing
End Sub
你可以尝试这样的事情。
Function objectHandler(objID)
Dim TestObj As Object
On Error GoTo Handler:
Set TestObj = ObjIE.document.getElementById(objID)
objectHandler = True
Exit Function
Handler:
objectHandler = False
End Function
Ryan 的回答是正确的。
设置元素 = document.getelementbyID("result_0")
感谢您的解决方案。我使用如下,
If IsObject(objIE.document.getElementById("e164NumberMask")) Then
'do true stuff
Else
'do false stuff
End If
如果最佳答案对其他人不起作用,请发布替代方案:
在使用 IsObject()
检查后,我仍然收到 运行 时间错误“91”
如果 ObjIE 是一个 InternetExplorer 对象,IsObject() 可以正常工作,但我使用的是 InternetExplorerMedium 对象,并且不得不用它来验证,因为它返回的是一个空对象:
If Not objIE.document.getElementById("e164NumberMask") Is Nothing Then
'do true stuff
Else
'do false stuff
End If
我有 15,000 种产品,我需要知道它们是 X、Y 还是 Z。下面的代码在亚马逊上检查产品是否属于 XYZ 类型。
大神帮帮我,果然有效。唯一的例外是当它搜索亚马逊不再销售的产品时。然后页面上不存在我要查找的包含我正在搜索的产品描述的元素 ID,并且代码在第
行中断text = document.getelementbyID("result_0").innertext
错误 "Object variable or With block variable not set"。
如何在继续执行其余代码之前检查元素是否存在?
谢谢!
山姆
Sub LetsAutomateIE()
Dim barcode As String
Dim rowe As Integer
Dim document As HTMLDocument
Set ie = CreateObject("InternetExplorer.Application")
Dim Element As HTMLDivElement
Dim text As String
Dim pos As Integer
rowe = 2
While Not IsEmpty(Cells(rowe, 2))
barcode = Cells(rowe, "B").Value
With ie
.Visible = False
.navigate2 "https://www.amazon.co.uk/s/ref=nb_sb_noss_1?url=search-
alias%3Daps&field-keywords=" & barcode
Do Until ie.readyState = 4
Loop
End With
Set document = ie.document
text = document.getElementById("result_0").innerText
If InStr(text, "X") Or InStr(text, "Y") Or InStr(text,
"Z") <> 0 Then pos = 1
If pos <> 0 Then Cells(rowe, 4) = "Y" Else Cells(rowe, 4) = "N"
rowe = rowe + 1
Wend
Set ie = Nothing
End Sub
你可以尝试这样的事情。
Function objectHandler(objID)
Dim TestObj As Object
On Error GoTo Handler:
Set TestObj = ObjIE.document.getElementById(objID)
objectHandler = True
Exit Function
Handler:
objectHandler = False
End Function
Ryan 的回答是正确的。
设置元素 = document.getelementbyID("result_0")
感谢您的解决方案。我使用如下,
If IsObject(objIE.document.getElementById("e164NumberMask")) Then
'do true stuff
Else
'do false stuff
End If
如果最佳答案对其他人不起作用,请发布替代方案:
在使用 IsObject()
检查后,我仍然收到 运行 时间错误“91”如果 ObjIE 是一个 InternetExplorer 对象,IsObject() 可以正常工作,但我使用的是 InternetExplorerMedium 对象,并且不得不用它来验证,因为它返回的是一个空对象:
If Not objIE.document.getElementById("e164NumberMask") Is Nothing Then
'do true stuff
Else
'do false stuff
End If