试图让VBA单击网页上的按钮

时间:2018-06-20 20:43:40

标签: vba excel-vba excel

我正在寻找帮助,以完成此代码,以便单击网页上的“开始”按钮。

这是网站上的代码

<span class="button-g">
   <a href="class=" autoCompleteGoButton" Style="margin:0 0 0 10px;"onclick="javascript:cfMainFormSubmit();">go</a>
</span>

这是我一直在尝试使用的代码。

'click the 'go' button
Set objInputs = IE.document.getElementsByTagName("a")
For Each ele In objInputs
If ele.Class Like "autoCompleteGoButton" Then
    ele.Click
End If
Next

以下是我正在使用的代码,这可能会有所帮助。

'start a new subroutine called SearchBot
Sub SearchBot()

    'dimension (declare or set aside memory for) our variables
    Dim objIE As InternetExplorer 'special object variable representing the IE browser
    Dim aEle As HTMLLinkElement 'special object variable for an <a> (link) element
    Dim y As Integer 'integer variable we'll use as a counter
    Dim result As String 'string variable that will hold our result link

    'initiating a new instance of Internet Explorer and asigning it to objIE
    Set objIE = New InternetExplorer

    'make IE browser visible (False would allow IE to run in the background)
    objIE.Visible = True

    'navigate IE to this web page (a pretty neat search engine really)
    objIE.navigate "https://factfinder.census.gov/faces/nav/jsf/pages/index.xhtml"

    'wait here a few seconds while the browser is busy
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

    'in the search box put cell "A2" value, the word "in" and cell "C1" value
    objIE.document.getElementById("cfsearchtextboxmain").Value = _
      Sheets("Sheet1").Range("B3").Value & ", " & Sheets("Sheet1").Range("B4").Value

    'click the 'go' button
     IE.document.getElementById("communityfactssubmit").Click

    'wait again for the browser
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

2 个答案:

答案 0 :(得分:0)

您需要在这里做的一件事。

是遍历HTML元素本身。

根据站点的结构,您有两个选择。

但是基于给定的屏幕截图。我将假定这是站点的层次结构或结构。

这里需要做的一件事是进入span标签的内部类,即“ button-g”,然后进入AutoCompleteGoButton类。

Dim spanElement as Object, buttonElement as Object

Set spanElement = IE.document.getElementsByClassName("button-g")
Set buttonElement = spanElement(0).getElementsByClassName("AutoCompleteGoButton")

buttonElement(0).Click

请注意,(0)是该元素的索引号。假定这些元素是唯一在网页上具有这些类名称的HTML元素。

答案 1 :(得分:0)

尝试

setSecondaryPhy()

似乎有一个ID,您可以使用:

HTML

这使用的是您提供的link,与您显示的HTML不同,该按钮确实具有ID。

如果没有立即找到该元素,请确保您正在等待页面加载:

IE.document.getElementById("communityfactssubmit").Click

尝试点击之前。

您可以使用

添加额外的等待时间
While IE.Busy Or IE.readyState < 4: DoEvents: Wend

编辑:

我刚刚成功测试了以下完整脚本:

Application.Wait Now + TimeSerial(0,0,2) '<==replace 2 with number of seconds to wait

更好的选择:使用免费的API

我也强烈建议您首先使用事实查找器来探索感兴趣的数据并注意感兴趣的特定变量/数据表,然后再转向使用API​​来处理这些请求。这样会更快更干净。

有一系列有关如何使用此API here的教程。

数据集信息here