Салам.
Без лишних слов, сразу к делу.(тут код неправильно отображается, будет полный пример кода файлом на канале)
Шаг 1
Скачиваем exe-шник ADB из официального сайта гугла.
Это находится тут https://developer.android.com/tools/releases/platform-tools?hl=ru
А конкретно, надо нажать на ту 👇 ссылку и принять правила, после чего начнется загрузка zip архива.
Если у вас не винда, то качаем под вашу ОС, например Mac или Linux
Затем надо распаковать архив, можно в той же папке, как хотите, главное запомните полный путь до файла adb.exe
Шаг 2
Перед тем как будем подключать к скрипту, необходимо узнать серийный номер смартфона.
Включаем отладку по USB на смартфоне в настройках android.
- 1. На своем телефоне откройте настройки → О телефоне → Номер сборки и быстро нажмите на него семь раз подряд, пока не появится сообщение «Вы стали разработчиком!»
- 2. Вернитесь назад в главное меню настроек и найдите пункт «Параметры разработчика».
- 3. Включите там опцию «Отладка по USB».
Затем заходим в консоль/терминал на ПК/ноуте и пишем cd команду и полный путь до вашей папки.
Подключите ваш смартфон по USB к ПК/ноуту.
Надо на смартфоне подтвердить доступ к данным и отпечаток, кликните флажок "Больше не спрашивать" и "Разрешить отладку с этого компьютера".
Затем надо написать команду adb devices.
Нам выведет список подключенных устройств. нам нужен будет серийный номер, копируем его.
(инфа для продвинутых, серийный номер можно получать прямо из кода, в следующей части будет пример функции как это делать Не вручную)
Шаг 3
А затем, пишем код...
Вот пример функции чтобы сделать скриншот экрана (смартфона).
<<
import subprocess
import os
# Замените на реальный серийный номер своего устройства
device_id = "ЗДЕСЬ ВАШ СЕРИЙНЫЙ НОМЕР СМАРФТОНА"
# Замените на реальный путь до вашей папки platform-tools
adb_path = "ПОЛНЫЙ ПУТЬ ДО ВАШЕЙ ПАПКИ platform-tools\\adb.exe"
def take_screenshot():
# Временный путь на устройстве
temp_file_path = '//data//local//tmp//screenshot.png'
# Берём скриншот на устройстве
subprocess.run([adb_path, '-s', device_id, 'shell', 'screencap', temp_file_path], check=True)
# Локальное имя файла на вашем ПК
local_filename = 'screenshot.png'
# Копируем файл на ПК
subprocess.run([adb_path, '-s', device_id, 'pull', temp_file_path, local_filename], check=True)
# Удаляем временный файл с устройства
subprocess.run([adb_path, '-s', device_id, 'shell', 'rm', temp_file_path], check=True)
print(f"Скриншот успешно сохранён как '{local_filename}'")
# Запустить функцию
take_screenshot()
>>
Очень плохо что тут в Дзене нету форматирования кода, в общем копируйте его, проверяйте отступы и табы.
Еще примеры функций которые можно добавить и юзать в коде
1. Функция: очень быстрый поиск кнопки/текста/ссылок по имеющемуся шаблону кнопки как картинка например image.png|jpg и передает координаты в функцию для клика. (универсальная)
2. Функция для клика по этим координатам.
У вас должна быть картинка шаблон/скриншот именно той области, на которую вы хотите нажимать
У меня вот такой image.png лежит в рабочей папке 👇
Еще раз повторюсь, в рабочей папке должно быть все наши файлы, основные main image и adb
Думаю суть понятна, конечно лучше разложить по отдельным папкам, но вам нужно будет поменять пути в коде, это уже по желанию для продвинутых, новичкам показываю так, без затруднений.
Пример:
Но для начала у вас должны быть установлены две библиотеки:
1. Для комп зрения
2. Для хранения данных об изображениях и операции с ними
Команда для установки:
pip install opencv-python numpy
Код (пример, в реальности необходимо реализовать перед этим, переход в приложение и т.д.):
<<
# Функция для нахождения объектов на скриншоте
def find_and_tap_object(image_to_find_path, screenshot_path, threshold=0.7):
# Загружаем эталонное изображение (наш шаблон)
template = cv2.imread(image_to_find_path, cv2.IMREAD_GRAYSCALE)
if template is None:
raise FileNotFoundError(f"Файл шаблона '{image_to_find_path}' не найден!")
# Читаем скриншот
screenshot = cv2.imread(screenshot_path, cv2.IMREAD_GRAYSCALE)
if screenshot is None:
raise FileNotFoundError(f"Файл скриншота '{screenshot_path}' не найден!")
# Используем метод сопоставления изображений (Template Matching)
res = cv2.matchTemplate(screenshot, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# Выбираем подходящий объект
if max_val >= threshold:
y, x = max_loc
center_x = int(x + template.shape[1] // 2)
center_y = int(y + template.shape[0] // 2)
# Отправляем тап по центру найденного объекта
tap_on_device(center_x, center_y)
print(f"Тап выполнен по координатам ({center_x}, {center_y})")
else:
print("Объект не найден на скриншоте.")
# Функция отправки тапа на экран устройства
def tap_on_device(x, y):
global adb_path, device_id
command = [adb_path, "-s", device_id, "shell", "input", "tap", str(x), str(y)]
subprocess.run(command, check=True)
>>
И соответственно их надо вызвать примерно так:
find_and_tap_object(<путь-до-шаблона/скрин кнопки>, <путь-до-скриншота-смартфона-экран>)
Она уже под капотом кликнет по этой кнопке/полю и т.д., в общем по вашему шаблону.
Во второй части будет больше интересных функций и пример реального использования в жизни.