在Internet Explorer中的网站上应用下拉列表的值

时间:2016-03-29 19:45:58

标签: html excel vba

我想在网站上应用下拉列表的值。

源HTML代码中有一个按钮标记。单击按钮(button.click)后,我从Option标签中选择所有标记为“dropdownAvailable”的标记的下拉值。

虽然下拉列表的值似乎有所变化,但页面不会相应更改。

Select标记的HTML代码如下所示。

    <select name="dropdown_selected_size" autocomplete="off" data-a-touch-header="Size" id="selected_size" class="a-native-dropdown">
        <option id="native_size_-1" data-a-id="size_-1" selected>Select</option>
        <option class="dropdownAvailable" id="native_size_0" data-a-id="size_0" data-a-html-content="40.5">40.5</option>
        <option class="dropdownUnavailable" id="native_size_1" data-a-id="size_1" data-a-html-content="40.5">40.5</option>
        <option class="dropdownAvailable" id="native_size_2" data-a-id="size_2" data-a-html-content="41">41</option>
        <option class="dropdownUnavailable" id="native_size_3" data-a-id="size_3" data-a-html-content="41">41</option>
        <option class="dropdownAvailable" id="native_size_4" data-a-id="size_4" data-a-html-content="42">42</option>
    </select>

我已经尝试了以下所有选项来选择下拉列表。

  1. ie.document.getElementById( “selected_size”)。平变化
  2. ie.document.getElementById(“selected_size”)。FireEvent(“onchange”)
  3. ie.document.getElementById( “selected_size”)。的getElementsByTagName( “选项”)(N)。点击
  4. ie.document.getElementById( “selected_size”),点击
  5. Application.SendKeys“{TAB}”
  6. Application.SendKeys“{ENTER}”
  7. Application.SendKeys“〜”
  8. 我正在使用IE Version 11和MS Excel 2013。

2 个答案:

答案 0 :(得分:0)

尝试类似这样的事情,在每次与网站交互后我对于readystate非常偏执,有时即使这还不够,只有在某些加载窗口消失后才需要执行代码。您还必须记住,IE在下拉菜单方面遇到大麻烦,并且通常需要双击下拉值才能选择它。

'requires Microsoft HTML Object Library, Microsoft Internet Controls reference

Dim htmlele As ihtmlelement
Dim colele As IHTMLElementCollection
Dim ie As Object

Set ie = CreateObject("InternetExplorer.Application")

'navigating and other code

Do Until ie.ReadyState = READYSTATE_COMPLETE And ie.Busy = False
    DoEvents
Loop

set htmlele = ie.document.getElementByID("selected_size")
htmlele.click

Do Until ie.ReadyState = READYSTATE_COMPLETE And ie.Busy = False
    DoEvents
Loop

Set colele = ie.document.getElementsByTagName("option")
For Each htmlele In colele
    If htmlele.className = "dropdownAvailable" Then
        htmlele.click
        Do Until ie.ReadyState = READYSTATE_COMPLETE And ie.Busy = False
          DoEvents
        Loop
        'the code       
    End If
Next htmlele

答案 1 :(得分:0)

在自动执行DOM时,我总是尽量避免使用sendKey函数。 UI中总是存在无法预料的延迟,正确的元素必须处于活动状态,并且IE窗口必须是当前处于活动状态的OS窗口。这意味着您无法轻松调试代码。 相反,您应该尝试选择选项元素并将属性设置为selected。像这样

Set list = ie.document.querySelectorAll(".dropdownAvailable option")
For Each option in list 
 if option.innerText = yourMatchStr Then
  call option.setAttribute("selected", "selected")
  Exit For
 end if 
next option

现在选择了选项项目,但是有时选择在视图中不可见。有时,这并不意味着在重新加载页面或用户按下页面上的其他按钮时会记录任何更改