Semisonic
@Semisonic
Разработчик, выдумщик, неравнодушный человек

Как автоматизировать обход сайта с HTML5 canvas?

Всем привет!

Ради фана и саморазвития пытаюсь автоматизировать процесс игры в одну web-based игру. Игра представляет из себя сайт с HTML5 canvas элементом, на котором отрисовывается игровое поле.

Необходимая последовательность действий следующая:
  1. Залогиниться на игровом сайте.
  2. Открыть страницу с игрой.
  3. Просканировать входные игровые данные, отображённые на canvas'е.
  4. Сымитировать пользовательскую активность на canvas (движения мыши, клики и т.п.).
  5. Вычленить результат матча, выданный в виде обычной HTML-страницы, и скорректировать игровую стратегию на его основе.
  6. Вернуться к п.2 и повторить.


Сразу оговорюсь, что методы, при которых браузер и отображаемые в нём данные интерпретируются как внешний объект, не интересуют. То есть анализ состояния сайта путём машинного зрения и имитация пользовательской активности через оконные сообщения не подходят. Хочется работать напрямую с клиентским кодом сайта, максимально сфокусировавшись именно на бизнес-логике (откуда какие данные взять, как их обработать, какие действия в результате выполнить).

Также хотелось бы, чтобы выбранный вариант решения этой задачи позволял смотреть за игрой в процессе, то есть чтобы автоматизировалась работа реального браузера. Однако варианты с headless браузерами тоже готов рассмотреть в качестве самообразования.

Буду благодарен, если вы посоветуете инструменты, которые удовлетворяют всем вышеперечисленным условиям и гарантированно способны решить поставленную задачу. Ответы уровня "сам не пробовал, но что-то слышал про toolXYZ, попробуй, может, получится" не подходят, интересен опыт из первых рук.

Спасибо всем кто откликнется!
  • Вопрос задан
  • 1000 просмотров
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
Ваш вопрос выглядит как заказ на фрилансе.

Мне кажется что самый простой и верный способ сделать бота как вы описали - это изучить апи через которое работает клиент.

Затем любым удобным языков имитировать клиент, браузер в данном случае совсем необязателен, даже headless.

Потому что браузер это не полноценный клиент как таковой, значит там нет никакого рода защиты от эмуляции чем угодно. Другими словами серверу глубоко побоку откуда к нему поступают данные, браузер или скрипт в консоли.
Ответ написан
riky
@riky
Laravel
делал такое именно поиском картинки в картинке. вполне спортивно, машинное зрение и распознавание образов тут не надо. удобно что не нужно изучать внутреннюю работу игры и не зависишь от изменений кода/новых версий. также удобно для игр с закрытым кодом (flash).

но если хочешь сделать именно на уровне бизнес логики - то выбор небольшой:
проще: подсмотреть какие запросы уходят на сервер и написать скрипт отправляющий такие же, из минусов - визуально на экране не увидишь изменений, до перезагрузки, хотя браузер по сути тут не обязателен вообще.

чуть сложнее но круче: извлечь js код и посмотреть внутренне апи (сложность в том что код скорее всего минимифицирован и возможно обфусцирован, тогда без названия переменных может быть сложнее). после разбора кода его можно поменять (дописать свою бизнес логику) и подменить в браузере, можно добавить новые кнопки и функции в интерфейс.

сам не пробовал, но что-то слышал про toolXYZ

использую все способы в зависимости от задачи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
06 мая 2024, в 09:38
1200 руб./в час
06 мая 2024, в 09:37
1200 руб./в час
06 мая 2024, в 09:36
8000 руб./за проект