Стелс-бот для веб-кликательных игрушек

yroslavasako

Нужно написать бота для веб игрушки, так чтобы его нельзя было спалить с той стороны.
Ботов можно распознать по двум факторам:
1. Паттерн поведения отличается от среднечеловеческого
2. Стек технологий выдаёт бота как парашют штирлица.
Что делать с первым пунктом ясно - это вопрос качества программирования, правдоподобного рандома в действиях и таймаутах. Тут можно и самому догадаться.
Второй пункт намного сложней. web очень сегментирован, есть десятки способов отличить один браузер от другого.
Самый простой путь, гарантированно необнаружимый - это генерация пользовательского ввода, движений мышки и клавиатуры. Можно запустить виртуальную машину, там гонять бота, дополнив распознавание ключевых пикселей экрана перехватом и анализом http трафика. Но это жутко неудобно.
Хочется использовать библиотеки вроде scrapy для получения и работы со страничками напрямую. Но там обычно бывает куча ява-скрипта для шпионажа над пользователями и для отсева ботов, соответственно все эти скрипты надо эмулировать.
Вопрос: есть для сабжа хоть какая-нибудь готовая библиотека на каком-нибудь из языков? Преимущество отдаю второму подходу, потому что он гораздо более щадящ по ресурсам

okis

Вопрос: есть для сабжа хоть какая-нибудь готовая библиотека на каком-нибудь из языков?
Была какая-то библиотека, чтобы запускать целый хром и управлять им.
Вот нашел: http://github.com/yappie/chrome-remote-python
была и другая, тоже на Питоне, её не нашел

yroslavasako

Была какая-то библиотека, чтобы запускать целый хром и управлять им.
Вот нашел: http://github.com/yappie/chrome-remote-python
как я понял там мышкой не подвигаешь. только js можно дергать. через js менять DOM. По полезности и по палевности где-то посередине между scrypy и autoit

Dasar

Но там обычно бывает куча ява-скрипта для шпионажа над пользователями и для отсева ботов, соответственно все эти скрипты надо эмулировать.
Если скрипты анти-бота умные и часто меняются, то задолбаешься эмулировать.
Например, скрипт может проверять траекторию мыши, что если была сначала нажата кнопка A, а потом кнопка B, то курсор должен был пройти над родительским контролом С кнопки B и вызвать события enter/leave
Этого недостатка лишен подход, когда для получения данных используется белый ящик, а для управления - черный ящик.
Белый ящик подразумевает, что неким способом получается и воссоздается внутренняя структура программы, а черный - что управление делается через эмуляцию мышки и клавы.
Управляющий код при этом выглядит как:

var newMail = page.Find("#new-mail");
if (newMail != null)
Click(newMail);

при этом клик делается через соответствующее передвижение курсора к нужному контролу и нажатие.
Такое поведение можно например сделать через Firefox+MozRepl. MozRepl обеспечит доступ ко внутренней структуре страницы и ее данных.
зы
Если анти-бот скрипты меняются редко и стоимость разовой ошибки низкая, то проще отследить что они посылают на сервер, и напрямую гонять get/put запросы без эмуляции javascript-а, самостоятельно воссоздавая данные, которые отсылают на сервер анти-бот скрипты.

elenangel

Если анти-бот скрипты меняются редко, то проще отследить что они посылают на сервер, и напрямую гонять get/put запросы без эмуляции javascript-а, самостоятельно воссоздавая данные, которые отсылают на сервер анти-бот скрипты.

Это зависит от стоимости ошибки. Если при первом же проколе вашего орка-удачника забанят, а его прокачка стоила более 9000 денег, то даже единичная ошибка не допустима. А значит нельзя хардкодить аутпут скриптов, надо их честно эмулировать.

yroslavasako

Может селениум?
Этого недостатка лишен подход, когда для получения данных используется белый ящик, а для управления - черный ящик.
Белый ящик подразумевает, что неким способом получается и воссоздается внутренняя структура программы, а черный - что управление делается через эмуляцию мышки и клавы.
Ага, похоже что селениум - самое подходящее решение. Он даже умеет генерировать системные сообщения вроде движения мышки.
Оставить комментарий
Имя или ник:
Комментарий: