Прошу сохранять спокойствие, если слова крипта и NFT у вас ассоциируются со словом скам. В этой статье не будет никаких финансовых рекомендаций, рекламы, только программирование. Вообще мне нравится автоматизировать какую-либо деятельность, которая приносит доход, и буквально вчера мне абсолютно случайно на глаза попался обзор некой игровой платформы, представляющей собой NFT-игру в жанре RPG (т.е. все игроки желают с помощью игровых механик преумножить свой капитал, добывая токены). Одна из механик игры просто не позволила мне пройти мимо и не задуматься об её автоматизации, так как выглядит она очень простым, но скучным, и долгим занятием. А это то, что нужно.

Суть её такова: с помощью нехитрых действий в браузере по подтверждению криптовалютных транзакций с шансом в 33% нам дают некие внутриигровые кристаллы обычного качества, либо с шансом в 2% легендарного. Эти кристаллы можно как-то использовать в игре, но я не углублялся. Разработчики так же обещают, что добытые кристаллы можно монетизировать следующим образом: каждый обычный кристалл стоит 10 очков, а легендарный - 120. Если набрать до конца сезона (я так и не понял когда он завершается) 10 000 очков, то в качестве вознаграждения дадут какой-то NFT, а минимум 5000 очков конвертируют в токены SKL. Сколько это человеческих денег, я не знаю, да это и не важно, наш интерес- это выполнить поставленную задачу максимально быстрым и простым способом с помощью навыков программирования.

Обещания разработчиков по поводу монетизации.
Обещания разработчиков по поводу монетизации.

И так, исходя из поставленных условий, следует, что для достижения 10 000 очков необходимо добыть аж 1000 обычных кристаллов, которые выпадают с шансом в 33%. Легендарных понадобится в разы меньше, но и выпадают они почти никогда.

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

Жмем кнопки
Жмем кнопки

Далее некоторое время транзакция обрабатывается и всплывает окно, что никаких кристаллов мы не получили, но нам обязательно повезет в следующий раз.

Повезёт в следующий раз...
Повезёт в следующий раз...

Верим. Дожидаемся, пока кнопка вновь станет активной. Повторяем цикл. В итоге на каждую итерацию цикла может уходить до минуты драгоценного времени. Тратить столько времени с эфемерной надеждой на заработок непонятного размера не наш вариант, поэтому будем привлекать робота.

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

Но нам не до их страданий. Для работы робота я решил использовать свой ноутбук, который обычно стоит без дела и нужен мне только в длительных поездках, так как запущенная программа не даст во время своей работы использовать компьютер по другим назначениям. Кроме того, ноут будет выполнять работу в энергоэффективном режиме, что позволит избежать хоть и небольших, но всё же денежных потерь. И прямо сейчас ноутбук занимается своим делом, а я на основном компьютере пишу эту статью. Ну и иногда поглядываю на "улов", но об этом позже.

Логика нашей простенькой программки будет написана на Python с использованием библиотеки PyAutoGUI. Поэтому создаем новый проект, виртуальное окружение и устанавливаем библиотеку. В зависимости от вашей операционной системы для установки нужно использовать различные команды, смотрите их в документации.

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

import pyautogui
import time

try:
    while True:
        x, y = pyautogui.position()
        print(f'X: {x}, Y: {y}', end='\r')  # Обновляем координаты в одной строке
except KeyboardInterrupt:
    print('\nВыход из программы')

PyAutoGUI позволяет делать клики мышью по нужным областям без передвижения курсора, но чтобы все выглядело максимально человечно я решил курсор двигать и добавил небольшую задержку перед кликом. Кроме того, как оказалось, на ноутбуке окно подтверждения Metamask у меня открывается не полностью и кнопки просто не видно. Поэтому в скрипт я добавил небольшую прокрутку колесиком вниз. Возможно вам этот функционал даже не понадобится.

