Html 使用';elementbyID';当ID不';不存在?

Html 使用';elementbyID';当ID不';不存在?,html,vba,excel,web-scraping,Html,Vba,Excel,Web Scraping,你好,我下面有一些代码,可以从一个网站上刮取用户的数据 我正在努力解决的是,元素id并不总是存在于这个网站上(,这很好))-但如果是这样,我只希望返回值为£0 相反,我得到了所需的“运行时错误”424对象 这是因为我的ID“X123”不在网站上 任何帮助都将不胜感激 Option Explicit 子getdata() Dim wb作为对象 作为整数的Dim i 作为字符串的Dim sURL 将价格作为对象 将myValue设置为字符串 对于i=8至板材(“板材1”)。范围(“B34”)。值

你好,我下面有一些代码,可以从一个网站上刮取用户的数据

我正在努力解决的是,元素id并不总是存在于这个网站上(,这很好))-但如果是这样,我只希望返回值为£0

相反,我得到了所需的“运行时错误”424对象

这是因为我的ID“X123”不在网站上

任何帮助都将不胜感激

Option Explicit
子getdata()

Dim wb作为对象
作为整数的Dim i
作为字符串的Dim sURL
将价格作为对象
将myValue设置为字符串
对于i=8至板材(“板材1”)。范围(“B34”)。值
Set wb=CreateObject(“internetExplorer.Application”)
sURL=单元(i,1)
wb.导航sURL
wb.Visible=False
当wb.Busy=True或wb.ReadyState 4:DoEvents:Loop时执行
设置getprice=wb.Document.getElementById(“X123”)
myValue=getprice.innerText
表(“表1”)。单元格(i,2)。值=myValue
wb.退出
设置wb=Nothing
接下来我

End Sub

添加一些错误处理

On Error Resume Next
Set getprice = wb.Document.getElementById("X123")
On Error GoTo 0

If getPrice Is Nothing Then 
    myValue = "£0"  '<=Assuming £ is included and not formatted in sheet
Else
    myValue = getprice.innerText
End If
出错时继续下一步
设置getprice=wb.Document.getElementById(“X123”)
错误转到0
如果getPrice什么都不是

myValue=“£0””添加一些错误处理

On Error Resume Next
Set getprice = wb.Document.getElementById("X123")
On Error GoTo 0

If getPrice Is Nothing Then 
    myValue = "£0"  '<=Assuming £ is included and not formatted in sheet
Else
    myValue = getprice.innerText
End If
出错时继续下一步
设置getprice=wb.Document.getElementById(“X123”)
错误转到0
如果getPrice什么都不是

myValue=“£0””您可能希望了解如何帮助您的代码更容易理解,尤其是当涉及嵌套块时。如果不为null(wb.Document.getElementById(“X123”)),请进行额外检查
,然后“。。。做这些事…
@omegastripes-如果你把它作为一个答案,那么我会投票支持它(这解决了它!)。我确实必须在wb.quit之前输入myValue=0,以确保在返回代码之前该值至少为0。@Boswell您可以对其中任何一个进行投票。您可能希望了解如何帮助您的代码更易于理解,尤其是在涉及嵌套块的情况下。如果不为null(wb.Document.getElementById(“X123”),请进行额外检查
))然后。。。做这些事…
@omegastripes-如果你把它作为一个答案,那么我会投票支持它(这解决了它!)。我必须在wb.quit之前输入myValue=0,以确保在返回代码之前该值至少为0。@Boswell您可以向上投票任何一个。很抱歉,这起作用了。。。但在第7次迭代中,它停止了工作,我得到了一个“运行时错误”-2147[大数字…]自动化错误“。。。调试直接指向“myValue=getprice.innerText”行请包含完整的错误文本消息。您是否能够在没有分配的情况下打印getprice.innerText?如果是,它的价值是什么?你能分享失败案例的URL吗?这可能只是扩展错误处理的一种情况。我无法预测您将遇到的所有错误,因此您需要对基本错误处理进行一些研究,以便在中添加您自己的案例。谢谢,但我问题中的注释最终仍然有效。它解决了新问题。我的代码如前所述解决了问题,但这很好。您不必:-),但如果您添加自己的答案,详细说明对您有效的最终场景,并解释为什么需要额外的测试,则可能会很有用。如果有帮助的话,你可以投我的一票。我的主题是正确的,那就是你需要错误处理,我解释了你给出的案例。很抱歉,这是有效的。。。但在第7次迭代中,它停止了工作,我得到了一个“运行时错误”-2147[大数字…]自动化错误“。。。调试直接指向“myValue=getprice.innerText”行请包含完整的错误文本消息。您是否能够在没有分配的情况下打印getprice.innerText?如果是,它的价值是什么?你能分享失败案例的URL吗?这可能只是扩展错误处理的一种情况。我无法预测您将遇到的所有错误,因此您需要对基本错误处理进行一些研究,以便在中添加您自己的案例。谢谢,但我问题中的注释最终仍然有效。它解决了新问题。我的代码如前所述解决了问题,但这很好。您不必:-),但如果您添加自己的答案,详细说明对您有效的最终场景,并解释为什么需要额外的测试,则可能会很有用。如果有帮助的话,你可以投我的一票。我的主题是正确的,那就是你需要错误处理,我解释了你给出的案例。