Что нового

[Сеть, интернет] Автовход в игру

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
B1ad3

У MIE есть режим киоска (полноэкранный режим без панелей):

Код:
ShellExecute("iexplore","-k {адрес страницы}")
 
Автор
B

B1ad3

Новичок
Сообщения
34
Репутация
0
Меня инетерсует открытия Internet Explorera в развернутом виде в скрипте который выше. (с помощью _IECreate)
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
B1ad3

Объект IE не обязательно создавать с помощью _IECreate(), его можно создать с помощью _IEAttach(), подключившись к уже существующему окну MIE...
 
Автор
B

B1ad3

Новичок
Сообщения
34
Репутация
0
Ну это я понял, а как быть со входом в игру?
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
B1ad3

Замени

Код:
_IELinkClickByText($oIE,"Вход")


на

Код:
_IEFormSubmit($oForm)
 
Автор
B

B1ad3

Новичок
Сообщения
34
Репутация
0
не катит! попробуй - тогда станет ясно почему.
 
Автор
B

B1ad3

Новичок
Сообщения
34
Репутация
0
Мне нужно, чтобы полсе ввода логина и пароля нажималась кнопка "Вход", а затем кнопка "1 мир".
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
B1ad3
По ссылкам "Мир 1" и "Мир 10" не получается пройти даже напрямую, без скрипта...
 
Автор
B

B1ad3

Новичок
Сообщения
34
Репутация
0
snoitaleR сказал(а):
B1ad3
По ссылкам "Мир 1" и "Мир 10" не получается пройти даже напрямую, без скрипта...

Потому что нельзя использовать _IEFormSubmit($oForm). Нужен другой способ.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
B1ad3 сказал(а):
а как быть со входом в игру?
Код:
#include <IE.au3>
Dim $sMyString = "Мир 1"

$oIE = _IECreate ("http://voyna-plemyon.ru")
$oLogin  = _IEGetObjById($oIE,"user")
$oPass   = _IEGetObjById($oIE,"password")
$oSubmit   = _IEGetObjById($oIE,"non_script_login")
_IEFormElementSetValue($oLogin,"kiprida")
_IEFormElementSetValue($oPass,"159357")
_IEAction ($oSubmit, "click")

Sleep(250)

$oLinks = _IELinkGetCollection($oIE)
For $oLink in $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next
 
Автор
B

B1ad3

Новичок
Сообщения
34
Репутация
0
Проверял это? У меня не работает :(
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
B1ad3 сказал(а):
У меня не работает :(
Попробуйте поставить
Код:
Sleep(1000)


Попробуйте этот код:
Код:
#include <IE.au3>
Dim $sWorld = "Мир 1"

$oIE = _IECreate ("http://voyna-plemyon.ru")
$oLogin  = _IEGetObjById($oIE,"user")
$oPass   = _IEGetObjById($oIE,"password")
_IEFormElementSetValue($oLogin,"kiprida")
_IEFormElementSetValue($oPass,"159357")

$oLinks = _IELinkGetCollection($oIE)
For $oLink in $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, "Вход") Then
        _IEAction($oLink, "click")
    EndIf
Next

; Listener 
While _World($sWorld)
	Sleep(100)
WEnd

Func _World($sProp1)
	$oWorlds = _IELinkGetCollection($oIE)
		For $oWorld in $oWorlds
			$sWorldText = _IEPropertyGet($oWorld, "innerText")
			If StringInStr($sWorldText, $sProp1) Then
				_IEAction($oWorld, "click")
				Return 0
			EndIf
		Next	
	Return 1
EndFunc
 
Автор
B

B1ad3

Новичок
Сообщения
34
Репутация
0
СПС! Заработало! +1 тебе!
У меня еще один вопросик, а как нажать потом на ссылку Ратуша?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
B1ad3 сказал(а):
У меня еще один вопросик, а как нажать потом на ссылку Ратуша?
Код:
#include <IE.au3>

Global $oIE

_Login("http://voyna-plemyon.ru", "kiprida", "159357", "Мир 1")
_LinksClick("main", "Ратуша")

; ~~~~~~~~~~~~~
;	Functions
; ~~~~~~~~~~~~~

Func _Login($sURL, $sLogin, $sPass, $sWorld)
	$oIE = _IECreate ($sURL)
	$oLogin  = _IEGetObjById($oIE, "user")
	$oPass   = _IEGetObjById($oIE, "password")
	_IEFormElementSetValue($oLogin, $sLogin)
	_IEFormElementSetValue($oPass, $sPass)

	$oLinks = _IELinkGetCollection($oIE)
	For $oLink in $oLinks
		$sLinkText = _IEPropertyGet($oLink, "innerText")
		If StringInStr($sLinkText, "Вход") Then
			_IEAction($oLink, "click")
		EndIf
	Next

	; Listener 
	While _SelectWorld($sWorld)
		Sleep(100)
	WEnd
	
	_IELoadWait($oIE)
EndFunc

Func _SelectWorld($sWorld)
	$oWorlds = _IELinkGetCollection($oIE)
		For $oWorld in $oWorlds
			$sWorldText = _IEPropertyGet($oWorld, "innerText")
			If StringInStr($sWorldText, $sWorld) Then
				_IEAction($oWorld, "click")
				Return 0
			EndIf
		Next	
	Return 1
EndFunc

Func _LinksClick($sFrame, $sText)
	$oFrame = _IEFrameGetObjByName($oIE, $sFrame)
	$oLinks = _IELinkGetCollection($oFrame)
		For $oLink in $oLinks
			$sLinkText = _IEPropertyGet($oLink, "innerText")
			If StringInStr($sLinkText, $sText) Then
			_IEAction($oLink, "click")
			EndIf
		Next
EndFunc
 
Автор
B

B1ad3

Новичок
Сообщения
34
Репутация
0
Чем дальше в лес - тем больше дров. Я думал, что после того, как получу скрипт для нажатия на ратушу смогу понять, что к чему и легко буду подставлять свои ссылки. Но не тут то было... Когда пробую поменять Ратушу, например, на Казарму, чтобы нажималась она в скрипте - ничего не выходит У меня к Вам просьба объяснить мне, как переходить по ссылкам после логина в игру. Вот для примера после нажатия на Ратушу мне надо, чтобы нажалось "Достроить до 5-го уровня", а потом нажалась "Казарма".

Заранее спасибо!
P.S. За помощь, оказаную мне, Ваша репутация будет рости каждый день;)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
B1ad3 сказал(а):
Я думал, что после того, как получу скрипт для нажатия на ратушу смогу понять, что к чему и легко буду подставлять свои ссылки.
Я собственно на это и рассчитывал когда вам написал функции. :smile:
Но для понимания вам нужно знать азы HTML и JScript.
Вкратце скажу, что сайт игры имеет фреймовую структуру. Для того чтобы добраться до ссылок, нужно сначала получить контроль над фреймом, в который загружается документ, содержащий эти ссылки. В данном случае имя фрейма main.

