Что нового

Остановка бота при нестандартных изменениях интерфейса текстовой онлайн игры

Yura

Знающий
Сообщения
36
Репутация
7
В Autoit мои знания ограничиваться лишь работой с IE. Если что не так написал или не понял- прошу не забрасывать камнями))) Подобной темы не нашел, поэтому создаю новую.
Написал бота для текстовой онлайн игры. Стандартный набор функций: рандомно ходит по локациях, бьет ботов, применяет приемы, сбегает и лечиться зависимо от ситуации, собирает дроп, ремонтируется, кормит питомца, распределяет статы при лвл-апе, составляет списки цен вещей и продает ненужные вещи. В принципе мое участие в игре сводится к прохождению квестов и тому, чтобы иногда зайти в торговый чат, на аукцион и одеть в лучший шмот. За 2 недели бот сильно качнул перса и теперь он первый по лвл среди других игроков с временем регистрации за последний месяц. Так что, думаю, скоро меня проверят на предмет использования бота, т.к. попадаю в список "подозрительных лиц" по всем пунктам:smile:
По частоте кликов, пауз в игре, перемещений не поймают- там все рандомно. Но сегодня узнал о другом способе поимки, который админ сам любезно описал для устрашения ботоводов :rofl: На странице игры могут додаваться лишние ссылки или подменяться стандартные ссылки на ссылки с текстом типу "не жми сюда", "пшел в бан" и т.п.; стандартные ссылки могут становиться невидимыми для игрока (но программа может их нажать); стандартные ссылки могут менять назначение, т.е. , например, нажимаю на "чат" - попадаю в инвентарь; может выскочить капча или картинка; просто может выбросить из игры и если игрок долго не возвращается, то это считается признаком использования бота. Кроме того использование IE- считается дополнительной уликой.
Теперь вопрос: кто-то сталкивался с подобным и есть знание или идеи как научить бота замечать непредвиденное изменение интерфейса страницы? Достаточно будет немедленной остановки бота и звуковой сигнал.
Пока в голову приходит только сравнение списка ссылок и цвета (чтоб бот не нажал белую ссылку на белом фоне) при загрузке каждой страницы с эталонными; сравнение рисунков. Можно даже базу даных всех используемых в игре слов сделать и при появлении нового- остановка+сигнал. Но такое сравнение на каждой странице будет грузить проц и тормозить процесс.
Чтоб не светиться использованием IE, юзаю UAPick- нашел здесь на форуме).
Наперед спасибо за все возможные идеи!
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Где ж она текстовая? Текстовая - это MUD. А у тебя типичная браузерка.

Не понимаю предмет твоего беспокойства.
Раз ты используешь рандомные задержки при кликах, то тебя не должно пугать что на дополнительную проверку списка ссылок уйдёт время. Так что давай.
 
Автор
Y

Yura

Знающий
Сообщения
36
Репутация
7
Сделал костяк для проверки.

Код:
#include <IE.au3> ; подключение библиотеки
#include <Array.au3>

$oIE = _IECreate ("google.com", 1)

$file = FileOpen("Html.txt", 10)
Kolekzija_linkov()
Kolekzija_form()
Kolekzija_kartinok()

Func Kolekzija_linkov()
	Dim $sLinks[1]

	$oLinks = _IELinkGetCollection($oIE)
	$i = 0  
	For $oLink In $oLinks 
		ReDim $sLinks[$i + 1]
		 
		If StringInStr($oLink.href, "rnd=")then ; если в $oLink.href есть окончание виду "rnd=случайное число", то удаляем "=случайное число"
			$sLinks[$i] = $oLink.innertext & " | " & StringRegExpReplace($oLink.href, '(.*)=.*', '\1')
		Else
			$sLinks[$i] = $oLink.innertext & " | " & $oLink.href
		EndIf	
		$i += 1
	Next

	$sLinks_in_String = "|| " & _ArrayToString($sLinks, " || ") & " ||"
	
	FileWrite($file, $sLinks_in_String & @CRLF & @CRLF)
	;MsgBox(0,"",$sLinks_in_String)
EndFunc

Func Kolekzija_form()
	$sForms_in_String = "There are no forms"
	$oForms = _IEFormGetCollection ($oIE)
	If @extended > 0 then
		$sHTML = _IEDocReadHTML ($oIE)
	;	FileWrite($file, $sHTML & @CRLF & @CRLF)
		$sForms_in_String = "|| " & _ArrayToString(StringRegExp($sHTML, '<form(.+?)</form', 3), " || ") & " ||"
		$sForms_in_String = StringRegExpReplace($sForms_in_String, 'id=(\d+)', 'id')
		$sForms_in_String = StringRegExpReplace($sForms_in_String, 'rnd=(\d+)', 'rnd')
	EndIf	
	FileWrite($file, $sForms_in_String & @CRLF & @CRLF)
EndFunc

Func Kolekzija_kartinok()
	$sImgs_in_String = "There are no pictures"
	$oImgs = _IEImgGetCollection ($oIE)
    If @extended > 0 then
		$sImgs_in_String = "|| "
		For $oImg In $oImgs
			$sImgs_in_String = $sImgs_in_String & 'img src="' & $oImg.src & '" ||'
		Next
	EndIf
	FileWrite($file, $sImgs_in_String & @CRLF & @CRLF)
EndFunc


В этом скрипте сделал запись полученных результатов по ссылкам, формам и рисункам в файл. В программе $sLinks_in_String, $sForms_in_String и $sImgs_in_String будут записываться в одну переменную, например $sStranica = $sLinks_in_String & $sForms_in_String & $sImgs, которая будет характеризовать количество, последовательность, текстовое название ссылок, форм и картинок. В формах просто считываю содержимое между тегами form. В игре оно одинаковое, меняются только значения id, rnd в форме, поэтому их значения вырезал. Потом добавлю еще переменную, которая характеризует цвет и шрифты. Может, если не будет лень, сделаю таки списки возможных используемых слов на страницах.
Итак на типовые страницы игры получаю соответствующие значения $sStranica. Во время игры после загрузки страницы формирую $sStranica текущей страницы и сравниваю с $sStranica эталонной. Если несовпадение - меня преследует админ ;D.
Что не учтено в такой схеме - расположение ссылок относительно рисунков и форм, т.е. если поставить ссылку, которая была перед рисунком, после рисунка- $sStranica не измениться.
Во время работы над этим фрагментом заметил, что код страниц почти идентичный, за исключением некоторых переменных и пары ссылок. Возможно, проще будет считывать весь код страницы, вырезать оттуда все переменные и сравнивать. А анализ вырезанных переменных, если они имеют значение, проводить отдельно.
Народ, я с Autoit познакомился совсем недавно. Неужели никто не делал идентификацию страниц и не знает, как сделать проверку проще??
И 2й момент: как протестировать написанный скрипт на странице игры? Можно как-то сохранить страницу и ручками вносить в нее изменения и потом на ней тестировать бота?




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

Тему можно закрыть. Бот уже выполняет все нужные проверки. Как тестировать разобрался сам. Сказал бы спасибо, но, к сожалению, некому.
 
Верх