How do I click a link on a web page using Excel VBA?

excel, vba, web-scraping

Solution

Try getting the collection of anchor tags, with:

GetElementsByTagName("a")

Then, iterate that collection using as much logic as you can to ensure you're clicking the right button.

For each l in ie.document.getElementsByTagName("a") 
    If l.ClassName = "hqt_button" Then
        l.Click
        Exit For
    Next

If there are multiple anchors with the same classname, you could do:

    If l.ClassName = "hqt_button" AND l.Href = ""javascript:void(0): onclick=HeaderBox.trySubmit()" Then
        l.Click
        Exit For
    Next

Alternatively

If you are using IE9+ you could use the `GetElementsByClassName` method.

GetElementsByClassName("hqt_button")   

Problem

I'm writing VBA code to obtain a ticker symbol from a user, navigate to a website, input the ticker symbol and click the appropriate link. I researched this StackOverflow question and response, however, I don't have an innertext value to utilize. My VBA code: ``` Sub clicklick() Dim ie As Object Dim form As Variant, button As Variant Set ie = CreateObject("InternetExplorer.Application") ticker = InputBox("Enter Ticker Symbol: ") With ie .Visible = True .Navigate ("http://www.SITE_URL.com") While ie.ReadyState <> 4 DoEvents Wend ie.document.getElementsbyName("sSrchTerm").Item.innertext = ticker End With End Sub ``` The link appears as follows in the page source: ``` <a class="hqt_button" href="javascript:void(0): onclick=HeaderBox.trySubmit()"></a> ``` The element doesn't seem to have a name, innertext or id. How can I click the link? EDIT: ``` Set Link = ie.document.getElementsByTagName("a") For Each l In Link If Link.classname = "hqt_button" Then Link.Click Exit For End If Next l ```

Original source