В последнее время в сети появилось огромное множество браузерных игр разных типов. В конце прошлого года, когда появился портал MyMiniCity, я построила себе там город NewYorg (кто сидит по траффику — лучше не заходить :) ). Суть игры заключается в том, что надо "построить" свой виртуальный город. Подробно расписывать не буду, так как уже писала про эту игру. Поигравшись пару месяцев, вручную заходя в другие города и оставляя на доске приглашения посетить Newyorg, решила все автоматизировать. Тогда и была написана программа, которая посещает города на MyMiniCity.com, заполняет поля, отгадывает капчу и сабмитит форму. Надо было только подсунуть программе файл со списком городов. Таким образом я выводила город достаточно высоко в рейтинге (но потом мне стало лень даже запускать программу :) ).
Вот для создания списка городов я и использовала парсинг. Проанализировав код страницы, нашла, что список части городов, выведенных в рейтинге в правой части, в коде представлен в определенном формате. На каждой странице с городом есть строка типа:
ranking=145,flycity.de|146,ssv-city|147,join|148,seti.germany|149,krokant|150,demonslayers|151,maschboard
Оставалось только распарсить строку, добавить города в список и перейти к последнему (или первому, в зависимости от направления обхода) городу. Список городов можно было представить в формате, который подходит для программы обхода городов MMCVisitor :)
Исходный код не нуждается в пояснениях. Но так как в блоггере файл для скачивания выложить нельзя, то выкладываю исходники и работающую программу в архиве здесь.
А, вот еще что решила добавить... В утилите использовался стандартный компонент TWebBrowser из-за того, что напрямую получить содержимое страницы было нельзя (требовался Flash). Но советую по возможности при разработке своих парсеров скачивать страницу без отображения в браузере :)
ОтветитьУдалитьЗдраствуйте Маша! Меня очень заинтересовал ваш блог, подчерпнул море информации, да и вообще просто интересно читать. Прочитал щас статью о парсинге на службе геймера и задался вопросом, а можно ли как-то воздействовать с Флеш объектом? Вот играю в Klanz.ru и задумался о написании бота.(выгоды канечно никакой но интересно :)) Там игровое поле с картами представленна ввиде одной большой флешки, а как распознавать действия на ней? В общем даже незнаю как подойти к этой идеи. (если захочется помочь, то на Делфи плиз :) ) Заранее большое спасибо!
ОтветитьУдалитьПривет, Анонимный :)
ОтветитьУдалитьПро игру, о которой ты написал, ничего конкретного сказать не могу, так как не знаю ее особенностей. Могу только сказать, что если там флешка, по которой надо кликать в определенных областях и эти области заранее известны, то можно программно передвигать курсор мыши и кликать. А вот если логика игры зависит от действий противника, то такое решение решением являться не будет :) Можно ли как-то по-другому работать с флешками — я не знаю, не сталкивалась.
Ага ага, ясно :) Тогда такой вопрос: есть картинка, лежит на винте, на форме растянут компонент WebBrowser1, на нём загружен сайт, нужно найти эту картинку на сайте и найти координаты где она распологается. Ответ на этот вопрос и будет являться ключевым в написании бота. Всё остальное я умею. (Вот думаю мож зарегать тут блог и вести ворклог изготовления бота? *CRAZY*)
ОтветитьУдалитьЯ вот решил ещё на счёт алгоритма сказать. Я нашол кучу алгоритмов по сканированию рисунка, но в примерах как-то сложно. Вот как я думаю должно выглядить сканирование. Берём первый пиксель из искомой картинки, раскладываем его по RGB цветам, берём первый пиксель в браузере, раскладываем по RGB, сравниваем их, если идентичны, берём второй пиксель из искомой картинки, сравниваем, ну и так если штук 50 пикселей к ряду одинаковые, то выполняем действие, иначе переходим к следущему пикселю в браузере. Вроде в теории всё ясно, а на практике ваще хз как сделать :) Ну кстати искомую картинку можно сделать высотой в 1 пиксель, что бы легче искать было.
ОтветитьУдалитьЯ как-то делала отгадывание капчи для PHPBB, но там все примитивно - убрать шумы, свести оставшиеся цвета к черно-белой палитре, определить границы символов и сравнить их с шаблонами. Найти координаты нахождения одной цветной картинки на другой будет просто при условии, что цвета будут идентичные на 100%... наверное, еще от формата зависит. Ты с каким форматом будешь работать? bmp, gif, png? Можно картинки загружать в какой-нибудь стандартный Image, а потом получать доступ к цвету пикселей через Image.Canvas.Pixels[i,j]...
ОтветитьУдалитьВ общем, надо эксперементировать, я точно сказать не могу, как будет оптимальнее и правильнее. :)
Насчет ворклога — давай, заводи, будет интересно почитать))
Я думал капча крутой метод защиты, а полазил в инете щас по поводу распознования картинок, так блин, оказывается капчу легко обойти, но только если нет искревлений символов, а только шум.
ОтветитьУдалитьДумаю роботать буду с Png, т.к. когда я снифил пакеты, при передаче флешкой информации, то картинки были формата png. Думаю это верное решение хотя сначала я подумывал о bmp, ведь там точнее передаётся цвет (вроде или я что-то путаю?). На счёт идентичные на 100%, так а почему бы и нет, ну ведь цвет никак не исказиться?
А на счёт блога, это наверное только завтра. :)
Ну да, по цветам совпадение должно быть точное, если использовать картинки в одинаковом формате.)
ОтветитьУдалитьСнова привет! Создал я блог и разместил ссылку на этот :) Буду рад помощи, а то пока дело не спорится. http://pozer-notes.blogspot.com/
ОтветитьУдалить