Что нового

Нажать на RadioButton на странице

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Есть вот такой элемент

Код:
<li>
	<input type="radio" id="channel-master" name="channel-token" data-token="MRC" data-paymethod="credit-card" value="mastercard">
	<label for="channel-master" hidefocus="true">
		<span class="channel-logo MRC" title="MasterCard"></span>
		<span>MasterCard</span>
	</label>
</li>

Как программно нажать на него, пробовал искать ссылку по слову MasterCard и нажать и пробовал искать по id элемента, ни первый ни второй вариант не работает.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
_IEFormElementRadioSelect($oForm, "mastercard", "channel-master", 1, "byValue") ; Select the element
_IEFormElementRadioSelect($oForm, "mastercard", "channel-master", 0, "byValue") ; Unselect the element
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Garrett

Спасибо, сейчас нет возможности проверить, так как если 4 - 5 раз подряд обращусь к странице, появляется капча и макрос не может дальше двигаться в связи с отсутствием OCR, но через некоторое время, капча проходить, тогда и протестирую.

И кстати, там нет формы, как тогда быть, указывать $oIE ?
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ну не знаю, может не увидел, вообщем прилагаю *.htm код страницы и screenshot, нужно программно нажать на "вкладку" MasterCard.

P.S. Одна из страниц сайта AliExpress, думаю многие о нём знают и писали для него макросы, если есть готовый код для автоматизации оформления заказа, поделитесь пожалуйста, ну не получается у меня нажать на radio button.
 

Вложения

  • Оформление заказа.zip
    77.7 КБ · Просмотры: 6

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Viktor1703,
Попробуйте сделать примерно так.
Код:
#include <IE.au3>

Local $sUrl = @ScriptDir & '\Оформление заказа.htm', $oIE, $oRadio

$oIE = _IECreate($sUrl)
$oRadio = _IEGetObjById($oIE, 'channel-master')
If (IsObj($oRadio)) And ($oRadio.GetAttribute('type') == 'radio') Then
;~ 	ConsoleWrite($oRadio.checked & @LF)
	If Not $oRadio.checked Then $oRadio.checked = True
;~ 	ConsoleWrite($oRadio.checked & @LF)
EndIf



Добавлено:
Сообщение автоматически объединено:

Viktor1703 [?]
там нет формы, как тогда быть, указывать $oIE ?
alex33 [?]
$oIE указывать нельзя, т.к. в функции _IEFormElementRadioSelect() идет проверка на тип объекта (должен быть form - HTMLFormElement).
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
madmasles

Не работает, как будто не может найти этот элемент, в некоторых случаях это было связано с тем что страница загрузилась, но не отобразилась, т.е. php или JavaScript не отобразили ещё те элементы, поэтому мне пришлось делать так:

Код:
$iTimer = TimerInit()
While True
	If (TimerDiff($iTimer) >= 40000) Then
		Exit MsgBox(16, '', '')
	EndIf

	$oRadio = $oIE.document.getElementById('channel-master')
	If (IsObj($oRadio)) And ($oRadio.GetAttribute('type') == 'radio') Then
		If Not $oRadio.checked Then
			$oRadio.checked = True
			Exit MsgBox(0, '', 'Ok selected')
		EndIf
	EndIf
Wend


Но в случае с channel-master, такой способ не работает, я не знаю с чем это могло бы быть связано.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Viktor1703 [?]
Не работает, как будто не может найти этот элемент
Здесь я ничем не могу помочь, т.к. писал пример с Вашей сохраненной страницей, а с ней у меня все это работает.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
madmasles

С сохранённой у меня тоже работает, неужели придётся использовать MouseClick ...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Viktor1703,
А так что напишет?
Код:
;~ ...
If IsObj($oRadio) Then
	ConsoleWrite('type: ' & $oRadio.GetAttribute('type') & @LF)
EndIf
;~ ...
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Да просто все. Дожидаетесь появления Id channel-visa и кликаете на него.
Код:
Do
	Sleep(200)
Until IsObj($oIE.document.getElementById('channel-visa'))
$oIE.document.getElementById('channel-visa').click()


Или сразу так:
Код:
Do
	Sleep(250)
	$oIE.document.getElementById('channel-visa').click()
Until Not @error
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
madmasles [?]
А так что напишет?

Ни чего, скрипт не находит объект с id channel-master


Добавлено:
Сообщение автоматически объединено:

inververs

У меня тоже самое, только с таймаутом, пробовал крутить в бесконечном цикле до тех пор пока не найдёт, так и не нашёл channel-master.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Viktor1703
Значит у тебя проблемы в браузере.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
inververs

Обычный IE, не пользуюсь им вообще, следовательно все там стоит стандартно, я думаю это проблемы ActiveX элемента браузера, так как _IELoadWait тоже не корректно работает и считаю что это не только у меня, да и не может быть так, до того как дойду до финальной страницы "Оформление заказа", я прохожу авторизацию, поиск товара, выбор некоторых значений, подтверждение, на всех страницах работает без проблем, а на этом не может скрипт найти элемент с таким id.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А у меня все ок, начиная с главной до оформления заказа все нажимается. Браузер IE11. Странно :scratch:
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
inververs

Win8_x64 IE10


Добавлено:
Сообщение автоматически объединено:

Я думаю что пора завязывать с этим, я и до этого думал что это плохая идея, лучше всё руками сделаю.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Viktor1703

А этот элемент там точно не во фрейме?
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
alex33

Код страницы я скинул, ни каких form и frame нету, точнее есть form но он не относится к выбору метода платежа.


Добавлено:
Сообщение автоматически объединено:

Java or Python + Selenium + ChromeDriver работает безотказно.
 
Верх