Код 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

Функции Message Box

Он предоставляет окна сообщений в стиле JavaScript.

И другие.


Для других предложений проверьте: Библиотека автоматизации графического интерфейса Python для имитации взаимодействия пользователей в приложениях.