Найти в Дзене
Артем Милич

Как написать бота в Python для Forge of Empires: Повторяющиеся квесты

Привет! 👋 Сегодня мы продолжаем совершенствовать нашего бота для автоматизации рутинных задач, на этот раз фокусируясь на более сложной логике взаимодействия, а не просто на сборе ресурсов. Этот скрипт представляет собой более продвинутую версию предыдущего, автоматизируя последовательность кликов по изображениям на экране. Его основная задача — находить изображение с двумя мешками (target1.jpg), кликать по нему, затем, кликать по нему снова с уже confidence 0.6, т.к. изображение поменялось Затем кликать по изображению "награды" (reward.jpg) и пропускаем все, когда изображение с двумя мешками не найдено (cancel.jpg). Для корректной работы этого скрипта вам понадобятся подготовить три изображения: Как и раньше, важно делать скриншоты в том же масштабе и разрешении, в котором будет работать бот, и выбирать уникальные, хорошо различимые части изображений. В этот раз мы видим несколько ключевых улучшений: Эта функция отвечает за перемещение курсора мыши к заданной позиции (x,y) с добавл
Оглавление

Привет! 👋

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

🧩 Что делает наш скрипт?

Этот скрипт представляет собой более продвинутую версию предыдущего, автоматизируя последовательность кликов по изображениям на экране. Его основная задача — находить изображение с двумя мешками (target1.jpg), кликать по нему, затем, кликать по нему снова с уже confidence 0.6, т.к. изображение поменялось

-2

Затем кликать по изображению "награды" (reward.jpg) и пропускаем все, когда изображение с двумя мешками не найдено (cancel.jpg).

📸 Подготовка изображений

Для корректной работы этого скрипта вам понадобятся подготовить три изображения:

  • target1.jpg: Как уже было сказано это изображение с двумя мешками.
  • reward.jpg: Изображение кнопки или области, которая появляется после выполнения действия с target1.jpg и является "наградой" или завершением процесса.
  • cancel.jpg: Изображение кнопки "отмена".

Как и раньше, важно делать скриншоты в том же масштабе и разрешении, в котором будет работать бот, и выбирать уникальные, хорошо различимые части изображений.

-3

🔧 Чем мы воспользуемся из прошлого поста

В этот раз мы видим несколько ключевых улучшений:

  • Динамическое смещение курсора: параметр deltaY в функции move_mouse_with_offset. Это позволяет выполнять клики с вертикальным смещением от центра найденного изображения, что очень полезно, когда интерактивная область кнопки находится не строго по центру изображения или когда нужно кликнуть по другому элементу, связанному с первым.
  • Гибкость confidence: в функции locate_and_click теперь используем confidence как параметр. Это позволяет регулировать строгость поиска изображений для разных целей: например, для наших двух мешков используется confidence=0.7 по умолчанию, а для второго клика по тому же изображению — confidence=0.6, что делает поиск менее строгим, если элемент мог немного измениться.
  • Обработка нескольких кликов: Основной цикл main_loop теперь выполняет несколько действий в зависимости от того, найдено ли target1.jpg (два мешка). Это демонстрирует более сложную логику взаимодействия, чем простой "нашел-кликнул".
  • Отладочные комментарии: В коде присутствуют закомментированные print statements, которые очень полезны для отладки и понимания, что происходит, когда бот не находит изображение или сталкивается с ошибкой.

🐍 Разбор кода по функциям

1. move_mouse_with_offset()

-4

Эта функция отвечает за перемещение курсора мыши к заданной позиции (x,y) с добавлением случайного смещения. Это имитирует более естественное движение мыши, делая его менее "роботизированным". Новый параметр deltaY позволяет применить дополнительное вертикальное смещение к целевой координате.

2. locate_and_click()

-5

Эта функция является основной для взаимодействия с элементами на экране. Она ищет изображение (image_name) на экране с заданной уверенностью (confidence). Если изображение найдено, она перемещает курсор к его центру (с учетом deltaY для дополнительного смещения) и выполняет клик. После клика следует случайная задержка, имитирующая человеческое поведение. Функция возвращает True в случае успеха и False в случае неудачи (изображение не найдено или произошла ошибка).

3. main_loop()

Python

-6

Это главный цикл программы. Он работает в течение заданного времени (duration_time в минутах). Внутри цикла:

  • Он пытается найти и кликнуть по target1.jpg (два мешка) со смещением вверх deltaY=-40.
  • Если target1.jpg найдено и кликнуто успешно, скрипт затем пытается кликнуть по target1.jpg снова (но уже с confidence=0.6 и deltaY=40), а затем по reward.jpg.
  • Если target1.jpg не найдено, скрипт пытается кликнуть по cancel.jpg. Пропуская все квесты без мешков.
  • В конце каждой итерации выводится оставшееся время работы скрипта.

✅ Итоги

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

  • Использовать динамическое смещение курсора для более точных кликов.
  • Адаптировать строгость поиска изображений (confidence) для разных ситуаций.
  • Строить последовательности действий в зависимости от результатов поиска элементов и добавлять альтернативные действия.
-7

❤️ Подписывайтесь!

Дальше мы будем развивать нашего бота для экспедиции, ПБГ и даже, возможно, более сложные взаимодействия в Forge of Empires. Следите за обновлениями!

P.S. Помните: великие империи строятся руками, но иногда... очень ленивыми руками с питоновскими скриптами.