Выберите надежный выпадающий список в веб-форме - PullRequest
0 голосов
/ 22 апреля 2019
<code>   <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>

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Я бы немного переписал, используя 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 элемента тега option для "A"

VBA:

Option Explicit

Public Sub FillForm()
    Dim ie As Object, tool As Workbook

    Set tool = ActiveWorkbook
    Set ie = CreateObject("InternetExplorer.application")

    With ie
        .Visible = True
        .Navigate2 "https://student.udise.in/"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document
            .getElementById("txtUserName").Value = "username"
            .getElementById("txtPassword").Value = "password"
            .getElementById("btnSubmit").Click
        End With

        While .Busy Or .readyState < 4: DoEvents: Wend

        .Navigate2 "https://student.udise.in/Userscreens/Profilenew4.aspx"

        While .Busy Or .readyState < 4: DoEvents: Wend

        Dim evt As Object
        Set evt = .document.createEvent("HTMLEvents")
        evt.initEvent "change", True, False

        With .document.querySelector("[value='536']")
            .Selected = True
            .dispatchEvent evt
        End With

        Application.Wait Now + TimeSerial(0, 0, 2)

        With .document.querySelector("[value='131518424']") '< insert option A value attribute value here. Same as shown for 536 above.
            .Selected = True
            .dispatchEvent evt
        End With

        Application.Wait Now + TimeSerial(0, 0, 2)

        With .document
            .getElementById("ctl00_ContentPlaceHolder1_ddldiability").Focus
            .getElementById("ctl00_ContentPlaceHolder1_ddldiability").selectedIndex = 2
            .getElementById("ctl00_ContentPlaceHolder1_ddldiability").FireEvent "onchange"
        End With

        Application.Wait Now + TimeSerial(0, 0, 1)

        Stop

        '.Quit
    End With
End Sub
0 голосов
/ 22 апреля 2019

Ваш код не запускается здесь, неверный пароль, но вы можете попробовать что-то подобное

   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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...