B1ad3 сказал(а):
Когда пробую поменять Ратушу, например, на Казарму, чтобы нажималась она в скрипте - ничего не выходит...
Вот для примера после нажатия на Ратушу мне надо, чтобы нажалось "Достроить до 5-го уровня", а потом нажалась "Казарма".

Я поправил функцию _LinksClick:
Код:
Func _LinksClick($sFrame, $sText)
	$oFrame = _IEFrameGetObjByName($oIE, $sFrame)
	$oLinks = _IELinkGetCollection($oFrame)
		For $oLink in $oLinks
			$sLinkText = _IEPropertyGet($oLink, "innerText")
			If StringInStr($sLinkText, $sText) Then
			_IEAction($oLink, "click")
			ExitLoop
			EndIf
		Next
	_IELoadWait($oFrame)
EndFunc


Теперь должно работать:
Код:
;~ ...
_Login("http://voyna-plemyon.ru", "kiprida", "159357", "Мир 1")
_LinksClick("main", "Ратуша")
_LinksClick("main", "Достроить до 5-го уровня")
_LinksClick("main", "Казарма")
;~ ...


B1ad3 сказал(а):
P.S. За помощь, оказаную мне, Ваша репутация будет рости каждый день;)
Это уже будет выглядеть как накрутка, и будет не честно по отношению к сообществу. Вашего спасибо вполне достаточно :smile:
 
Автор
B

B1ad3

Новичок
Сообщения
34
Репутация
0
Спс. Теперь я понял, так-как основы в html понимаю. Получилось вот что у меня:
Код:
#include <IE.au3>

Global $oIE

_Login("http://voyna-plemyon.ru", "kiprida", "159357", "Мир 1")
_LinksClick("main", "Ратуша")
_LinksClick2("main", "Достроить до 5-го уровня")
_LinksClick3("menu nowrap", "Обзор деревень")

; ~~~~~~~~~~~~~
;   Functions
; ~~~~~~~~~~~~~

Func _Login($sURL, $sLogin, $sPass, $sWorld)
    $oIE = _IECreate ($sURL)
    $oLogin  = _IEGetObjById($oIE, "user")
    $oPass   = _IEGetObjById($oIE, "password")
    _IEFormElementSetValue($oLogin, $sLogin)
    _IEFormElementSetValue($oPass, $sPass)

    $oLinks = _IELinkGetCollection($oIE)
    For $oLink in $oLinks
        $sLinkText = _IEPropertyGet($oLink, "innerText")
        If StringInStr($sLinkText, "Вход") Then
            _IEAction($oLink, "click")
        EndIf
    Next

    ; Listener 
    While _SelectWorld($sWorld)
        Sleep(100)
    WEnd
    
    _IELoadWait($oIE)
