我是擦洗网页的新手,但我对它有所了解。我已成功使用以下命令从网页获取数据:
sht.Range("b" & RowCount).Value = .document.getElementById("PriceLabel").getElementsByTagName("span")(3).innerText
sht.Range("c" & RowCount).Value = .document.getElementById("QuantityInput").Value
我的挑战是,我搜索的所有网页都不具备这些元素,因此脚本会因运行时错误424 - 需要对象而停止。
我尝试过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 <> ""
任何人都可以帮我一个代码,它会返回一个空白结果,手动输入如f.eks“不存在”og只是跳到下一个命令行,如果元素是不存在的话。最重要的是脚本不会停止。
谢谢: - )
答案 0 :(得分:1)
我认为问题是您的代码没有从第一个错误中恢复。您无法在错误处理程序中检查错误。通过在代码中添加resume语句,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:
标签后添加代码以返回&#34;不存在&#34;。
您也可以尝试使用on error resume next
声明。
答案 1 :(得分:0)
非常感谢@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查找并抓取数据给他们。
卓越的解决方案。