Что нового

Autoit на IE

crank

Новичок
Сообщения
12
Репутация
0
Я в autoit ужасно разбираюсь, сейчас пытаюсь авторизацию написать на мобильный сайт, никак не получается. Подскажите где я тут ошибся и по какой причине. Только постарайтесь чуть на простом языке объяснить :(

Код:
#include <IE.au3>

$sLink = "barbars.ru/login"
$sUser = "crank"
$sPass = "123456789"

$oIE = _IECreate($sLink)
$oUser = _IEGetObjByName($oIE, "crank")
_IEFormElementSetValue($oUser, $sUser)
$oPass = _IEGetObjByName($oIE, "123456789")
_IEFormElementSetValue($oPass, $sPass)
$oSpans = _IETagNameGetCollection($oIE, "span")
For $oSpan In $oSpans
    If StringInStr($oSpan.innertext, 'Войти') Then
        _IEAction($oSpan, 'click')
        ExitLoop
    EndIf
Next
_IELoadWait($oIE)
 

madmasles

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

crank
На форуме примеров авторизации полно и в справке хорошие примеры. Вы на будущее пользуйтесь поиском и справку читайте, там много полезного и интересного.
Код:
#include <IE.au3>

$sLink = "barbars.ru/login"
$sUser = "crank"
$sPass = "123456789"

$oIE = _IECreate($sLink)
$oForm = _IEFormGetCollection ($oIE, 0)
$oUser = _IEFormElementGetObjByName ($oForm, "login")
_IEFormElementSetValue($oUser, $sUser)
$oPass =_IEFormElementGetObjByName ($oForm, "password")
_IEFormElementSetValue($oPass, $sPass)
_IEFormSubmit($oForm)
 
Автор
C

crank

Новичок
Сообщения
12
Репутация
0
Re: Авторизация

Да ими и пользовался.. Сам и не смог бы написать, просто немного запутался :smile: у меня еще будут вопросы, много чего не понимаю... $oIE = _IECreate($sLink) - что это значит и для чего пишется? И еще, там набирает ник и пароль, а потом должен нажать Войти, можете написать скрипт, который просто вводил ник и пасс, но не нажимал войти. Просто для сравнения ;D
 

madmasles

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

crank
просто вводил ник и пасс, но не нажимал войти
Уберите
Код:
_IEFormSubmit($oForm)

_IECreate($sLink) - что это значит и для чего пишется?
Вам, чтобы запустить IE, надо по ярлыку кликнуть и ввести адрес страницы. Нечто подобное этой формулой делает AutoIt. :smile:
 
Автор
C

crank

Новичок
Сообщения
12
Репутация
0
Re: Авторизация

Вот еще вопрос, ну вот это никак не пойму... Как мы знаем, у каждой страницы есть свой адрес. Но есть такие страницы, где адрес страницы постоянно меняется! :mad: Как это может быть? Например вот сейчас напишу примеры:
Опять же варвары, авторизовался, иду в башни
http://wap.barbars.ru/game/towers
Захожу в локацию в башнях:
http://wap.barbars.ru/?wicket:interface=:7:nearLocation:5:locationLink::ILinkListener::&action=1283016161654
Вышел с этой локации, затем опять зашел:
http://wap.barbars.ru/?wicket:interface=:9:nearLocation:5:locationLink::ILinkListener::&action=1283016247238
Заметили, уже другой адрес! Как это возможно? :shok: У меня есть догадки, что там скрывается какой то один id, который шифруется, так как на js смотрел бот, построенный для этой игры, там по локациям переходил по каким то id, а не по url :-\ Но так и не понимаю все это...
 
Автор
C

crank

Новичок
Сообщения
12
Репутация
0
Re: Авторизация

Вот еще вопросы, как сделать, чтобы процесс длился бесконечно? например
Код:
_IELinkClickByText ($oIE, $var6)
	sleep (4000)

Чтобы этот процесс часами длился.. Я ж не буду тысячи штук его копий создавать ;D Попробовал через оператор цикла do...while сделать, после while что попало ставлю, которого никогда не будет, идет один раз нажимает бить врага и выдает ошибку...
Как читать любой текст со страницы? Например наверху стоит цифра 3000, хочу, чтобы как только оно спустится до 500,убегала. Только вот не знаю, как читать эти цифры, и не только цифры, а предложения тоже.
Как переходить по ссылкам, чтобы они не открывались в новом окне?
Код:
...

$oIE = _IENavigate ( "http://www.autoitscript.com")
_IELinkClickByText ($oIE, "Башни")

Можно так?^
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: Авторизация

crank [?]
Как переходить по ссылкам, чтобы они не открывались в новом окне?
"Свойства обозревателя: Общие -> Вкладки - Параметры: Всегда открывать всплывающие окна на новой вкладке" и "Новую вкладку в текущем окне"

Как читать любой текст со страницы?
Пример:
1. _IEBodyReadText - возвращает весь текст на странице
2. _IEPropertyGet($ОБЪЕКТ, "innerText") - вернёт текст который находится между тегами объекта
и т.д. Вариантов много смотря какая задача стоит.

один раз нажимает бить врага и выдает ошибку
Если вы переходите по ссылке, то вы теряете её.
Чтобы не терять её и работать дальше, вам нужно открыть страницу (по ссылке) в новой вкладке или окне без передачи фокуса! Самый оптимальный вариант (без углубленного изучения MSDN по объектной модели IE), выставить настройки в свойствах обозревателя! (см. выше)
 

madmasles

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

Garrett [?]
"Свойства обозревателя: Общие -> Вкладки - Параметры: Всегда открывать всплывающие окна на новой вкладке" и "Новую вкладку в текущем окне"
Можно прямо в скрипте проверять это:
Код:
; Проверка(открыть в новом окне - 1, в новой вкладке - 2)
If RegRead($sKey, $sValueName) = 1 Then
    RegWrite($sKey, $sValueName, 'REG_DWORD', '2')
EndIf
У меня на Windows XP так работает. На других системах не проверял.
 
Автор
C

crank

Новичок
Сообщения
12
Репутация
0
Re: Авторизация

Я например имел ввиду читать текст такого вида (фото страницы прикрепил). Там видите на верхнем левом углу картинку сердца, рядом стоит хп - 3180. Это значения может быть меняться. Хочу сделать, чтобы как только это значение упадет ниже 1200, бот нажимал "На главную", и обновлять, а как только оно поднимется, опять продолжать делать то, что и раньше делал. :smile:


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

Или другое. Бью моба по названию текста. Например:
Дракон (100%), ударил, Дракон (99%), ударил, Дракон(99%), ударил, Дракон (97%) и до Дракон (1%)(включительно) так бить.
Как этот скрипт можно компактно написать. Вот я так бы написал
Код:
$var1 = "Дракон (100%)"
$var2 = "Дракон (99%)"
$var3 = "Дракон (98%)"
$var4 = "Дракон (97%)"
$var5 = "Дракон (96%)"
If VarGetType ($var1) then
      _IELinkClickByText ($oIE, $var1)
EndIf
sleep (4000)
If VarGetType ($var2) then
      _IELinkClickByText ($oIE, $var2)
EndIf
sleep (4000)
If VarGetType ($var3) then
      _IELinkClickByText ($oIE, $var3)
EndIf
sleep (4000)
If VarGetType ($var4) then
      _IELinkClickByText ($oIE, $var4)
EndIf
sleep (4000)
If VarGetType ($var5) then
      _IELinkClickByText ($oIE, $var5)
EndIf
sleep (4000)

И это скрипт только до 96%, и такой огромный :wacko: И может быть там есть и ошибки :-[ Например однга ошибка, надо, чтобы между ударами была передышка на 4сек, я вроде так и поставил, но если ударит Дракон(98%) и опять останется Дракон(98%), то есть незначительно ударил, то он опять ударит, уже не подождав 4сек, и все испортится :'(
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Re: Авторизация

crank, отжег. While...WEnd и StringRegExp тебе в помощь. Твой скрипт - это т.н. индусский код.
А VarGetType советую почитать справку. Там много полезного можно узнать, особенно то, что в твоем случае VarGetType($<любой из твоих var>) возвращает string.
OffTopic:
Никто тебя не обманывает - справка реально полезна!
 
Автор
C

crank

Новичок
Сообщения
12
Репутация
0
Re: Авторизация

Nik_rus, можете написать пример какой-нибудь скрипта с While... WEnd ? Я просто по теории обычно нифига не понимаю, только с примеров все беру :( например вот в случае моего скрипта как можно написать?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Re: Авторизация

crank [?]
(фото страницы прикрепил)
Выложите исходный код страницы!
Клик ПКМ на странице и "Просмотр HTML кода" (это в IE). Далее CTRL+A, CTRL+C, открываете блокнот и CTRL+V, потом, сохраняете как TXT и выкладываете здесь.
P.S. Лучше делать это или в FF или в Opera.
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Re: Авторизация

Запросто :smile:
Код:
$sDragon="Дракон"
$iHealth=100
While $iHealth>0
	_IELinkClickByText ($oIE, $sDragon & " (" & $iHealth & "%)")
	_IELoadWait($oIE)
	$iHealth=$iHealth-1
WEnd
 
Автор
C

crank

Новичок
Сообщения
12
Репутация
0
Re: Авторизация

Nik_rus, у тя чуток сложноватый. Но я сам смог написать, с 3ей попытки получилось. Вот что написал:
Код:
$passwd4 = InputBox("Выбор класса", "воин - 1, медик - 2", "1", "")
$passwd = InputBox("Выбор дракона", "Лег дракон - 1, миф дракон - 2, сок дракон - 3", "2", "")
$passwd3 = InputBox("Пещера дракона", "Напишите интервал между ударами (в мс)", "5000", "")
$var = "Бить дракона"
$var0 = "Лечить союзника"
If $passwd4 = 1 Then 
while $var
	_IELinkClickByText ($oIE, $var)
	sleep ($passwd3)
	
WEnd
ElseIf $passwd4 = 2 Then
	while $var0
	_IELinkClickByText ($oIE, $var0)
	sleep ($passwd3)
WEnd
Else 
	MsgBox(16, "Вы допустили ошибку!", "Не балуйтесь с ботом =)", 5)
	sleep (5000)
	Exit
EndIf


Даже не знал, что бот будет работать, я там внутрь одной функции засунул и другую и все отлично работает :laugh:

Вот только я сначало хотел верхнее сделать не через inputbox, а через msgbox, как бы выходило окно, не сам пишешь эти числа, а сразу выходило окно и пасалось воин или мед, а там ты ставишь птичку и выбираешь или что-то полегче, но не додумался ;D


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

Garrett, выложил. Так свое здоровье и ману изменил на всякий случай, вдруг админы зачислят ;D Но это не имеет значения. Например как сделать, чтобы когда здоровье падало ниже 1000, бот вышел на главную страницу?


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

Nik_rus, у меня эта пещера была легкая, щас собираюсь написать на более сложную пещеру, там уже по % хп уменьшается ;D щас попытаюсь разобрать твой скрипт
Код:
$sDragon="Дракон" ;понятно
$iHealth=100 ;понятно
While $iHealth>0 ;понятно
    _IELinkClickByText ($oIE, $sDragon & " (" & $iHealth & "%)") ; все понял, кроме знаков &, зачем они нужны?
    _IELoadWait($oIE) ; а как ввести сюда определенное время?
    $iHealth=$iHealth-1 ;понятно, работал с такими функциями )
WEnd



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

Короче, вот мой полный бот в пещеру дракона :laugh:
Код:
#include <IE.au3>

$sLink = "barbars.org/login"

$passwd1 = InputBox("Авторизация", "Введите ваш ник", "", "")
$passwd2 = InputBox("Авторизация", "Введите ваш пароль", "", "*")
$passwd4 = InputBox("Выбор класса", "воин - 1, медик - 2", "1", "")
$passwd = InputBox("Выбор дракона", "Лег дракон - 1, миф дракон - 2, сок дракон - 3", "2", "")
$passwd3 = InputBox("Пещера дракона", "Напишите интервал между ударами (в мс)", "5000", "")

If $passwd3 > 10000 Then
	MsgBox(16, "Вы допустили ошибку!", "Не балуйтесь с ботом =)", 5)
	sleep (5000)
	Exit
ElseIf $passwd3 < 1000 Then
	MsgBox(16, "Вы допустили ошибку!", "Не балуйтесь с ботом =)", 5)
	sleep (5000)
	Exit
	Endif
	
$sUser = $passwd1
$sPass = $passwd2

$oIE = _IECreate($sLink)
$oForm = _IEFormGetCollection ($oIE, 0)
$oUser = _IEFormElementGetObjByName ($oForm, "login")
_IEFormElementSetValue($oUser, $sUser)
$oPass =_IEFormElementGetObjByName ($oForm, "password")
_IEFormElementSetValue($oPass, $sPass)
_IEFormSubmit($oForm)

$oIE = _IECreate ("http://barbars.org/game/dragonDungeon/r/1283021515328/") ; я все таки так и не смог открыть это в том же окне... Мог бы здесь в ту локу, что на ссылке, через текстклик попасть за 2 клика, но не получается, ведь там надо _IELinkClickByText($oIE <= вот это $oIE кажется через креат и берется, если не будет креата, то с клика не смогу создать... Или я ошибаюсь??


MsgBox(0, "Внимание", "Бой начнется через 20 секунд!", 10)
sleep (20000)

If $passwd = "1" then 
_IELinkClickByText ($oIE, "Легендарный дракон")
ElseIf  $passwd = "2" then
_IELinkClickByText ($oIE, "Мифический дракон")
ElseIf  $passwd = "3" then
_IELinkClickByText ($oIE, "Сокровищный дракон")
Else
MsgBox(16, "Вы допустили ошибку!", "Не балуйтесь с ботом =)", 5)
sleep (5000)
Exit
EndIf


$var = "Бить дракона"
$var0 = "Лечить союзника"
If $passwd4 = 1 Then 
while $var
	_IELinkClickByText ($oIE, $var)
	sleep ($passwd3)
	
WEnd
ElseIf $passwd4 = 2 Then
	while $var0
	_IELinkClickByText ($oIE, $var0)
	sleep ($passwd3)
WEnd
Else 
	MsgBox(16, "Вы допустили ошибку!", "Не балуйтесь с ботом =)", 5)
	sleep (5000)
	Exit
EndIf
	
sleep (30000)
Exit
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Re: Авторизация

Хм. Дословно While...WEnd:
Код:
While "Бить дракона"
;...
WEnd

WTF??? crank, думаете если поставить "Не бить дракона" - он не будет бить щитоле?
Или я отсталый такой и у меня в AutoIt распознавание русского нет, или что-то другое.
2. В этом же окне открывать сцылку этой функцией:
Код:
_IENavigate
 
Автор
C

crank

Новичок
Сообщения
12
Репутация
0
Re: Авторизация

Ура, навигейт работает )) раньше сто раз пробовал, ни толку...


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

Кстати, обновляю данную страницу, не обновляет :(
Код:
send ("F5") ; где ошиба???



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

И вообще почему данный скрипт не работает
Код:
_IENavigate ($oIE, "http://barbars.org/game/towers")

$var1 = "Ущелье Эпитера"
$var2 = "Стражник"
$var3 = "Долина Великанов"


while $var1
	_IELinkClickByText ($oIE, $var1)
Wend; вот здесь тормозит, почему?
sleep (5000); даже добавил слип, чтобы включился, бестолку
send ("F5"); даже попробовал сделать обновление страницы, хотя и ее наверно неправильно написал, ничто не помогает...
while $var2
	_IELinkClickByText ($oIE, $var2)
Wend
while $var3
	_IELinkClickByText ($oIE, $var3)
Wend
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Авторизация

{TopicNameWarn.SModer}
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
crank [url_ex=javascript:qq.OpenLink('[url=http://autoit-script.ru/index.php/topic,2577.msg18652.html#msg18652%27]Re: Авторизация)][?][/url_ex]
Кстати, обновляю данную страницу, не обновляет
Код:
send ("F5")
где ошиба???

Код:
Send("{F5}")



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

Код:
while $var1
    _IELinkClickByText ($oIE, $var1)
Wend; вот здесь тормозит, почему?


Код:
While @error = 0
    _IELinkClickByText ($oIE, $var1)
    If @error <> 0 Then MsgBox(0,$oIE,$var1&@CRLF&@error)
WEnd


из справки:
Код:
Возвращаемое значение

Success: Returns -1 
Failure: Returns 0 and sets @ERROR 
@Error: 0 ($_IEStatus_Success) = No Error 
 1 ($_IEStatus_GeneralError) = General Error 
 3 ($_IEStatus_InvalidDataType) = Invalid Data Type 
 4 ($_IEStatus_InvalidObjectType) = Invalid Object Type 
 6 ($_IEStatus_LoadWaitTimeout) = Load Wait Timeout 
 7 ($_IEStatus_NoMatch) = No Match 
 8 ($_IEStatus_AccessIsDenied) = Access Is Denied 
@Extended: Contains invalid parameter number
 
Верх