Как сделать бота кликера для aliexpress андроид
Краткое описание:
Простой и удобный в настройке автокликер, свайпер
Описание:
Автоматический Кликер гарантированно кликнет, нажмет или проведет по любому месту экрана с любым выбранным вами интервалом.
Автоматический Кликер НЕ требует root-доступа и работает в полноэкранных приложениях!
Если вам когда-либо приходилось поддерживать активность в игре, постоянно нажимать на одну и ту же кнопку, касаться экрана как можно быстрее. Мы можем вам помочь.
Наша команда SimpleHat обещает, что все функции останутся бесплатными. Мы всегда даем возможность избавиться от рекламы за небольшую плату и стараемся сделать рекламу как можно менее навязчивой.
Функции программы:
• Каждая точка клика полностью программируется.
• Несколько способов настроить время остановки. Выберите время суток или остановку по истечении указанного временного отрезка.
• Легко сохранять и загружать любые внесенные вами конфигурации.
• Поддержка рандомизации! Вы можете установить и рандомизировать частоту кликов и координаты.
• И многие другие функции.
• Все наши функции предоставляются бесплатно с самого начала!
Требуется Android: 7.0+
Русский интерфейс: Да
Скачать:
Версия: 4.8.11 Pro (denrusvrn)
Версия: 4.8.10 Автоматический Кликер (Razalina)
Версия: 4.8.6 Автоматический Кликер (Razalina)
версия: 4.8.0 automatic-clicker-4-8-0.apk ( 2.48 МБ )
Источник
Как я писал бота для аукциона AliExpress
Знаете, на aliexpress есть такие аукционы — Gaga Deals, сейчас там помойка, но когда-то были очень интересные предложения. Их идея заключалась в том, что:
- Продажи стартуют каждый час
- Число товаров ограничено
- Кто первый встал того и тапки
Были очень вкусные лоты со скидкой 90%, топовые смартфоны этого года за 200-300 долларов, прошлогодние по 100 долларов. Разыгрывалось всего по 5 штук каждой позиции. Попробовал выиграть вручную, разумеется ничего не получилось. Ну и решил я написать бота…
Первым делом прощупал как оно вообще работает, вручную. Все свои попытки выиграть я записывал фидлером, потом копался в его отчетах. Пока копался, думал какого бота написать. Начал было делать консольное приложение с отправкой запросов через сокеты и парсингом ответов. Разыгрывались сначала вкусные лоты, и все попытки выиграть их вручную были безуспешными, но я не расстраивался, анализировал трафик, программировал шаги из того что проанализоровал. Тут подтянулись никому ненужные лоты. Наконец то я прошёл дальше и увидел капчу. Консольное приложение отпало сразу. Пришло в голову написать расширение для хрома. Целью было помочь мне быстро докликаться до капчи, поставить курсор для ввода, и потом кликать дальше. Сказано сделано, для такого расширения нужно всего 2 файла: manifest.json и content.js. В манифесте прописываем content.js как инжектируемый скрипт и всё, теперь он выполняется на каждой странице. А там через document.querySelector выбираем нужные элементы и программно кликаем по ним. Бот или лучше назвать пока его Helper работает на ура, ненужные товары заказывает без проблем, а нужные всё равно оказываются уже проданы. Слишком медленно.
Отчасти проблема была в том, что обратный отчет на сайте отстаёт от реальных часов, за час наверно на 5 минут. Плюс если обновить одновременно 2 страницы они могут загрузится со сдвигом в счётчике в 2 секунды.
Следовательно, надо постоянно обновлять страницу и следить за актуальным счётчиком. Открыл несколько вкладок, стал писать бота с обменом информацией через localstorage расширения, но на неактивных вкладках были постоянные проблемы, то скрипт не стартует, то querySelector ничего не находит, то в выбранном элементе текста с оставшимся временем нет — парсить нечего. А у активной страницы всегда всё работало.
Проблема видимо в оптимизации браузера с невидимыми вкладками, надо все страницы на виду держать. Сделал 9 фреймов прямо внутри главной страницы, в которых обновлялись постоянно страницы продукта со счётчиком, но теперь прямого доступа к фрейму не было. Странно, все страницы на одном домене, скрипт работает из контекста расширения, но при попытке доступа к frames[i].contentDocument — индейская национальная изба -”фигвам” называется. Оказалось что китайцы на главной странице присваивали document.domain = «aliexpress.com» — к домену второго уровня, не знаю зачем им это надо, других фреймов на странице нет. Я попытался вернуть обратно, не тут то было. Оказывается уровень домена уменьшать можно, а увеличивать нельзя. Даже если страница загружена с того-же домена который ты хочешь присвоить. Пришлось везде менять домен на второй уровень — прямой доступ к фреймам получил. Парсил время, вычислял лучшее и не трогал его пока кто нибудь не загружался с более лучшим временем, обновлял другие фреймы — это работало, лучший счётчик всегда был готов к клику. Потом число фреймов сократил до 4.
Отладил расширение на ненужных лотах, при наступлении времени «Ч» оно меня благополучно вело до капчи, которую я вводил и нажимал enter, далее заказ оформлялся автоматически. Всё подготовлено, и я стал ждать новый розыгрыш.
Во время следующего розыгрыша меня ждал сюрприз в виде диалоговых окон выбора цвета и/или комплектации, такого я ещё не видел и мой бот на них останавливался, быстро были дописаны соответствующие шаги и…
Всё продано, постоянно всё продано. Слишком медленно, что делать? Китайские и индийские сервисы по распознаванию капчи сработают не быстрее меня. Нормальную программу по распознаванию к расширению не прикрутишь. Уже подумывал вернуться к консольному приложению, и закинул вопросы на работе кто — что знает какие-либо модули или библиотеки по распознаванию капчи. Стал смотреть как загружать капчу, откуда взять url. как заметил особенность, картинка капчи подгружается с другого домена «checktoken1.alibaba.com», в url подставляется идентификатор сессии и всё, при обновлении картинки — цифры каждый раз разные.
Проверил я свою догадку так: в hosts заблокировал домен checktoken1.alibaba.com для checktoken1.alibaba.co прописал нужный IP и загрузил картинку в другой вкладке (насчёт этого я боялся больше всего, с поддельного домена картинка могла бы и не загрузится и пришлось бы использовать второй комп). Обновил форму с капчей. Ввёл старое значение, форма сработала, капча валидная, опытным путем установил значение сброса сессии в 15 минут.
Доработал страницу с фреймами, сделал текстовое поле и картинку с другого домена, вводил капчу примерно за 5 минут до розыгрыша, и расширение работало как часы, если конечно был не фейк и не было других злобных роботов.
Собственно, теперь можно было бы вернуться к консольному приложению, без браузера оно бы работало гораздо шустрее, но лень матушка мне подсказывала — зачем писать снова когда и так работает.
Осенью 2013-го разработчики aliexpress что-то сделали с капчей, распознанная заранее их перестала удовлетворять, и мой бот перестал работать. В режиме Helper’a с ручным распознаванием капчи заказ оформляется слишком медленно.
Итого
Из крупного выиграл фотик Nikon d5100 за $246 в мае 2013, телефон Nokia lumia 800 за $136 в марте 2013, Blackberry bold 9900 за $136. Ничего из топовых предложений так и не смог выиграть, либо там фейки, либо боты ещё по злее моего там пасутся. Через месяца 2-4 я проверял, кто скупил эти топовые позиции — покупатели были только из России, Белоруссии и Украины.
Источник
Пишем бота-кликера на Python для Lineage 2
Предисловие
Как можно развлечься в новогодние праздники? Поиграть в компьютерные игры? Нет! Лучше написать бота, который это будет делать за тебя, а самому пойти лепить снеговика и пить глинтвейн.
Когда-то в школьные годы был увлечен одной из популярных MMORPG — Lineage 2. В игре можно объединяться в кланы, группы, заводить друзей и сражаться с соперниками, но в общем игра наполнена однообразными действиями: выполнением квестов и фармом (сбор ресурсов, получение опыта).
В итоге решил, что бот должен решать одну задачу: фарм. Для управления будут использоваться эмулированные клики мыши и нажатия клавиш клавиатуры, а для ориентирования в пространстве — компьютерное зрение, язык программирования — Python.
Вообще, создание бота для L2 дело не новое и их готовых есть довольно много. Делятся они на 2 основные группы: те, которые внедряются в работу клиента и кликеры.
Первые — это жёсткий чит, в плане игры пользоваться ими слишком уж неспортивно. Второй вариант интереснее, учитывая, что его можно будет с некоторыми доработками применить к любой другой игре, да и реализация будет интереснее. Те кликеры, которых я находил, по разным причинам не работали, либо работали нестабильно.
Внимание: вся информация здесь изложена только в познавательных целях. Особенно для разработчиков игр, чтобы помочь им лучше бороться с ботами.
Работа с окном
Тут все просто. Будем работать со скриншотами из окна с игрой.
Для этого определим координаты окна. С окном работаем с помощью модуля win32gui. Нужное окно определим по заголовку — “Lineage 2”.
Получаем картинку нужного окна с помощью ImageGrab:
Теперь будем работать с содержимым.
Поиск монстра
Самое интересное. Те реализации, которые я находил, мне не подошли. Например, в одном из популярных и даже платном это сделано через игровой макрос. И “игрок” должен для каждого типа монстра прописывать в макросе типа “/target Monster Name Bla Bla”.
В нашем случае мы последуем такой логике: в первую очередь найдём все тексты белого цвета на экране. Белый текст может быть не только названием монстра, но и именем самого персонажа, именем NPC или других игроков. Поэтому надо навести курсор на объект и если появится подсветка с нужным нам паттерном, то можно атаковать цель.
Вот исходная картинка, с который будем работать:
Закрасим черным своё имя, чтобы не мешало и переведем картинку в ч/б. Исходная картинка в RGB — каждый пиксель это массив из трёх значений от 0 до 255, когда ч/б — это одно значение. Так мы значительно уменьшим объем данных:
Найдем все объекты белого цвета (это белый текст с названиями монстров)
- Фильтровать будем по прямоугольнику размером 50×5. Такой прямоугольник подошел лучше всех.
- Убираем шум внутри прямоугольников с текстом (по сути закрашиваем всё между букв белым)
- Еще раз убираем шум, размывая и растягивая с применением фильтра
Находим середины получившихся пятен
Работает, но можно сделать прикольнее (например, для монстров, имена которых не видны, т.к. находятся далеко) — с помощью TensorFlow Object Detection, как тут, но когда-нибудь в следующей жизни.
Теперь наводим курсор на найденного монстра и смотрим, появилась ли подсветка с помощью метода cv2.matchTemplate. Осталось нажать ЛКМ и кнопку атаки.
С поиском монстра разобрались, бот уже может найти цели на экране и навести на них мышь. Чтобы атаковать цель, нужно кликнуть левой кнопкой мыши и нажать «атаковать» (на кнопку «1» можно забиндить атаку). Клик правой кнопкой мыши нужен для того, чтобы вращать камеру.
На сервере, где я тестировал бота, я вызвал клик через AutoIt, но он почему-то не сработал.
Как оказалось, игры защищаются от автокликеров разными способами:
- поиск процессов, которые эмулируют клики
- запись кликов и определение, какого цвета объект, на который кликает бот
- определение паттернов кликов
- определение бота по периодичности кликов
А некоторые приложения, как клиент этого сервера, могут определять источник клика на уровне ОС. (будет здорово, если кто-нибудь подскажет как именно).
Были перепробованы некоторые фреймворки, которые могут кликать (в т.ч. pyautogui, robot framework и что-то еще), но ни один из вариантов не сработал. Проскользнула мысль соорудить устройство, которое будет нажимать кнопку (кто-то даже так делал). Похоже, что нужен клик максимально хардварный. В итоге стал смотреть в сторону написания своего драйвера.
На просторах интернета был найден способ решения проблемы: usb-устройство, которое можно запрограммировать на подачу нужного сигнала — Digispark.
Ждать несколько недель с Алиэкспресса не хочется, поэтому поиски продолжились.
Библиотека у меня не завелась на питоне 3.6 — вываливалась ошибка Access violation что-то там. Поэтому пришлось соскочить на питон 2.7, там всё заработало like a charm.
Движение курсора
Библиотека может посылать любые команды, в том числе, куда переместить мышь. Но выглядит это как телепортация курсора. Нужно сделать движение курсора плавным, чтобы нас не забанили.
По сути задача сводится к тому, чтобы перемещать курсор из точки A в точку B с помощью обертки AutoHotPy. Неужели придется вспоминать математику?
Немного поразмыслив, всё-таки решил погуглить. Оказалось, что ничего придумывать не надо — задачу решает алгоритм Брезенхэма, один из старейших алгоритмов в компьютерной графике:
Прямо с Википедии можно взять и реализацию
Логика работы
Все инструменты есть, осталось самое простое — написать сценарий.
- Если монстр жив, продолжаем атаковать
- Если нет цели, найти цель и начать атаковать
- Если не удалось найти цель, немного повернемся
- Если 5 раз никого не удалось найти — идём в сторону и начинаем заново
Из более-менее интересного опишу, как я получал статус здоровья жертвы. В общих чертах: находим по паттерну с помощью OpenCV элемент управления, показывающий статус здоровья цели, берём полоску высотой в один пиксель и считаем в процентах, сколько закрашено красным.
Теперь бот понимает, сколько HP у жертвы и жива ли она еще.
Основная логика готова, вот как теперь он выглядит в действии:
Для занятых я ускорил на 1.30
Остановка работы
Вся работа с курсором и клавиатурой ведется через объект autohotpy, работу которого в любой момент можно остановить нажатием кнопки ESC.
Проблема в том, что всё время бот занят выполнением цикла, отвечающим за логику действий персонажа и обработчики событий объекта и autohotpy не начинают слушать события, пока цикл не закончится. Работу программы не остановить и с помощью мыши, т.к. бот управляет ей и уводит курсор куда ему нужно.
Нам это не подходит, поэтому пришлось разделить бота на 2 потока: слушание событий и выполнение логики действий персонажа.
Создадим 2 потока
и теперь вешаем обработчик на ESC:
при нажатии ESC устанавливаем событие
и в цикле логики персонажа проверяем, установлено ли событие:
Теперь спокойно останавливаем бота по кнопке ESC.
Заключение
Казалось бы, зачем тратить время на продукт, который не приносит никакой практической пользы?
На самом деле компьютерная игра с точки зрения компьютерного зрения — почти то же самое, что и снятая на камеру реальность, а там возможности для применения огромны. Отличный пример описан в статье про подводных роботов, которые лазером стреляют по лососям. Также статья может помочь разработчикам игр в борьбе с ботоводами.
Ну а я ознакомился с Python, прикоснулся к компьютерному зрению, написал свой первый слабоумный искусственный интеллект и получил массу удовольствия.
Надеюсь, было интересно и вам.
Источник