Нажмите на переключатель на веб-странице с vba (проблема: ON и OFF имеют одно и то же имя) - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу щелкнуть переключатель «ВЫКЛЮЧЕНО» с помощью VBA. Попробуем:

IE.document.getElementByName("statusToSet").Item(1).Checked = True

Но это не помогает.

Не могли бы вы дать решение?

<label class="a-form-label">Turn FC Inbound check
<div class="a-radio a-radio-fancy" data-a-input-name="statusToSet">
<label>
<input name="statusToSet" type="radio" checked="checked" value="INBOUND">
<i class="a-icon a-icon-radio"></i>
<span class="a-label a-radio-label">On
</span>
</label>
</div>
<div class="a-radio a-radio-fancy" data-a-input-name="statusToSet">
<label>
<input name="statusToSet" type="radio" value="ONBOARDED">
<i class="a-icon a-icon-radio"></i>
<span class="a-label a-radio-label">Off
</span>
</label>
</div>
</label>

**

VBA код:

Sub test()
 Dim IE As Object
 Set IE = CreateObject("InternetExplorer.Application")
 lastrow = Range("A" & Rows.Count).End(xlUp).Row

 IE.Visible = True
 IE.Navigate "file:///C:/Users/shanaksh/Documents/My%20Received%20Files/Turn%20On_Off%20Inbound%20Check%20For%20Asins.htm"


 Do While IE.Busy
   Application.Wait DateAdd("s", 1, Now)
 Loop




 For Record = 2 To lastrow
 IE.document.getElementByName("statusToSet").Item(1).Checked = True
 Next Record



End Sub

HTML CODE OF THE RADIO BUTTON

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вы можете попробовать

ie.document.querySelector("[name=statusToSet]").checked  = True

или

ie.document.querySelector("[name=statusToSet]").click

Хотя вы хотите проверить для второй версии, что она в настоящее время не проверена.

И использоватьправильное ожидание, как уже упоминалось.

While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE: DoEvents :Wend
0 голосов
/ 20 февраля 2019

Не ответ, поддержка комментариев.

Что касается отладки, я бы сделал что-то вроде этого.Правильное именование элементов и т. Д. С использованием ссылок Microsoft html object library и Microsoft internet controls.

Sub x()

Dim ie As InternetExplorer
Dim c As HTMLInputElement
Dim c2 As HTMLElementCollection

set ie=new InternetExplorer

ie.navigate "URL"

While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE
    DoEvents
Wend

Set c = ie.document.getElementsByName("statusToSet")(0)
Set c2 = ie.document.getElementsByName("statusToSet")

End Sub

Существует два способа получения одного элемента или набора элементов с таким именем (https://www.w3schools.com/jsref/met_doc_getelementsbyname.asp)Это позволит мне увидеть, получен ли элемент input через опцию array (0) (c) и опцию collection (c2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...