Что нового

Подбор команды для клика при авторизации.

MrGep

Новичок
Сообщения
74
Репутация
1
Версия AutoIt: v3.3.10.2
Описание: Доброе всем время суток, всех с наступившим!)) Столкнулся с проблемой. Раньше на главной странице было окошко, которое позволяло выбрать сразу и мир. Сейчас же, после ввода пары логин-пароль всплывает окошко, где и надо подтвердить авторизацию. Но не могу подобрать правильную команду для отправки клика(controlclick не предлагать). Ниже показываю авторизацию.
Ошибка при авторизации "Warning from function _IEFormGetCollection, $_IEStatus_NoMatch".

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>


$Login = "Простак"
$Password = "06111976"
$Server = "27"
$oIE = _IECreateEmbedded ()  ;; Создаем объект для вставки в GUI
GUICreate("form", 500, 300, 50, 50) ;; Создание GUI
$form = GUICtrlCreateObj($oIE, 10, 10, 450, 250) ;; Создание формы Веб-окна
$GUI_Button_Login = GUICtrlCreateButton("Login", 440, 265, 50, 25) ;; Создание кнопки
GUISetState()

_IENavigate ($oIE, "http://www.voyna-plemyon.ru/game.php")

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
		 Case $GUI_Button_Login
			$oForm = _IEFormGetCollection ($oIE, 0)
			$oPassword = _IEFormElementGetObjByName($oForm,"password")
			$oLogin  = _IEFormElementGetObjByName($oForm,"user")
			$oCheck = _IEGetObjById($oForm, "login_submit_button")

		    _IEFormElementSetValue($oLogin, $Login)
			_IEFormElementSetValue($oPassword, $Password)
			_IEAction($oCheck, 'click')
sleep(200)
			$oForm1 = _IEFormGetCollection ($oIE, 0)
			$oServer = _IEGetObjById($oForm1, "Index.submit_login('server_ru27');")
			_IEAction($oServer, 'click')
    EndSwitch
WEnd

GUIDelete()
Exit


Примечания: Заранее спасибо)Уважаемые модераторы, в случае ошибки - поправлю, что необходимо)
 

Nazgul666

Знающий
Сообщения
21
Репутация
9
Подставьте это
Код:
$oLinks = _IETagNameGetCollection ($oIE, "a")
For $oLink in $oLinks
$oOnclick = $oLink.attributes.getNamedItem("onclick")
	If IsObj($oOnclick) Then
		If StringInStr($oOnclick.nodeValue, "ru_27")  Then
			_IEAction($oLink,"click")
			ExitLoop
		EndIf
	EndIf
Next


вместо

Код:
$oServer = _IEGetObjById($oForm1, "Index.submit_login('server_ru27');")
_IEAction($oServer, 'click')
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
;...
_IEFormElementSetValue($oLogin, $Login)
_IEFormElementSetValue($oPassword, $Password)
_IEAction($oCheck, 'click')
Sleep(250)
$oLink = _IELinkGetCollection($oIE, 68)
_IEAction($oLink, 'click')
;...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Автор
M

MrGep

Новичок
Сообщения
74
Репутация
1
Шапку поправил, версию указал)


К сожалению, ни один, ни второй вариант не работает( Вариант, который предложил Garret, я понял не до конца. Заново создаем коллекцию объектов, и берем объект с кодом "68". Вот только почему 68?)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
MrGep [?]
ни второй вариант не работает
Не нужно бездумно копировать код! Я выложил только часть вашего кода, которую поправил.

Заново создаем коллекцию объектов, и берем объект с кодом "68". Вот только почему 68?)
Заново создавать ничего не нужно, просто берём коллекцию ссылок и нажимаем на 68ю ссылку (Мир 27).
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>


$Login = "Простак"
$Password = "06111976"
$Server = "27"
$oIE = _IECreateEmbedded ()  ;; Создаем объект для вставки в GUI
$hGUI = GUICreate("form", 500, 300, 50, 50) ;; Создание GUI
$form = GUICtrlCreateObj($oIE, 10, 10, 450, 250) ;; Создание формы Веб-окна
$GUI_Button_Login = GUICtrlCreateButton("Login", 440, 265, 50, 25) ;; Создание кнопки
GUISetState()

_IENavigate ($oIE, "http://www.voyna-plemyon.ru/game.php")
_IELoadWait($oIE)
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
         Case $GUI_Button_Login
            $oForm = _IEFormGetCollection($oIE, 0)
            $oPassword = _IEFormElementGetObjByName($oForm,"password")
            $oLogin  = _IEFormElementGetObjByName($oForm,"user")
            $oCheck = _IEGetObjById($oForm, "login_submit_button")
            _IEFormElementSetValue($oLogin, $Login)
            _IEFormElementSetValue($oPassword, $Password)
            _IEAction($oCheck, 'click')
			Sleep(250)
			$oLink = _IELinkGetCollection($oIE, 68)
			ConsoleWrite('Заходим в ' & _IEPropertyGet($oLink, 'innertext'))
			_IEAction($oLink, 'click')
			
    EndSwitch
WEnd

GUIDelete()
Exit
 
Автор
M

MrGep

Новичок
Сообщения
74
Репутация
1
Прошу меня простить,тут дело не в коде. Даже вручную он не логинится, то есть при щелчке на выборе мира он не реагирует. Честно говоря, не очень понимаю, в чем дело, сейчас буду читать, но буду благодарен за подсказку в этом вопросе)
 
Автор
M

MrGep

Новичок
Сообщения
74
Репутация
1
Ну, открывает окно IE и нормально заходит. Так, получается не хватает каких - то надстроек? Странно, это вроде не флеш.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
MrGep [?]
Так, получается не хватает каких - то надстроек?
Затрудняюсь что-либо сказать. :scratch:
У меня с _IECreateEmbedded код работает нормально.
 
Автор
M

MrGep

Новичок
Сообщения
74
Репутация
1
У меня IE обновился до 9ки, после 9ки работать не будет, откатил до восьмерки - все ок.
 
Верх