在网络表单中选择可靠的下拉列表

时间:2019-04-22 19:01:06

标签: vba

   <pre>     
<select name="ctl00$ContentPlaceHolder1$ddlSection" 
onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$ddlSection\',\'\')', 0)" id="ctl00_ContentPlaceHolder1_ddlSection" class="Dropdown">

    <option value="0">----Select-----</option>
    <option selected="selected" value="131518424">A</option>
    <option value="131518425">B</option>
    <option value="131518426">C</option>
    <option value="131518427">D</option>
    <option value="131518428">E</option>
    <option value="131518429">F</option>
    <option value="131518430">G</option>
    <option value="131518431">H</option>
    <option value="131518432">I</option>
    <option value="131518433">J</option>

</select>
</pre>

2 个答案:

答案 0 :(得分:0)

您的代码不在此处运行,密码无效,但是您可以尝试类似的操作

   Dim opts As Object
    Dim opt As Object

    Set opts = IE.document.getElementsById("ctl00_ContentPlaceHolder1_ddldiability")

    For Each opt In opts
        If opt.innerText = "A" Then
            opt.Selected = True
            Exit For
        End If
    Next
    opts.FireEvent ("onchange")

答案 1 :(得分:0)

我将使用With syntax稍作重写。

理想地添加等待条件以使微调框消失,或者如果页面使用ajax,则可以尝试监视该条件是否完成,而不是显式等待(我已经使用过);传统的页面加载等待是不够的。尝试从下拉列表中进行选择之前的等待可能就足够了,但是您还可以附加要触发的事件,然后触发该事件。

将用户名包含在“”中,以便作为字符串文字传递。

最底层的通话应该使用getElementById,而不是getElementsById

您可以通过querySelector使用属性选择器进行下拉选择。

假设您的下拉菜单如下:

<select name="alphabetSoup" form="aForm">
<option value ="1">A</option>
<option value ="2">B</option>
<option value ="3">C</option>
</select> 	

您可以使用属性选择器,通过使用"A"属性和value属性值来定位value的选项:

ie.document.querySelector("[value='1']")

其中1是value的{​​{1}}标签元素的option属性的值

VBA:

"A"