Невозможно выбрать Radiobutton на веб-сайте, используя VBA - PullRequest
0 голосов
/ 06 июня 2018

Вот код, который я использую:

Sub Websitedata()
    Dim ie As Object
    Dim myURL As String
    myURL = "FIRST PAGE"

    Set ie = New InternetExplorerMedium
    ie.Visible = True
    ie.navigate myURL

    Do While ie.readyState <> 4 And ie.Busy
        DoEvents
    Loop

    'Selects a type from a dropdown bar
    ie.document.forms("actionForm").elements("dropdownbar").Value = "311"
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox1").Value = ""
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox2").Value = ""
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox3").Value = ""
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox4").Value = ""
    'Inputs data
    ie.document.forms("actionForm").elements("inputbox5").Value = ""
    'Pressed submit and goes to next page.
    ie.document.forms("actionForm").elements("_eventId_Search").Click
    'Needs to press a radiobutton.
    ie.document.getElementByName("declarationId").Click
End Sub

У меня проблема с переключением радиокнопки.Попробовал проверил, нажми, оцени все.

Вот HTML-код страницы:

<TABLE id=declarationList class="list sortable" cellSpacing=0 cellPadding=0 width="100%"><TBODY>
<TR class=header>
    <TH style="TEXT-ALIGN: center" align=center></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">Type<SPAN class=sortarrow sortdir="down">&nbsp;&nbsp;?</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">rts<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">tyi<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">trtjm<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">erch<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
    <TH><A onclick="ts_resortTable(this);return false;" class=sortheader href="">dft<SPAN class=sortarrow>&nbsp;&nbsp;&nbsp;</SPAN></A></TH>
</TR>
<TR class=evenRow>
    <TD style="TEXT-ALIGN: center" align=center><INPUT onclick="updateButtons('Import','GF','79295876',false,'null',false,true,true,false,false,false)" type=radio value=79295876 name=declarationId> </TD>
    <TD>IM A </TD>
    <TD>4561548 </TD>
    <TD>29/03/2018 </TD>
    <TD>32856 </TD>
    <TD>0313 </TD>
    <TD>40 00 , 40 00 </TD>
</TR>
</TBODY></TABLE>

Мне нужно выбрать переключатель, который появится на следующей странице.Должен ли я изменить какие-то данные в верхней части?Пожалуйста, дайте мне знать.Я сбит с толку.

Update - до сих пор нет ответа на этот запрос.Пожалуйста, помогите

1 Ответ

0 голосов
/ 06 июня 2018

Вы можете попробовать использовать селектор CSS

ie.document.querySelector("input[type=""radio""]").Click

Селектор CSS, протестированный с использованием HTML:

CSS query

Подробнее о селекторах CSS здесь: Селекторы CSS


Примечания:

Если страница обновляется по предварительному щелчку,затем вам может понадобиться, после этого щелчка, ввести ожидание:

Application.Wait Now + TimeSerial(0,0,3)
ie.document.querySelector("input[type=""radio""]").Click    

или

While .Busy = True Or .readyState < 4: DoEvents: Wend  
ie.document.querySelector("input[type=""radio""]").Click    

Комбинация вышеперечисленного или даже цикл с таймаутом, пытаясьустановите элемент для щелчка:

Dim a As Object, exitTime As Date
exitTime = Now + TimeSerial(0, 0, 5)

Do
    DoEvents
    On Error Resume Next
    Set a = IE.document.querySelector("input[type=""radio""]")
    On Error GoTo 0
    If Now > exitTime Then Exit Do
Loop While a Is Nothing

a.Click

Если открылось новое окно, вам нужно будет искать дескриптор этого окна или окно с наибольшим количеством (самое последнее).В SO есть подробные методы.

Вот пример зацикливания входных тегов, ищущих один с атрибутом type radio.Это зависит от того, есть ли у вас более одного, правильно ли он щелкает, но дает вам представление.

Option Explicit
Public Sub test()
    Dim n As HTMLDocument
    Set n = New HTMLDocument
    n.body.innerHTML = [A1]  '<== your sample of HTML place in a cell

    Dim aList As Object, item As Object
    Set aList = n.getElementsByTagName("input")
    For Each item In aList
        On Error Resume Next
        If InStr(item.getAttribute("type").innerText, "radio", 1) > 0 Then
            Debug.Print item.outerHTML
            item.Click
            Exit For
        End If
        On Error GoTo 0
    Next item
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...