2013-09-24 37 views
0

我很难找出如何使用vba自动点击位于网页中的一组标签之一的按钮。试图点击一个按钮之内的一个网页使用vba

我在firefox中使用inspect元素来找出我想要点击的按钮的元素ID(这是“runscreen”,但当查看实际网页的源代码时,我无法找到此元素ID,此按钮也会分享此元素id与另一个选项卡上的另一个按钮,两个按钮与它们的innertext和“runscreen”具有相同的“run”作为它们的元素id,但是具有不同的元素hid。我无法弄清楚为什么可以通过检查按钮来查看元素id但是不能通过选择使用ie或firefox查看网页的源代码来查看,我的Excel版本是2010,我使用的是ie9。网页代码中唯一隐藏的部分是处理元素的部分我认为这可能与

img src="/images/new/ajax-loader-trans.gif"

我第一次尝试这样的代码:

'IE.document.getElementById("runscreen").click

,因为该元素的ID是不是直接在网页源代码,但隐藏在VBA回来,我猜测“所需的对象”的错误不知何故

那我就

Call IE.document.parentWindow.execScript("runscreen()", "JavaScript")

我觉得这个页面在点击按钮时会以某种方式使用一个函数,但我无法弄清楚这是否是这种情况。 我一直在寻找解决方案来点击按钮,但一直无法弄清楚。任何帮助将不胜感激。

这里是我找到代码时,我用Firefox来检查我试图单击该元素(但是这个代码是不可见的,当我选择IE/Firefox的查看源):

<a id="runScreen" class="general-button general-button-green help-enabled" href="javascript: void(jsScreen.runScreen(true));" onfocus="blur();" hid="screen-rules-run"> 
<span> 
    Run 
</span> 

和这里(查看网页源代码时仅此代码的第一行是可见的)

<div id="screentabcontent" class="tabs-nav-content ui-corner-bottom"> 
<div id="freeform-cont"> 
    <div class="vocab-ref"> … </div> 
</div> 
<div id="screen-criteria-section"> 
    <div id="commonCont"> 
     <div id="commonButtons" style="padding-bottom:4px; float:left; "> … </div> 
     <div style="text-align:right"> 
      <span class="parameterTitle"> … </span> 
      <span class="parameterValue"> … </span> 
      <span style="padding-left: 10px"> 
       <a id="runScreen" class="general-button general-button-green help-enabled" href="javascript: void(jsScreen.runScreen(true));" onfocus="blur();" hid="screen-rules-run"> 
        <span> … </span> 
       </a> 
      </span> 
      <span style="padding-left: 5px"> … </span> 
      <span id="universeTotal" class="universe-subtotal"> … </span> 
     </div> 
     <div id="commonRules" style="clear:both; zoom: 1"> … </div> 
    </div> 

这里更多的是周围的代码是为选项卡中的代码,VI当我在ie/firefox中选择查看源时会出现错误,我尝试点击的按钮位于"rules"选项卡中,其中元素ID为"scrtab_1"。这段代码的最后一部分部分与上面的代码的第一部分相匹配:

<div id="screentabs" style="zoom: 1;"> 


      <div class="tabs-nav"> 
       <table cellpadding="0" cellspacing="0" border="0"><tr> 
        <td class="toggle-width"><a href="javascript:void(jsScreen.toggleWide());" onfocus="blur()"><img id="toggleScrWidth" src="/images/new/width-wide.gif" width="16" height="16" border="0" title="Toggle Display Width" alt=""/></a></td> 
        <td ><a id="scrtab_0" class="scr-tab-link help-enabled" hid="screen-about-user" href="javascript: void(0);" onfocus="blur()">About</a></td> 
        <td ><a id="scrtab_5" class="scr-tab-link help-enabled" hid="screen-notes" href="javascript: void(0);" onfocus="blur()">Notes</a></td> 

         <td ><a id="scrtab_7" class="scr-tab-link help-enabled" hid="screen-notes" href="javascript: void(0);" onfocus="blur()">Main Settings</a></td> 

        <td class="on"><a id="scrtab_1" class="scr-tab-link help-enabled" hid="screen-rules" href="javascript: void(0);" onfocus="blur()">Rules</a></td> 

         <td ><a id="scrtab_6" class="scr-tab-link help-enabled" hid="screen-hedge" href="javascript: void(0);" onfocus="blur()">Hedge Rules</a></td> 
         <td ><a id="scrtab_2" class="scr-tab-link help-enabled" hid="screen-results" href="javascript: void(0);" onfocus="blur()">Results</a></td> 
         <td ><a id="scrtab_3" class="scr-tab-link help-enabled" hid="screen-backtest" href="javascript: void(0);" onfocus="blur()">Backtest</a></td> 
         <td ><a id="scrtab_4" class="scr-tab-link help-enabled" hid="screen-advancedbacktest" href="javascript: void(0);" onfocus="blur()">Advanced Backtest</a></td> 

       </tr></table> 
      </div> 


      <div id="screentabcontent" class="tabs-nav-content ui-corner-bottom"><div align="center"><img src="/images/new/ajax-loader-trans.gif" alt="loading"></div></div> 
     </div> 
    </div> 

</div> 


回答

0

您需要遍历具有ID runScreen的每一个元素,然后找到使用类名是正确的哪些在锚元素内部,像下面的东西(未测试)

Dim elementcollection as htmlelementcollection 

Set htmlelementcollection=Ie.Document.GetElementById("runScreen").GetElementsByTagName("a") 

Dim element as htmlelement 

For Each element In elementcollection 
       Dim Str As String = element.GetAttribute("className") 
       If element.GetAttribute("className") = "general-button general-button-green help-enabled" Then 
        element.InvokeMember("Click") 
    Do Until Ie.readyState = 4 
    DoEvents 
    Loop 
        Exit For 
       End If 
Next