How to get the last child of an HTMLElement

时间:2016-07-11 20:50:24

标签: excel vba excel-vba

I have written a macro in Excel that opens and parses a website and pulls the data from it. The trouble I'm having is once I'm done with all of the data on the current page I want to go to the next page. To do this I want to get the last child of the "result-stats" node. I found the lastChild function, and so came up with the following code:

'Checks to see if there is a next page
If html.getElementById("result-stats").LastChild.innerText = "Next" Then
    html.getElementById("result-stats").LastChild.Click
End If

And here is the HTML that it is accessing:

<p id="result-stats">
    949 results
    <span class="optional"> (1.06 seconds)</span>
    <a href="/?query=omni%3DOklahoma%2BEnergy%2BAcquisitions" title="Modify your search">Modify search</a>
    <a href="#" id="toggle-show">Show more columns</a>
    <a href="/results/omni=Oklahoma+Energy+Acquisitions/page-2">Next</a>
</p>

When I try to run this, I get an error. After a lot of searching I think I found the reason. According to what I read, getElementById returns an element and not a node. lastChild only works on nodes, which is why the function doesn't work here.

My question is this. Is there a clean and simple way to grab the last child of an element? Or is there a way to typecast an element to that of a node? I feel like I'm missing something obvious, but I've been at this way longer than I should have been. Any help anyone could provide would be greatly appreciated.

Thanks.

1 个答案:

答案 0 :(得分:0)

Here's a shell of how to do it. If my comments are not clear, ask away. I assumed knowledge of how to navigate to the page, wait for the browser, etc.

Sub ClickLink()

Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")

'load up page and all that stuff

'process data ...

'click link
Dim doc As Object
Set doc = IE.document

Dim aLinks As Object, sLink As Object

For Each sLink In doc.getElementsByTagName("a")

    If sLink.innerText = "Next" Then 'may need to play with this, if `innerttext' doesn't work
        sLink.Click
        Exit For
    End If

Next

End Sub