如果元素存在,使用Excel VBA获取web元素,如果不存在则跳过
我在刷新网页方面比较陌生,但是我已经掌握了一些。 我用下面的命令成功地从网页获取数据:
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
我的挑战是,不是我search的所有网页都有这些元素,所以脚本停止运行时错误424 – 对象所需。
我已经尝试了一个On Error GoTo命令,但是这只适用于第一个事件,然后停在第二个缺less元素的网页上。
该代码是:
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 <> ""
任何人都可以帮助我一个代码,将返回一个空白的结果,手动input,如f.eks“不存在”og只要跳过到下一个命令行,如果该元素是不存在的。 最重要的是脚本不停止。
谢谢 :-)
我认为问题是你的代码没有从第一个错误恢复。 您不能在error handling程序中检查错误。 通过添加一个简历语句到您的代码,VBA将不再认为您在error handling程序内,您的代码将恢复正常。
这是一个例子:
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
如果没有findSKU,上面的代码将留下一个空白的结果。 您可以在Next_sku:
标签之后添加代码以返回“不存在”。
您也可以尝试使用on error resume next
语句。
非常感谢@Hubvillfind答案。
代码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 <> ""
结果是将该字段留空,并继续在SKU列表中查找并获取数据。
卓越的解决scheme。