Что нового

[Сеть, интернет] Автоматический вход в ru.ikariam.com

rodoss

Новичок
Сообщения
5
Репутация
1
Очень нужно сделать скрипт автоматического входа на сайт ru.ikariam.com. Не знаком с javascript.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
rodoss [?]
Не знаком с javascript.
Я тоже. :smile:
Код:
#include <IE.au3>

$sWorld = 'Delta'
$sLogin = 'Login'
$sPass = 'Pass'

$oIE = _IECreate('http://ru.ikariam.com/')
If @error Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
For $i = 1 To 1
	$oBtn = _IEGetObjById($oIE, 'btn-login')
	If @error Then ExitLoop
	_IEAction($oBtn, 'click')
	If @error Then ExitLoop
	$oForm = _IEGetObjById($oIE, 'loginForm')
	If @error Then ExitLoop
	$oSelect = _IEGetObjById($oIE, 'logServer')
	If @error Then ExitLoop
	_IEFormElementOptionSelect($oSelect, $sWorld, 1, 'byText')
	If @error Then ExitLoop
	$oLogin = _IEFormElementGetObjByName($oForm, 'name')
	If @error Then ExitLoop
	$oPass = _IEFormElementGetObjByName($oForm, 'password')
	If @error Then ExitLoop
	_IEFormElementSetValue($oLogin, $sLogin)
	If @error Then ExitLoop
	_IEFormElementSetValue($oPass, $sPass)
	If @error Then ExitLoop
	_IEFormSubmit($oForm, 0)
	If @error Then ExitLoop
Next
If @error Then
	_IEQuit($oIE)
	MsgBox(16, 'Error', 'Error')
	Exit
Else
	_IELoadWait($oIE)
	MsgBox(64, 'Info', 'OK')
EndIf
 

axlwor

Скриптер
Сообщения
657
Репутация
147
В целях повышения информированности:
Не первый раз встречаю конструкцию
Код:
For $i = 1 To 1
Next

Для чего это?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Цикл, основанный на значении выражения.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
OffTopic:
axlwor [?]
В случае, если какая-либо функция вернет ошибку, то надо закрывать IE и выдавать сообщение об ошибке и так писать после каждой функции или функцию свою для этого делать, а в цикле, если ошибка - вышли из цикла, выдали сообщение и все. Мне так удобнее. :smile:
 
Автор
R

rodoss

Новичок
Сообщения
5
Репутация
1
А есть ли возможность сделать тоже самое но используя другой браузер, нпример Opera либо Google Chrome? Либо вообще создать свое окно браузера, пусть даже используя для этого экслорер.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
rodoss [?]
Либо вообще создать свое окно браузера, пусть даже используя для этого экслорер.
Попробуйте так:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

$sWorld = 'Delta'
$sLogin = 'Login'
$sPass = 'Pass'