И еще, некоторые транзакции обрабатываются намного дольше остальных и существует вероятность, когда по истечению заложенной в программе временной задержки она попытается кликнуть на кнопку, пока та еще не будет активна. После этого курсор переедет на место, где обычно открывается окно Metamask, но его там тоже не будет. В итоге программа прокрутит колесиком мышки основной экран и собьёт все координаты, в связи с чем все следующие итерации цикла будут нерабочими. Чтобы этого не происходило, в программу добавлена обязательная прокрутка колесом мыши вверх. На всякий случай.

Наш скрипт незамысловатого кликера готов и выглядит вот так:

import pyautogui
import time


def clicker():
    try:
        while True:
            # Клик левой кнопкой мыши по первой области экрана
            x = 460
            y = 650
            pyautogui.moveTo(x, y)
            time.sleep(1)
            pyautogui.click(button='left')
            #pyautogui.moveRel(50, 50)


            # Ждем 12 секунд
            time.sleep(12)

            # Клик левой кнопкой мыши по второй области экрана
            x = 1515
            y = 555
            pyautogui.moveTo(x, y)
            pyautogui.scroll(-70)
            time.sleep(1)
            pyautogui.click(button='left')
            time.sleep(25)
            pyautogui.scroll(100)
            
    except KeyboardInterrupt:
        print('\nВыход из программы')



if __name__ == '__main__':
    time.sleep(10) # пауза перед запуском функции
    clicker()

На момент написания статьи этот скрипт работает уже более 10 часов и добился некоторых успехов. Внимание на скриншот.

Заработанные честным роботизированным трудом кристаллы
Заработанные честным роботизированным трудом кристаллы

Там еще и парочка легендарных затесалась.

Вот они, редкие животные.
Вот они, редкие животные.

Итого 2430 очков из 10000 за 10 часов. Не так уж и плохо. Есть и другие мысли, как реализовать этот функционал, но не уверен, что будет эффективнее. А меня зовут Тема, большую часть жизни я бегал с пистолетом, а теперь вот ударился в разработку. Но писать о каких-то сложных проектах мне лень. Если что, буду рад увидеть вас в своем telegram или запретограме.

