Что нового

Клик по кнопке с Div

sasha1304

Новичок
Сообщения
41
Репутация
0
Пожалуйста подскажите как кликнуть по этой кнопке?
Код:
<div id="payments_menu" class="js-main-tab quarter">
    <a href="/#payments">
      <img id="payments_ico" src="images/ico_payments.png" width="22" height="20" alt="" style="display: inline;">
      <img id="payments_ico_active" src="images/ico_payments_cur.png" width="22" height="20" alt="" style="display: none;">
      <span>Оплата</span>
    </a>
  </div>

Делаю так:

Код:
$oIE = _IECreate("https://kabinet.rt.ru/")

$hWnd = WinWait("[CLASS:IEFrame]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf
WinSetState($hWnd, "", @SW_MAXIMIZE)

$Login = _IEGetObjByName($oIE, 'Reg_login')
$Pass = _IEGetObjByName($oIE, 'Reg_pass')
$But_vhod = _IEGetObjByName($oIE, 'loginBtn')
$But_oplate = _IEGetObjByName($oIE, 'payments_menu')

_IEFormElementSetValue($Login, $Read1_login)
_IEFormElementSetValue($Pass, $Read1_Pass)
_IEAction ($Login, "focus")
_IEAction ($But_vhod, "Click")
_IEAction ($But_oplate, "Click")


не получается.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Попробуй так.
Код:
$oIE = _IECreate("https://kabinet.rt.ru/")

$hWnd = WinWait("[CLASS:IEFrame]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf
WinSetState($hWnd, "", @SW_MAXIMIZE)

$Login = _IEGetObjByName($oIE, 'Reg_login')
$Pass = _IEGetObjByName($oIE, 'Reg_pass')
$But_vhod = _IEGetObjByName($oIE, 'loginBtn')

_IEFormElementSetValue($Login, $Read1_login)
_IEFormElementSetValue($Pass, $Read1_Pass)
_IEAction ($Login, "focus")
_IEAction ($But_vhod, "Click")

; возможно здесь надо будет подождать пока выполнится вход...
$Div_oplate = _IEGetObjById($oIE, 'payments_menu')
_IELinkClickByIndex($Div_oplate, 0)
 
Автор
S

sasha1304

Новичок
Сообщения
41
Репутация
0
неа, всё равно не работает... слип на 5 сек ставил, и по тексту пытался клик сделать, ну никак кликать не хочет :(


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

разобрался.

Код:
$Div_oplate = _IEGetObjById($oIE, 'payments_menu')
_IELinkClickByIndex($Div_oplate, 0)


0 изменил на 11
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Я создал файл для теста
Код:
<html>
<head>
<title>Untitled</title>
</head>
<body>




<div id="payments_menu" class="js-main-tab quarter">
    <a href="/#payments">
      <img id="payments_ico" src="images/ico_payments.png" width="22" height="20" alt="" style="display: inline;">
      <img id="payments_ico_active" src="images/ico_payments_cur.png" width="22" height="20" alt="" style="display: none;">
      <span>Оплата</span>
    </a>
  </div>
</body>
</html>
И скрипт
Код:
#include <IE.au3>
$oIE = _IECreate(@ScriptDir&"\4.htm")

$hWnd = WinWait("[CLASS:IEFrame]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf
WinSetState($hWnd, "", @SW_MAXIMIZE)

$Login = _IEGetObjByName($oIE, 'Reg_login')
$Pass = _IEGetObjByName($oIE, 'Reg_pass')
$But_vhod = _IEGetObjByName($oIE, 'loginBtn')

;_IEFormElementSetValue($Login, $Read1_login)
;_IEFormElementSetValue($Pass, $Read1_Pass)
;_IEAction ($Login, "focus")
;_IEAction ($But_vhod, "Click")

; возможно здесь надо будет подождать пока выполнится вход...
$Div_oplate = _IEGetObjById($oIE, 'payments_menu')
_IELinkClickByIndex($Div_oplate, 0)
В таких условиях он кликает.
Дай полный HTML код настоящий страницы (только не прикрепляй, а то ошибка скачивания), я посмотрю и доделаю скрипт...
Залить файл можно на autoit_rv_ua, на rghost.ru, на dropbox или на другой файловый хостинг...
 
Автор
S

sasha1304

Новичок
Сообщения
41
Репутация
0
сюда скинуть весь код страницы не получилось, превышает 50000 знаков. закинул на яндекс диск http://yadi.sk/d/4XS_Hb07L4aGe

я пишу скрипт для авто оплаты инета электронной карточкой.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Да, кстати я написал новую функцию. Попробуй с ней.
Код:
__IELinkClickByStr($oIE, "<span>Оплата</span>")

Func __IELinkClickByStr($oObject, $sStr, $iWait = 1)
If Not IsObj($oObject) Then Return SetError(1, 0, 0)
$aLinks = _IELinkGetCollection($oObject)
For $oLink In $aLinks
If StringInStr($oLink.innerHTML, $sStr) Then
  _IEAction($oLink, "click")
ExitLoop
EndIf
Next
If $iWait Then _IELoadWait($oObject)
Return 1
EndFunc

Вот теперь я понял почему не кликает.
Ссылка "Оплата" становится доступной только после выполнения javascript кода.
С этого и надо было начинать... :smile:

Я сохранил страницу к себе на сервер И запустил скрипт.
Ссылка "Оплата" кликнулась при использовании _IELinkClickByIndex $Div_oplate, а вот формы входа на присланной странице не оказалось.
Она появляется на следующей странице после клика "Оплата".
Примечания:
1. Имена и идентификаторы элементов HTML имеют чувствительность к регистру.
Т.Е. "Reg_..." и "reg_..." это разные вещи.

2. Если у элемента есть id то лучше обращаться к элементу через его id.

3. Не путать id и name и соответствующие функции
Код:
_IEGetObjById
_IEGetObjByName



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

И так, окончательный рабочий вариант скрипта (в тестовых условиях):
По ссылке кликает,
На страницу авторизации переходит,
Логин с паролем вводит,
замечаний в данном коде нет.
Код:
#include <IE.au3>
Global $Read1_login = "abcdef", $Read1_Pass = "12345678"
$oIE = _IECreate("http://192.168.0.230/page.html")
$hWnd = WinWait("[CLASS:IEFrame]", "", 5)
If Not $hWnd Then
MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
Exit 1
EndIf
WinSetState($hWnd, "", @SW_MAXIMIZE)

_IELoadWait($oIE)
$Div_oplate = _IEGetObjById($oIE, 'payments_menu')
_IELinkClickByIndex($Div_oplate, 0, 0)
Sleep(100)
_IELoadWait($oIE)

$Login = _IEGetObjById($oIE, 'reg_login')
$Pass = _IEGetObjById($oIE, 'reg_pass')
$But_vhod = _IEGetObjById($oIE, 'loginBtn')

_IEFormElementSetValue($Login, $Read1_login)
_IEFormElementSetValue($Pass, $Read1_Pass)
_IEAction ($Login, "focus")
_IEAction ($But_vhod, "Click")
Sleep(100)
_IELoadWait($oIE)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Реальный, рабочий код:
Код:
...
_IEAction ($But_vhod, "Click")
Sleep(100)
_IELoadWait($oIE)

; ждём ссылку "Оплата" 5 секунд  {
Local $hTimer = TimerInit()
Local $iError = 0, $iTimerMs = 0
Do
$Div_oplate = _IEGetObjById($oIE, 'payments_menu')
$iError = @error
;~ ConsoleWrite("@error $Div_oplate = "&$iError&@CRLF)
$iTimerMs = Floor(TimerDiff($hTimer))
;~ ConsoleWrite("Timer: "&$iTimerMs&" ms"&@CRLF)
;~ ConsoleWrite("----------"&@CRLF)
Until $iError = 0 Or $iTimerMs > 5000
_IELinkClickByIndex($Div_oplate, 11, 0)
If @error Then
    MsgBox(4096, 'Сообщение', 'Ссылка "Оплата" не найдена, завершаем работу скрипта')
    Exit
EndIf
 
Автор
S

sasha1304

Новичок
Сообщения
41
Репутация
0
спасибо большое, всё работает :IL_AutoIt_1:
 
Верх