使用 Excel VBA 如果元素存在则获取 web 元素,如果不存在则跳过
With Excel VBA get web element if element is present, skip if not
我对清理网页还比较陌生,但我已经掌握了窍门。我已经成功地使用以下命令从网页获取数据:
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText
sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
我的挑战是并非我搜索的所有网页都有这些元素,因此脚本停止并显示 运行-time error 424 - Object required.
我试过 On Error GoTo 命令,但它只适用于第一个事件,然后在第二个网页上停止,缺少元素。
那个代码是:
Next_sku:
Do
RowCount = RowCount + 1
SKU = sht.Range("a" & RowCount).Value
With ie
.Visible = False
.navigate "http://www.staples.no/search?keywords=" & SKU
Do While .Busy Or _
.readyState <> 4
DoEvents
Loop
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText
sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
On Error GoTo Next_sku
End With
Loop While sht.Range("a" & RowCount + 1).Value <> ""
任何人都可以帮我提供一个代码,该代码将 return 一个空白结果,手动输入如 f.eks "Does not exist" og 如果元素,则直接跳到下一个命令行是不存在的。最重要的是脚本没有停止
谢谢 :-)
我认为问题在于您的代码尚未从第一个错误中恢复。您无法在错误处理程序中检查错误。通过在您的代码中添加恢复语句,VBA 将不再认为您在错误处理程序中并且您的代码将恢复正常。
这是一个例子:
On Error GoTo Next_sku
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText
sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
Next_sku:
'Do something on error
Resume Next
如果未找到 SKU,以上代码将留下空白结果。您可以在 Next_sku:
标签后添加代码到 return "Does not exist".
您也可以尝试使用 on error resume next
语句。
非常感谢@Hubvill 找到答案。
代码 On Error Resume Next
解决了这个问题。我的代码现在如下所示:
Do
RowCount = RowCount + 1
SKU = sht.Range("a" & RowCount).Value
With ie
.Visible = False
.navigate "http://www.staples.no/search?keywords=" & SKU
Do While .Busy Or _
.readyState <> 4
DoEvents
Loop
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText
sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
On Error Resume Next
End With
Loop While sht.Range("a" & RowCount + 1).Value <> ""
结果是将该字段留空,并继续沿着列表 og SKU 查找并获取数据。
优秀的解决方案。
我对清理网页还比较陌生,但我已经掌握了窍门。我已经成功地使用以下命令从网页获取数据:
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText
sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
我的挑战是并非我搜索的所有网页都有这些元素,因此脚本停止并显示 运行-time error 424 - Object required.
我试过 On Error GoTo 命令,但它只适用于第一个事件,然后在第二个网页上停止,缺少元素。
那个代码是:
Next_sku:
Do
RowCount = RowCount + 1
SKU = sht.Range("a" & RowCount).Value
With ie
.Visible = False
.navigate "http://www.staples.no/search?keywords=" & SKU
Do While .Busy Or _
.readyState <> 4
DoEvents
Loop
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText
sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
On Error GoTo Next_sku
End With
Loop While sht.Range("a" & RowCount + 1).Value <> ""
任何人都可以帮我提供一个代码,该代码将 return 一个空白结果,手动输入如 f.eks "Does not exist" og 如果元素,则直接跳到下一个命令行是不存在的。最重要的是脚本没有停止
谢谢 :-)
我认为问题在于您的代码尚未从第一个错误中恢复。您无法在错误处理程序中检查错误。通过在您的代码中添加恢复语句,VBA 将不再认为您在错误处理程序中并且您的代码将恢复正常。
这是一个例子:
On Error GoTo Next_sku
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText
sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
Next_sku:
'Do something on error
Resume Next
如果未找到 SKU,以上代码将留下空白结果。您可以在 Next_sku:
标签后添加代码到 return "Does not exist".
您也可以尝试使用 on error resume next
语句。
非常感谢@Hubvill 找到答案。
代码 On Error Resume Next
解决了这个问题。我的代码现在如下所示:
Do
RowCount = RowCount + 1
SKU = sht.Range("a" & RowCount).Value
With ie
.Visible = False
.navigate "http://www.staples.no/search?keywords=" & SKU
Do While .Busy Or _
.readyState <> 4
DoEvents
Loop
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText
sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
On Error Resume Next
End With
Loop While sht.Range("a" & RowCount + 1).Value <> ""
结果是将该字段留空,并继续沿着列表 og SKU 查找并获取数据。
优秀的解决方案。