Код Python для автоматизации действий рабочего стола в окнах
Я хочу автоматизировать действия рабочего стола в среде Windows с помощью Python. Как это можно сделать? Некоторые примеры также будут полезны.
В настольных операциях я подразумеваю такие действия, как управление мышью и клавиатурой, доступ к активным свойствам окон, двойное нажатие на значок на рабочем столе, сворачивание и максимизация окон, ввод данных во входное всплывающее окно с клавиатуры и т.д..
Ответы
Ответ 1
Посмотрите SIKULI.
Sikuli - это визуальная технология для автоматизации и тестирования графического пользователя интерфейсов (GUI), используя изображения (снимки экрана).
SIKULI использует очень умную комбинацию снятия скриншотов и встраивание их в ваш python (это jython, на самом деле) script.
Сделайте скриншоты:
![enter image description here]()
и используйте их в своем коде:
![enter image description here]()
Ответ 2
Существуют различные способы автоматизации пользовательских интерфейсов в Windows, к которым можно получить доступ через Python (используя ctypes
или некоторые из привязок окон Python):
-
API-интерфейсы Raw windows - Get/SetCursorPos
для мыши, API HWND, такие как GetFocus
и GetForegroundWindow
-
AutoIt
- язык сценариев автоматизации: Вызов функций AutoIt в Python
-
Microsoft Active Accessibility (MSAA
)/WinEvent - API для опроса пользовательского интерфейса через API доступности в Win95.
-
UI/Automation (UIA
) - замена для MSAA
, представленная в Vista (доступна для XP SP3 IIRC).
Автоматизация пользовательского интерфейса для тестирования - нетривиальная задача. Есть много ошибок, которые могут вас тронуть.
Я бы предложил провести автоматическую проверку вашей инфраструктуры автоматизации, чтобы вы могли убедиться, что она работает на тестируемых платформах (для выявления сбоев в автоматизации API
против сбоев в приложении).
Еще одно соображение - как справиться с локализацией. Также обратите внимание, что имена Minimize/Maximize/... также локализованы и могут быть на другом языке для приложения (система или локали пользователя)!
В псевдокоде программа MSAA
для минимизации приложения выглядит примерно так:
window = AccessibleObjectFromWindow(FindWindow("My Window"))
titlebar = [x for x in window.AccessibleChildren if x.accRole == TitleBar]
minimize = [x for x in titlebar[0].AccessibleChildren if x.Name == "Minimize"]
if len(minimize) != 0: # may already be minimized
mimimize[0].accDoDefaultAction()
MSAA
доступные элементы сохраняются как пары (object: IAccessible, childId: int)
. Для правильного ответа на вызовы нужна помощь (например, get_accChildCount
использует только IAccessible
, поэтому, когда childId
не равно 0, вы должны вернуть 0 вместо вызова get_accChildCount
)!
IAccessible
вызовы могут возвращать разные коды ошибок, чтобы указать "this object does not support this property"
- например. DISP_E_MEMBERNOTFOUND
или E_NOTIMPL
.
Помните о состоянии окна. Если окно максимизировано, то сведено к минимуму, восстановление вернет окно в его максимизированное состояние, поэтому вам нужно снова его восстановить, чтобы вернуть его в нормальное состояние/оконное.
API-интерфейсы MSAA
и UIA
не поддерживают щелчки правой кнопкой мыши, поэтому вам нужно использовать Win32 API
для его запуска.
Модель MSAA
не поддерживает информацию о иерархической древовидной структуре дерева - она отображает ее как плоский список. С другой стороны, UIA
будет перечислять только элементы, которые видны, поэтому вы не сможете получить доступ к элементам в дереве UIA
, которые сбрасываются.
Ответ 3
Вы можете попробовать Automa.
Это инструмент автоматизации Windows GUI, написанный на Python, который очень прост в использовании. Например, вы можете сделать следующее:
# to double click on an icon on the desktop
doubleclick("Recycle Bin")
# to maximize
click("Maximize")
# to input some text and press ENTER
write("Some text", into="Label of the text field")
press(ENTER)
Полный список доступных команд можно найти здесь.
Отказ от ответственности: я один из разработчиков Automa.
Ответ 4
Вы можете заблокировать свой компьютер (Win + L)
import ctypes
ctypes.windll.user32.LockWorkStation()
Вы можете очистить корзину.
import winshell
winshell.recycle_bin().empty(confirm=False, show_progress=False, sound=True)
Ответ 5
Вы можете использовать PyAutoGUI, которые предоставляют кросс-платформенный способ Python для автоматизации GUI.
Вот простой код для перемещения мыши в середину экрана:
import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
Похожие вопросы: Управление мышью с помощью Python.
Пример:
pyautogui.typewrite('Hello world!') # prints out "Hello world!" instantly
pyautogui.typewrite('Hello world!', interval=0.25) # prints out "Hello world!" with a quarter second delay after each character
Он предоставляет окна сообщений в стиле JavaScript.
И другие.
Для других предложений проверьте: Библиотека автоматизации графического интерфейса Python для имитации взаимодействия пользователей в приложениях.