$oIE = _IECreateEmbedded()
GUICreate("Embedded Web control Test", @DesktopWidth - 100, @DesktopHeight - 100, -1, -1, _
		$WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$nActiveX = GUICtrlCreateObj($oIE, 10, 10, @DesktopWidth - 120, @DesktopHeight - 150)
$nButton = GUICtrlCreateButton('Avtor', 10, @DesktopHeight - 135, 100, 30)
$nLabel = GUICtrlCreateLabel('Идет загрузка страницы...', 120, @DesktopHeight - 135, @DesktopWidth / 2, 30)
GUISetState()
GUISetState(@SW_DISABLE)
_IENavigate($oIE, 'http://ru.ikariam.com/')
GUISetState(@SW_ENABLE)
GUICtrlSetData($nLabel, 'Страница загружена :)')
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			GUIDelete()
			Exit
		Case $nButton
			GUISetState(@SW_DISABLE)
			GUICtrlSetData($nLabel, 'Идет авторизация...')
			If _IEPropertyGet($oIE, 'locationurl') <> 'http://ru.ikariam.com/' Then
				_IENavigate($oIE, 'http://ru.ikariam.com/')
			EndIf
			For $i = 1 To 1
				$oBtn = _IEGetObjById($oIE, 'btn-login')
				If @error Then ExitLoop
				_IEAction($oBtn, 'click')
				If @error Then ExitLoop
				$oForm = _IEGetObjById($oIE, 'loginForm')
				If @error Then ExitLoop
				$oSelect = _IEGetObjById($oIE, 'logServer')
				If @error Then ExitLoop
				_IEFormElementOptionSelect($oSelect, $sWorld, 1, 'byText')
				If @error Then ExitLoop
				$oLogin = _IEFormElementGetObjByName($oForm, 'name')
				If @error Then ExitLoop
				$oPass = _IEFormElementGetObjByName($oForm, 'password')
				If @error Then ExitLoop
				_IEFormElementSetValue($oLogin, $sLogin)
				If @error Then ExitLoop
				_IEFormElementSetValue($oPass, $sPass)
				If @error Then ExitLoop
				_IEFormSubmit($oForm, 0)
				If @error Then ExitLoop
			Next
			GUISetState(@SW_ENABLE)
			If @error Then
				GUICtrlSetData($nLabel, 'Ошибка')
			Else
				_IELoadWait($oIE)
				GUICtrlSetData($nLabel, 'Авторизация прошла успешно.')
			EndIf
	EndSwitch
WEnd
 
Автор
R

rodoss

Новичок
Сообщения
5
Репутация
1
[Сеть, интернет] Re: [Сеть, интернет] Автоматический вход в ru.ikariam.com

Заново открыл тему, т.к. произошли серьезные изменения в игре. При использовании последнего скрипта появляется сообщение о том что сайт не поддерживает данную версию браузера. Попытки решить проблему ни к чему не привели.
Интереснее всего использование COM Object в GUI интерфейсе. Если это вообще возможно
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
OffTopic:
Imho в игру не нужно логинится скриптом.
Я считаю что сначала нужно запустить игру, залогинится, а потом уже запускать бота.
Если бот логинится, то обязательно выполняется что-то из следующего:
- разработчик бота знает логин и пароль;
- логин и пароль хранятся на диске;
- скрипт получает логин и пароль в открытом виде.
А оно вам надо?...
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Приветствую.

Для тестов я загеристрировался на сервере: Delta

Попробуй отправить запрос на адрес:
Код:
$USER_LOGIN = ""
$USER_PASS  = ""

$USER_SERVER = "s4.ru.ikariam.com" ;сервер = Delta

   ConsoleWrite('http://'&$USER_SERVER&'/index.php?action=loginAvatar&function=login&uni_url='&$USER_SERVER&'&name='&$USER_LOGIN&'&password='&$USER_PASS&'&kid=&startPageShown=1&detectedDevice=1')


Укажи свой логин + пароль + не знаю на каком у тебя сервере учетная запись...
Далее запусти и в консоле увидишь ссылку - (предположительно из игры выйди) - ее в браузер вставь и перейди. Если зайдет, то можно плясать дальше.

Пример 1 (_IECreateEmbedded()):
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

$USER_LOGIN = ""
$USER_PASS  = ""

$USER_SERVER = "s4.ru.ikariam.com" ;сервер = Delta

   ConsoleWrite('http://'&$USER_SERVER&'/index.php?action=loginAvatar&function=login&uni_url='&$USER_SERVER&'&name='&$USER_LOGIN&'&password='&$USER_PASS&'&kid=&startPageShown=1&detectedDevice=1')

$oIE = _IECreateEmbedded()
GUICreate("Embedded Web control Test", @DesktopWidth - 100, @DesktopHeight - 100, -1, -1, _
        $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$nActiveX = GUICtrlCreateObj($oIE, 10, 10, @DesktopWidth - 120, @DesktopHeight - 150)
$nButton = GUICtrlCreateButton('Avtor', 10, @DesktopHeight - 135, 100, 30)
$nLabel = GUICtrlCreateLabel('Идет загрузка страницы...', 120, @DesktopHeight - 135, @DesktopWidth / 2, 30)
GUISetState()
GUISetState(@SW_DISABLE)
_IENavigate($oIE, 'http://'&$USER_SERVER&'/index.php?action=loginAvatar&function=login&uni_url='&$USER_SERVER&'&name='&$USER_LOGIN&'&password='&$USER_PASS&'&kid=&startPageShown=1&detectedDevice=1')
GUISetState(@SW_ENABLE)
GUICtrlSetData($nLabel, 'Страница загружена :)')
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            GUIDelete()
            Exit
    EndSwitch
WEnd

Пример 2 (WinHttp):
Код:
$USER_LOGIN = ""
$USER_PASS  = ""

$USER_SERVER = "s4.ru.ikariam.com" ;сервер = Delta

   ConsoleWrite('http://'&$USER_SERVER&'/index.php?action=loginAvatar&function=login&uni_url='&$USER_SERVER&'&name='&$USER_LOGIN&'&password='&$USER_PASS&'&kid=&startPageShown=1&detectedDevice=1')
   
   $oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1') ;Создаём COM-объект
	  If @error Then
		 MsgBox(16, 'Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
		 Exit 1
	  EndIf
	  $oErrorHandler = ObjEvent('AutoIt.Error', 'ErrorFunc')
   $oRequest.Option(6) = False ;WinHttpRequestOption_EnableRedirects
   $oRequest.Open('GET', 'http://'&$USER_SERVER&'/index.php?action=loginAvatar&function=login&uni_url='&$USER_SERVER&'&name='&$USER_LOGIN&'&password='&$USER_PASS&'&kid=&startPageShown=1&detectedDevice=1', 0)
		 $oRequest.SetRequestHeader('User-Agent', 'Testing')
		 $oRequest.Send()
	  $sData = $oRequest.ResponseText
	  ConsoleWrite($sData)
   $oErrorHandler = 0 ;выключаем обработчик ошибок
   
   
Func ErrorFunc()
    MsgBox(16, 'Ошибка', $oErrorHandler.description)
    Exit 2
EndFunc

PS: добавил 2 примера + убрал свои косяки
 
Верх