我想在网站上应用下拉列表的值。
源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>
我已经尝试了以下所有选项来选择下拉列表。
我正在使用IE Version 11和MS Excel 2013。
答案 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
现在选择了选项项目,但是有时选择在视图中不可见。有时,这并不意味着在重新加载页面或用户按下页面上的其他按钮时会记录任何更改