Комментарии (19)


  1. Kuch
    07.05.2024 16:50

    Почему плохо.

    1. Скрипт очень нестабильный, что там не появилось, что-то там прокрутилось, все сломалось.

    2. Для автоматизации работы в браузере есть намного более удобные способы и с проверкой состояния кнопки и с кликом на конкретную кнопку, а не на координаты экрана. Любой qa автоматизатор и тем более фронтендер скажет.

    3. Понятное дело, что денег с этого не поиметь. Вы тратите больше электричества, чем то что получите на выходе, если вообще что-то будет, потому что это какая-то полная фигня

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


    1. temabed Автор
      07.05.2024 16:50

      Со всем согласен, кроме последнего пункта. Смысл статьи как раз показать, как можно на коленке за 5 минут написать безнес проект (назовём это так), имея только базовые познания. А делать из этого поделия что-то более сложное просто невыгодно, потому что оно уже выполняет задачу. Оставшееся время и средства можно потратить на разработку чего-то другого.

      Если я вдруг заработаю миллионы на этом скрипте-пятиминутке, обязательно отпишусь :)


      1. Shikitch
        07.05.2024 16:50

        Сейчас будет очень глупый вопрос от человека, который с Пайтон общался пока только через Jupyter Notebook) Как Вы запускали Ваш скрипт?) Через командную строку и интерпретатор?


        1. temabed Автор
          07.05.2024 16:50

          Запускать скрипт можно любым удобным способом, как через командную оболочку, так и через IDE. Мне нравится через IDE. Для написания и запуска простых скриптов я использую Visual Studio Code, для более сложных проектов PyCharm. Но обращаю внимание, что по факту тут два скрипта, и лучше их разместить в отдельных файлах (с расширением .py соответственно). Одним скриптом узнаем координаты и отключаем. А второй уже работает.


      1. Xius
        07.05.2024 16:50

        как можно на коленке за 5 минут написать безнес проект

        Даже Python не обязательно было использовать. Есть приложение MouseRecorder Pro - можно записать действия и включить бесконечный повтор. Есть возможность подправить/упростить список необходимых действий, задать задержку, включить по расписанию и т.д. и т.п.


        1. temabed Автор
          07.05.2024 16:50

          Да, но это неспортивно. И питон куда более гибкий инструмент. Тут описывается лишь базовый пример кода, но на него можно нарастить мяса с распознаванием кнопок и компьютерным зрением, например.


    1. danilovmy
      07.05.2024 16:50

      Ну раз сказал, почему плохо, то для конструктивного результата стоит сказать, что хорошо и что еще можно попробовать.

      Итак. Почему хорошо:

      1. Просто. Это хорошо. Это не задротство с selenuim.

      2. Молодец что не побоялся рассказать! Это прям очень смело заехать на хабр.

      3. Есть комментарии и отлов прерываний. Прям верным путем идете товарищи. Долго, еще, конечно, но направление норм.

      Что стоит добавить:

      @temabedдля поучиться чему-то реально современному, поставь камеру перед экраном, сделай распознавание объектов real-time и научи машину находить кнопку на экране, после добавь "человеческий" сдвиг курсора, что бы аналайзер не начал подозревать, что робот курсор дергает. В итоге прокачаешь требуемые навыки, станешь востребованным специалистом и перестанешь страдать такой фигней, как генерация псевдокоинов за дорогое и неэкологичное электричество.

      И главное, автор, не слушай никаких советчиков. А то они тебе сейчас такое насоветуют... как я, например.


      1. temabed Автор
        07.05.2024 16:50

        Благодарю за качественный разбор и советы. У меня есть план и я его придерживаюсь :)

        Зря, конечно, я такой детский пример на Хабр выложил. Насмешил людей. Но нашло что-то. Мне самому нравится читать/смотреть, как люди решают хоть и простенькие, но задачи из реальной жизни. Вот и поделился последним примером из своей.

        Есть у меня уже и то, что можно назвать словом "проект", однако писать о нем статью придётся еще дольше, чем код, и что-то пока времени не находится.


  1. imageman
    07.05.2024 16:50
    +1

    ну не ругайте сильно парня, он старался....

    Вот парочка функций-братьев, которые могут помочь.

    def find(png_sample, confidence=0.9):
        if os.path.exists(png_sample) is False:
            logger.error('File not exist ' + png_sample)
            return False
        btn = pyautogui.locateCenterOnScreen(png_sample, confidence=confidence)
        if btn != None:
            return btn
        return False
    def find_and_click(png_sample, confidence=0.9):
        if os.path.exists(png_sample) is False:
            logger.error('File not exist ' + png_sample)
            return False
        btn = pyautogui.locateCenterOnScreen(png_sample, confidence=confidence)
        if btn != None:
            pyautogui.moveTo(btn)
            logger.debug(f'Click to {png_sample} {btn}')
            pyautogui.click()
            pyautogui.sleep(0.04)
            return True
        return False

    А что касается "Любой qa автоматизатор и тем более фронтендер" думаю заблуждение, не любой. И вообще в таком случае было бы правильнее тыкнуть в обучалку, которая это сделает эффективнее. От себя добавлю, что игрульки сделаны заковыристо, и там дебри обфусцированного JavaScript и html считай нет...


    1. temabed Автор
      07.05.2024 16:50

      Спасибо. Но на самом деле в данном случае я действительно не старался. Да, я новичок, но этот скрипт написан за несколько минут. И мне кажется этим он и хорош))

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

      Но теперь придётся сделать из кликера полноценное приложение, чтобы не посрамить хабровчан :)


  1. SergeyTarasenko26
    07.05.2024 16:50
    +1

    Хочу поддержать автора данной статьи и сказать что вы не одни)

    Почему это может быть интересно?

    Банально в качестве развития навыков программирования и использования какого нибудь одноплатника с ядром linux. Где низкое энергопотребление.

    Почему это может принести доход?

    Сейчас очень много активности в телеграмме. Очень много активности на десятке других сайтов. Где цель заходить каждый день и что-то выполнять, собирать монеты и т.д. Все это потенциально может принести доход в криптовалюте и отказываться от такого не стоит.

    Я сам недели две назад начал писать подобные скрипты на js. Использую puppeteer для фонового серфинга по веб версии телеграма. С помощью определенных функций нахожу кнопки, поля ввода и т.д для взаимодействия с интерфейсом. Чтобы управлять удаленно скриптами, создал кучу ботов в ТГ. Также использую менеджер PM2 , с помощью которого мониторю десятки скриптов и выполняю перезагрузку, в случае если ПК был обесточен. Для меня это важно, т.к все работает 24/7. Команда pm2 monit - ван лав как говорится)

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


    1. temabed Автор
      07.05.2024 16:50
      +1

      Очень ждал комментарий от предприимчивого кибертрудяги. Спасибо) Если еще поделитесь интересными проектами в телеге, буду безмерно благодарен!


      1. SergeyTarasenko26
        07.05.2024 16:50

        без проблем


  1. Alexander554
    07.05.2024 16:50

    Идея для ускорения процесса.

    1)Попробуй посмотреть, можно ли кликать на кнопки, выполняя POST запросы с помощью библиотеки requests.

    2) Не знаю, возможно ли, но попробуй запустить скрипт в несколько потоков.


    1. temabed Автор
      07.05.2024 16:50

      Что-то мне подсказывает, что в данном случае самое просто решение является самым рабочим. Реквестом наверное не получится, так как работать нужно еще и с окном MetaMask, которое открывает браузерное расширение. В несколько потоков вероятно тоже не получится, так как работает через один кошелек. Но надо будет попробовать. Спасибро)


    1. SergeyTarasenko26
      07.05.2024 16:50

      Это самый лучший вариант работать через Rest Api, но по ту сторону тоже сидят не дураки. Например есть проект ХОТ, только латиницей) Так вот когда работаешь по апи, нужно платить мизерную комиссию по работе с блокчейном. И еще люди ловят блокировку аккаунта с сообщением использование средств автоматизации. Так вот когда используешь эмуляцию действий юзера, никаких комиссий оплачивать не нужно и конечно же нет блокировки аккаунта. Это лишь на примере проекта что я назвал, но подобных ситуаций иного в этом дельце)


      1. SergeyTarasenko26
        07.05.2024 16:50

        • еще момент, при запуске несколько скриптов на одном ip адресе, нужно или последовательность действий скриптов синхронизировать или для каждого скрипта делать прокси. Опять же по причине, там не дураки сидят))


      1. temabed Автор
        07.05.2024 16:50

        Посмотрел я Хот, нашел даже видео, где мужики купили 70 мобилок и соорудили из них ферму по добыче этих токенов (приходят в офис каждые 4 часа и прожимают на всех аппаратах кнопки). Я определенно чего-то не понимаю в этой жизни.

        Но раз уж так майнить, мне кажется за те же деньги можно купить слабенькие ноуты, запустить на них телегу и скрипт, которые будет прожимать кнопку каждые 4 часа. И на работу можно вообще не ходить))

        Кстати, на проекте, который я описывал в статье, я на одном устройстве намайнил уже около 20 000 токенов. Если их действительно конвертируют в SKL, это будет весело. Но мне всё равно кажется что это всё бред и скам)


        1. SergeyTarasenko26
          07.05.2024 16:50

          все гораздо проще может быть чем способ с мобилками. Для этого есть специальные программы, антики их называют. Они могут запускать много профилей браузера с подключенной проксей. Этого достаточно чтобы работать с множеством аккаунтов.

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