Get attribute string value from html

12,594
Set imgObj = tdObj.getElementsByTagName("img")

returns a collection of images (even if there's only one to be found), so you can address a specific image using (eg):

dataArray(i, j) = imgObj(0).getAttribute("title")
Share:
12,594
Yeqing Zhang
Author by

Yeqing Zhang

Updated on June 08, 2022

Comments

  • Yeqing Zhang
    Yeqing Zhang almost 2 years

    I am building a macro to extract data from website using . Currently I can easily get value from table content using element syntax like obj.getElementsByTagName("td").innerText. However, when there are some non-innerText data in some cells, I am getting trouble. It's like this:

    <img src="/images/amber_pending.gif" border="0" alt="Pending" title="Pending">
    

    I attempted to extract the attribute value from "title" using syntax I found from others:

    For Each tbObj In doc.getElementsByClassName("report removeTdBorder")
        i = 1
        For Each trObj In tbObj.getElementsByTagName("tr")
            If i >= 3 Then
                j = 1
                For Each tdObj In trObj.getElementsByTagName("td")
                    If j = 1 Then
                        Set imgObj = tdObj.getElementsByTagName("img")
                        dataArray(i, j) = imgObj.getAttribute("title")
                        Debug.Print imgObj.getAttribute("title")
                        ActiveCell.Offset(0, j) = dataArray(i, j)
                        ActiveCell.Offset(0, j).WrapText = False
                    Else
                        dataArray(i, j) = tdObj.innerText
                        Debug.Print i & ", " & j & ": " & dataArray(i, j)
                        ActiveCell.Offset(0, j) = dataArray(i, j)
                        ActiveCell.Offset(0, j).WrapText = False
                    End If
                    j = j + 1
                Next tdObj
                ActiveCell.Offset(1, 0).Activate
            End If
            i = i + 1
        Next trObj
    Next tbObj
    

    But this code goes error every time and it said "Run-time error '438': Object doesn't support this property or method" at the line dataArray(i, j) = imgObj.getAttribute("title"). Could some one help me?

  • Yeqing Zhang
    Yeqing Zhang over 11 years
    thanks for helping. however, it seems this one not working as well. it said "Run-time error '91': Object variable or With block variable not set" for dataArray(i, j) = imgObj(1).getAttribute("title"). is there any other reason?
  • barrowc
    barrowc over 11 years
    I think that IXMLDOMNodeList is zero-based so imgObj(0).getAttribute("title") should work
  • Yeqing Zhang
    Yeqing Zhang over 11 years
    Thanks @barrowc!! this works!! and thanks @Tim Williams for your awesome solution as well!