【问题标题】:VBA: Find and update Input field in HTML formVBA:在 HTML 表单中查找和更新输入字段
【发布时间】:2015-02-16 18:18:47
【问题描述】:

我正在尝试访问并在 HTML 表单的地址字段中输入文本字符串,然后单击提交表单按钮。我尝试使用:

Set ObjCollection = ObjIE.Document.getElementsByTagName("input")

但这不起作用,因为它只能找到输入标签,而我的输入字段似乎是列表的一部分。

这是似乎在 Javascript 中的 HTML 源代码:

 <script type="text/javascript"

我正在尝试访问输入 id="addressID" 并使用输入 type="button" id="SubmitForm" 提交(第 5 行和第 6 行):

<div id="searchbar">
  <form id="addressForm" action="#" onsubmit="" >
    <fieldset><legend>Locate address</legend>
        <ul class="formFields">
          <li><label for="address">Address</label><input id="addressID" size="60" class="text"      type="text" name="address" /></li>
          <li><input type="button" id="SubmitForm" value="Find address" class="form-button" /> </li>
       </ul>
   </fieldset>    
  </form>
  <form id="SolarViewForm" action="#"  id="sideseach">
   <fieldset><legend>Create SolarView</legend>
   <ul class="formFields">
   <li>
  <label for="latitude">Latitude</label>
  <input id="id_latitude" size="10" maxlength="30" type="text" name="latitude" />
</li>
<li>
  <label for="longitude">Longitude</label>
  <input id="id_longitude" size="10" maxlength="30" type="text" name="longitude" />
</li>
<li>
  <label for="zenith_angle">Panel tilt (degrees)-optional</label>
  <input id="id_zenith_angle" size="10" maxlength="30" type="text" name="zenith_angle" />
</li>
<li>
  <label for="azimuth_angle">Panel bearing (degrees)-optional</label>
  <input id="id_azimuth_angle" size="10" maxlength="30" type="text" name="azimuth_angle" />
</li>
<li>
  <label for="image_title">Image title</label>
  <input id="id_image_title" size="10" maxlength="30" type="text" name="image_title" />
</li>
<input type="hidden" name="_csrf_token" value="5e3de3851eafb868ee9f64e5ea1136e2" id="csrf_token"   />   <li><input type="button" id="create" class="form-button"
value="Create SolarView" /></li>

  </ul>
  </fieldset>
  </form>

   </div>

我想用这种方法更新字段并点击按钮:

SiteAddress = ActiveSheet.Range("B3").Value & ", " & ActiveSheet.Range("B4").Value & ", " & ActiveSheet.Range("B5").Value

Set ObjCollection = ObjIE.Document.getElementsByTagName("input")

i = 0
While i < ObjCollection.Length
    If ObjCollection(i).Name = "address" Then

        ObjCollection(i).Value = SiteAddress

    Else
            If ObjCollection(i).Type = "button" And _
            ObjCollection(i).ID = "SubmitForm" Then

        Set objElement = ObjCollection(i)

        End If
    End If
    i = i + 1
Wend
    objElement.Click

我一直在尝试收集一组标签以使用此代码遍历字段:

Set ObjCollection = ObjIE.Document.All.searchbar.getElementsByTagName("input")

我从这里的一篇非常好的帖子中得到了这个想法:

VBS: target fields by div and tabIndex from external .vbs

我感觉它更接近于解决我的问题,尽管这仍然只得出与以下相同的结果:

Set ObjCollection = ObjIE.Document.getElementsByTagName("input")

对我来说,很大一部分问题似乎是没有提出正确的问题,所以我花了很长时间试图找到这个问题的答案,如果能找到合适的答案,我将不胜感激。

【问题讨论】:

    标签: javascript html forms vba


    【解决方案1】:

    如果您想在地址文本框中输入文本,请使用:

    IE.document.getElementById("addressID").Value = "test"
    

    如果你想点击按钮使用这个:

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

    至少这对我有用。告诉我进展如何。

    【讨论】:

    • 考虑到我尝试过的数十次类似的失误,这既简单又令人惊叹。效果很好,非常感谢。
    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多