лучший способ автоматизировать мышь и клавиатуру с помощью pyautogui

Я написал скрипт, используя pyautogui, который должен запустить программу (IDE), а затем начать ее использовать. Это сценарий до сих пор:

#! python3
# mouseNow.py - Displays the mouse cursor's current position.
import pyautogui, sys, subprocess
from time import sleep

x,y = 1100,550

subprocess.call([r'C:\...exe',  arg1, arg2])
pyautogui.click(x,y)
sleep(5) # 2 sec should suffice but this is for safety
pyautogui.typewrite(my_string)
pyautogui.press('enter')

Это работает хорошо, но я хочу быть портативным. Значения x,y определялись тем, где на экране появляется приглашение программы после запуска программы, но я думаю, что это не переносимо. Есть ли способ указать мышью на подсказку, не указывая константные параметры? что-то вроде move_mouse_to_window_of_this_process_after_starting_it()

Кроме того, я использую sleep(), поэтому я записываю данные в окно после его появления, но я думаю, что это не очень хороший способ (наверное, некоторые ПК будут работать намного медленнее), так что есть ли способ узнать, когда появилось приглашение, а затем выполнить pyautogui.typewrite(my_string)?

EDIT: я нашел простое решение для move_mouse_to_window_of_this_process_after_starting_it() :

>>> pyautogui.hotkey('alt', 'tab')


person CIsForCookies    schedule 23.02.2017    source источник


Ответы (2)


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

  • Win32 API, автоматизация пользовательского интерфейса MS (Windows)
  • АТ-SPI (Линукс)
  • API специальных возможностей Apple (MacOS)

Существует несколько библиотек автоматизации GUI с открытым исходным кодом, поддерживающих некоторые из этих технологий (обычно 1 или 2). Решения Python:

Существует также тема на StackOverflow, посвященная жесткому сну и гибкому ожиданию.

Наслаждаться! :)

person Vasily Ryabov    schedule 24.02.2017

То, как вы взаимодействуете с .exe, исключает альтернативы координатам или слепой стрельбе (Tab, Tab, Enter и т. Д.).

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

person Dimitry Kotovka    schedule 23.02.2017
comment
есть ли другой способ взаимодействия с файлами .exe, который не исключает альтернатив? - person CIsForCookies; 23.02.2017