如何使用excel vba单击网页上的链接

时间:2014-07-08 17:54:03

标签: excel vba excel-vba web-scraping

我正在编写一个vba脚本,旨在从用户获取股票代码,导航到网站,输入股票代码并单击相应的链接。不幸的是,我在点击链接时遇到了麻烦。我已经研究了这个StackOverflow question and response,但是,我没有使用的非文本值。我也花了一个小时在网上研究潜在的解决方案而没有任何运气。

我的VB脚本如下:

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

我想点击的链接在页面来源中显示如下:

<a class="hqt_button" href="javascript:void(0): onclick=HeaderBox.trySubmit()"></a>

任何人都可以告诉我如何点击链接。该元素似乎没有名称,innertext或id,所以我不知道如何到达它。

编辑:

    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 

2 个答案:

答案 0 :(得分:6)

尝试获取锚标记的集合,其中包含:

GetElementsByTagName("a")

然后,使用尽可能多的逻辑迭代该集合,以确保您单击右键。

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

如果有多个具有相同类名的锚,您可以这样做:

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

<强>替代地

如果您使用的是IE9 +,则可以使用GetElementsByClassName方法。

GetElementsByClassName("hqt_button")   

答案 1 :(得分:1)

您还可以使用CSS selector

a.hqt_button[href='javascript:void(0): onclick=HeaderBox.trySubmit()']

"."表示className。 []包含一个属性。上面说的是hqt_button标签内具有属性href且值为'javascript:void(0): onclick=HeaderBox.trySubmit()'的className a


CSS查询:

CSS query


VBA中的语法:

CSS选择器通过HTMLDocument的[.querySelector][2]方法应用。

ie.document.querySelector("a.hqt_button[href='javascript:void(0): onclick=HeaderBox.trySubmit()']").Click