Что нового

[Ботва Онлайн] Бот для копки кри.

Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
Дальше открывай Internet Explorer и запускай скрипт из первого поста, предварительно проставив свои индексы кнопок.
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
Update:
Не законченный контроль здоровья
Мониторинг кри для апгрейда кулонов
Апгрейд кулонов
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
Поправил баг с мах моралью, кое че подправил и сделал хот кей для завершения скрипта.
Так же сделал скрип для наблюдения за ботом. В случае ошибки скрипт обновляет страницу ИЕ и переходит по ссылке. Это против всяких сбоев и 404(и т.п.):
Код:
#include <IE.au3>
Opt("WinWaitDelay", 60000)
While 1
	WinWaitActive('AutoIt Error')
	Send('{Space}')
	Sleep(500)
	$i=1
	While $i=1
		WinActivate("[CLASS:IEFrame]", "")
		Sleep(500)
		Send('{F5}')
		$oIE = _IEAttach("[CLASS:IEFrame]", 'Instance')
		$sUrlNew = 'http://g1.botva.ru/dozor.php'
		_IENavigate($oIE, $sUrlNew)
		$oIE = _IEAttach("Битва за") ;подключаемся к окну ИЕ
		if not @error Then
;~ 			MsgBox(0,0,'Run')
			Run(@ScriptDir & "\Копать_v1.9.exe", "")
			$i+=1
		Else
			Sleep(5000)
		EndIf
	WEnd
WEnd
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
Помогите с ошибкой разобраться:
>Running:(3.3.6.1):C:\Program Files\AutoIt3\autoit3.exe "C:\Users\Admin\Documents\AutoIt_Script\Ботва\Копать_v1.9.au3"
C:\Program Files\AutoIt3\Include\IE.au3 (1964) : ==> Variable must be of type "Object".:
Return SetError($_IEStatus_Success, 0, $:shok:bject.document.body.innerText)
Return SetError($_IEStatus_Success, 0, $:shok:bject.document.body^ ERROR
->09:47:19 AutoIT3.exe ended.rc:1
>Exit code: 1 Time: 329.605


Или хотябы подскажите как сделать чтобы, AutoIt показывал в какой строке эта гребаная ошибка вылезает?
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
Черт побери :smile: решил свою проблему совершенно случайно!
С галимым инетом страница не успевает прогружаться, отсюда и ошибка чтения $sHTML=_IEBodyReadText($oIE)
Код:
Func _sre() ; проверка состояний
	_IELoadWait($oIE) ; ЯЯЯЯЯЯЗЗЗЬ!!!!
	$sHTML=_IEBodyReadText($oIE) ;это для текста
	$sHTML1=_IEBodyReadHTML($oIE) ;это для хп/кри/зол

в итоге считывание текста не начнется пока страница не прогрузится.
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Я мало разбираюсь во взаимодействии AutoIT с браузерами и прошу подсказку насчёт получения индексов кнопок.
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
На первой странице функция есть.
Сейчас пользуюсь:

Код:
$oIE = _IEAttach("Битва за")
$Drako='castle.php?a=zoo&id=6&flying=&redirect=1' ;Дряка
$Grifan='castle.php?a=zoo&id=6&flying=&redirect=1';Грифон
$Pegas='castle.php?a=zoo&id=6&flying=&redirect=1' ;Пегас
$Dig='mine.php?a=open&m=dig&k=' ;Добыть кри
$Reset='mine.php?a=open&m=reset&k=' ;Продолжить поиск
$Work='mine.php?a=open&m=work&k=' ;Работать
$Open='mine.php?a=open' ;Смотреть в карьер
LinkClick($Drako)
Func LinkClick($FocusLink)
$oLinks=_IELinkGetCollection($oIE)
For $oLink in $oLinks
    if StringInStr($oLink.href,$FocusLink) Then
        _IEAction($oLink,'click')
        _IELoadWait($oIE)
        ExitLoop
    EndIf
Next
EndFunc
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
А сейчас же сделали в бодалке кнопку не "искать противника", а просто "поиск".
Ожидание текста "Расширенный поиск" идёт нормально, а вот при клике "поиск" - нажимается поиск в рейтинге кнопкой, которая под братвой находится.
Код:
$oIE = _IEAttach("Битва за") ;подключаемся к окну ИЕ
Do
	_IELinkClickByText($oIE, 'Бодалка')
Until StringInStr(_IEBodyReadText($oIE), "Расширенный поиск")<>0
If StringInStr(_IEBodyReadText($oIE), "Расширенный поиск")<>0 Then
	_IELinkClickByText($oIE, 'Поиск') ; Как првильно нажать на нужную кнопку, если таких аж 3 на странице?
EndIf

Даже 5 кнопок
1331229125-clip-77kb.jpg
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
Чтобы кликнуть по второй кнопке "поиск" не нужно прерывать цикл. Я решил это так:
Код:
$oIE = _IEAttach("Битва за") ;подключаемся к окну ИЕ
        _IELinkClickByText($oIE,'Бодалка')
	$oInputs = _IETagNameGetCollection($oIE, 'input')
	For $oInput In $oInputs
		If $oInput.type == 'submit' And $oInput.value == 'ПОИСК' Then ;тогда нападаем :)
			$oInputClk=$oInput
		EndIf
	Next
	_IEAction($oInputClk, 'click')
	_IELoadWait ($oIE)


Для остальных нажатий по кнопкам использую:
Код:
Func ButtonPres($TagCollect, $TagValue) 
    $oInputs = _IETagNameGetCollection($TagCollect, 'input')
    For $oInput In $oInputs
        If $oInput.type == 'submit' And $oInput.value == $TagValue Then
