【问题标题】:vba skip nonexisting elements from getElementsByTagName() to prevent errorvba 从 getElementsByTagName() 中跳过不存在的元素以防止错误
【发布时间】:2020-07-27 16:01:11
【问题描述】:

我有这个:

<table class="series">
    <tr><th>1.</th><td><div><a href="?test1">Link1</a></div></td></tr>
    <tr><th>2.</th><td><b>Link2</b></td></tr>
    <tr><th>3.</th><td><div><a href="?test3">Link3</a></div></td></tr>
</table>

我需要遍历每一个才能找到没有 url 链接的位置。

dim serieTest as Object
If element.tagName = "TABLE" And element.className = "series" Then
    Set data_series = element.getElementsByTagName("td")
    For Each serie In data_series
        Set serieTest = serie.getElementsByTagName("a")(0).href
        If Not (serieTest Is Nothing) Then
            debug.print "link found!"
        Else
            debug.print "link NOT found!"
        End If
        Set serieTest = Nothing
    Next
    Set data_series = Nothing
End If

但我有错误:

Run-time error '91': Object variable or With block variable not set

在线:

Set serieTest = serie.getElementsByTagName("a")(0).href

知道如何防止这种情况吗? 我试图将 On Error Resume Next 放在错误行上方,但随后它直接进入“ELSE”,因为它没有分配任何内容,因此“serie”我总是为空。

【问题讨论】:

  • 是的,当然,所有这些都将正确关闭并标记正确答案。我正在做一个巨大的项目,所以有些问题看起来相似或相同,但是它们都有不同的应用程序

标签: html vba web-scraping error-handling getelementsbytagname


【解决方案1】:

当你得到一个 href 值时,它是一个字符串而不是一个对象。您可以按如下方式重写您的代码(尽管我会向您推荐我之前对您的一个问题的回答,该问题使用辅助函数和选择案例可以更好地处理这种情况):

Dim serieTest As Object, serieHref As String

If element.tagName = "TABLE" And element.className = "series" Then

    Set data_series = element.getElementsByTagName("td")

    For Each serie In data_series

        serieHref = "link NOT found!"

        If serie.getElementsByTagName("a").Length > 0 Then

            Set serieTest = serie.getElementsByTagName("a")(0) 'object

            If serieTest.hasattribute("href") Then
                serieHref = serieTest.href
                Debug.Print "link found!"
            End If
        End If
        Debug.Print serieHref
    Next

End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    相关资源
    最近更新 更多