EndFunc

Func _SelectWorld($sWorld)
    $oWorlds = _IELinkGetCollection($oIE)
        For $oWorld in $oWorlds
            $sWorldText = _IEPropertyGet($oWorld, "innerText")
            If StringInStr($sWorldText, $sWorld) Then
                _IEAction($oWorld, "click")
                Return 0
            EndIf
        Next    
    Return 1
EndFunc


Func _LinksClick($sFrame, $sText)
    $oFrame = _IEFrameGetObjByName($oIE, $sFrame)
    $oLinks = _IELinkGetCollection($oFrame)
        For $oLink in $oLinks
            $sLinkText = _IEPropertyGet($oLink, "innerText")
            If StringInStr($sLinkText, $sText) Then
            _IEAction($oLink, "click")
            ExitLoop
            EndIf
        Next
    _IELoadWait($oFrame)
EndFunc

Func _LinksClick2($sFrame, $sText)
    $oFrame = _IEFrameGetObjByName($oIE, $sFrame)
    $oLinks = _IELinkGetCollection($oFrame)
        For $oLink in $oLinks
            $sLinkText = _IEPropertyGet($oLink, "innerText")
            If StringInStr($sLinkText, $sText) Then
            _IEAction($oLink, "click")
            ExitLoop
            EndIf
        Next
    _IELoadWait($oFrame)
EndFunc

Func _LinksClick3($sFrame, $sText)
    $oFrame = _IEFrameGetObjByName($oIE, $sFrame)
    $oLinks = _IELinkGetCollection($oFrame)
        For $oLink in $oLinks
            $sLinkText = _IEPropertyGet($oLink, "innerText")
            If StringInStr($sLinkText, $sText) Then
            _IEAction($oLink, "click")
            ExitLoop
            EndIf
        Next
    _IELoadWait($oFrame)
EndFunc


Последняя функциия не работает:( Нужно, чтобы нажалась ссылка обзор деревень. Помогите.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Какой бардак :smile:
Аргументы в функции Garrett сделал не просто так. А именно для того, что бы не создавать КУЧУ одинаковых функций!

Код:
#include <IE.au3>

Global $oIE

_Login("http://voyna-plemyon.ru", "kiprida", "159357", "Мир 1")
_LinksClick("main", "Ратуша")
_LinksClick("main", "Достроить до 5-го уровня")
_LinksClick("menu nowrap", "Обзор деревень")

; ~~~~~~~~~~~~~
;   Functions
; ~~~~~~~~~~~~~

Func _Login($sURL, $sLogin, $sPass, $sWorld)
    $oIE = _IECreate ($sURL)
    $oLogin  = _IEGetObjById($oIE, "user")
    $oPass   = _IEGetObjById($oIE, "password")
    _IEFormElementSetValue($oLogin, $sLogin)
    _IEFormElementSetValue($oPass, $sPass)

    $oLinks = _IELinkGetCollection($oIE)
    For $oLink in $oLinks
        $sLinkText = _IEPropertyGet($oLink, "innerText")
        If StringInStr($sLinkText, "Вход") Then
            _IEAction($oLink, "click")
        EndIf
    Next

    ; Listener 
    While _SelectWorld($sWorld)
        Sleep(100)
    WEnd
    
    _IELoadWait($oIE)
EndFunc

Func _SelectWorld($sWorld)
    $oWorlds = _IELinkGetCollection($oIE)
        For $oWorld in $oWorlds
            $sWorldText = _IEPropertyGet($oWorld, "innerText")
            If StringInStr($sWorldText, $sWorld) Then
                _IEAction($oWorld, "click")
                Return 0
            EndIf
        Next    
    Return 1
EndFunc


Func _LinksClick($sFrame, $sText)
    $oFrame = _IEFrameGetObjByName($oIE, $sFrame)
    $oLinks = _IELinkGetCollection($oFrame)
        For $oLink in $oLinks
            $sLinkText = _IEPropertyGet($oLink, "innerText")
            If StringInStr($sLinkText, $sText) Then
            _IEAction($oLink, "click")
            ExitLoop
            EndIf
        Next
    _IELoadWait($oFrame)
EndFunc

Все должно выглядеть так :smile:


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

Код:
_LinksClick("menu nowrap", "Обзор деревень")

Значит объект называется не так, а как то по другому.

P.S. Может и сказал бы как, но мне лень регистрироваться :(
 
Верх