;~             MsgBox(0,$oInput.innertext,'Attack')
			_IEAction($oInput, 'click')
			_IELoadWait ($oIE)
			ExitLoop
        EndIf
    Next
EndFunc
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Как ты предложил - отлично всё работает.
А можно пояснение в работе функции _IETagNameGetCollection($oIE, 'input') а то нет на русском языке описания, а на английском мало что понятно.
Например что за параметр 'input' и какие могут быть ещё и в каких случаях какие параметры использовать?
Ещё вот строка:
Код:
If $oInput.type == 'submit' And $oInput.value == 'ПОИСК' Then

Хотелось бы пояснений по поводу использования двойного знака "==" вместо просто одного - "="
И где можно почитать на русском об объектах в AutoIT. Я так понимаю $oInput.type и $oInput.value относитнся к объектам?
Хотелось бы научиться делать это всё самому повысив уровень программирования на AutoIT, при дружеской подсказке модераторов форума :smile:
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
Поищи на форуме была ссылка на русскую справку по AutoIt, ну на крайняк переводчик тебе в помощь :smile:
открой исходный код страницы и внимательно ищи теги
Код:
$oInputs=_IETagNameGetCollection($oIE, 'input') ; собирает с ИЕ страницы HTML теги типа 'input'
For $oInput in $oInputs 
If  $oInput.type  == 'submit' And  $oInput.value  == 'ПОИСК' Then ; type и value это значения принадлежащие 'input'


З.Ы. В HTML кодеесть значения class, но AutoIt их воспринимает как .classname
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
В тегах разобрался. Теперь смотрю как сделать пометку для тега <select> для выбора поиска в списках для грабеж, мести, морали и т.д.
Код:
<div class="watch_attack_type">
						<select name='type' class='field select_type ' id='type' ><option value='same'>Поиск равных</option><option value='more'>Поиск сильных</option><option value='less'>Поиск слабых</option><option value='n1'>Список для грабежа</option><option value='n5'>Список для грабежа кристаллов</option><option value='n2'>Список для морали</option><option value='n3' selected>Список для мести</option><option value='fight'>Клановые войны</option></select>
						<div class="flright"><input type='submit'  class='cmd_all cmd_row7 cmd_arow7 ' value='ПОИСК' id="watch_find"></div>
					</div>
Думаю может с помощью данной функции, только что в параметрах использовать вместо 'click'
Код:
_IEAction($oInputClk, 'click')
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Не хочет нажиматься кнопка напасть, она там всего одна и по идее должен работать просто клик по тексту
Код:
_IELinkClickByText($oIE, 'напасть')
_IELoadWait($oIE)

так тоже не работатет
Код:
$oInputs=_IETagNameAllGetCollection($oIE, 'input')
For $oInput In $oInputs
	If $oInput.type == 'submit' And $oInput.value == 'НАПАСТЬ' Then
		$oInputAtt=$oInput
	EndIf
Next
_IEAction($oInputAtt, 'click')
_IELoadWait($oIE)

участок кода какой-то тут хитрый чересчур. 3 кнопки, а 'input' тегов больше, некоторые, как я понял скрытые - с параметром 'hidden'
Код:
<p>Изменение морали при выигрыше: <span class='font_large' style='color: green'>0</span></p> <a href="dozor.php" class='cmd_all cmd_row3 cmd_arow3 ' >НАЗАД</a><form method='post'  id='watch_attack'  class='inline' action='dozor.php' style="padding:0 5px"><input type='hidden' name='char_id' value='1263624' /><input type='hidden' name='type' value='advanced' /><input type='hidden' name='min' value='4' /><input type='hidden' name='max' value='4' /><input type='hidden' name='do_attack' value='1' /><input type='hidden' name='autobuy' value='0' /><input type='hidden' name='buy_revenge' value='0' /><input type='hidden' name='k' value='59798' /><input type='submit'  class='cmd_all cmd_row3 cmd_arow3 attack' value='НАПАСТЬ' ></form><form method='post'  class='inline' action='dozor.php' ><input type='hidden' name='char_id' value='1263624' /><input type='hidden' name='type' value='advanced' /><input type='hidden' name='min' value='4' /><input type='hidden' name='max' value='4' /><input type='hidden' name='do_search' value='1' /><input type='hidden' name='k' value='59798' /><input type='submit'  class='cmd_all cmd_row3 cmd_arow3 ' value='НОВЫЙ ПОИСК' ></form> <p></p> <p></p></center></div>
		</div>
		<div id="right">
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
внимательно посмотри на 48й ответ там и нажатие на поиск по уровням в бодалке и функция для уникальных кнопок
для поиска зорро:
Код:
$oIE = _IEAttach("Битва за") ;подключаемся к окну ИЕ
        _IELinkClickByText($oIE,'Бодалка')
    $oInputs = _IETagNameGetCollection($oIE, 'input')
Dim $oInputClk[4]
Dim $i=0
    For $oInput In $oInputs
        If $oInput.type == 'submit' And $oInput.value == 'ПОИСК' Then 
            $oInputClk[$i]=$oInput
            $i+=1
        EndIf
    Next
    _IEAction($oInputClk[1], 'click')
    _IELoadWait ($oIE)
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
Апнул первый пост, разработка пришла к своему логическому завершению.
Full версия без заморочек и изучения языка, обойдется вам в 100500$
Всем приятного использования, и да прибудет с вами сила.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Добавлено в полезные ссылки.
 
Автор
A

Asshaker

Знающий
Сообщения
150
Репутация
17
После нововведений в игре пришлось перелопатить бота. Обновил первый пост с лайт версией.
 
Верх