Chcę zautomatyzować zajęcia pulpitu w środowisku Windows za pomocą Pythona. Jak można to zrobić? Niektóre przykłady będą również pomocne.

Działania stacjonarne, mam na myśli działania takie jak przejęcie kontroli nad myszą i klawiaturą, dostęp do aktywnych Właściwości systemu Windows, kliknij dwukrotnie ikonę na pulpicie, minimalizuj i zmaksymalizuj system Windows, wprowadź dane do okna podręcznego wejściowego przez klawiaturę itp.

25
stallion 6 sierpień 2012, 13:06

5 odpowiedzi

Najlepsza odpowiedź

Spójrz na Sikuli.

Sikuli to technologia wizualna do automatyzacji i testowania graficznych interfejsów użytkownika (GUI) za pomocą obrazów (zrzutu ekranu).

Sikuli wykorzystuje bardzo sprytną kombinację zrzutów ekranu i osadzanie ich do Pythona (jest to Jython, właściwie) skrypt.


Weź zrzuty ekranu:

enter image description here

I użyj ich w kodzie:

enter image description here

22
sloth 6 sierpień 2012, 11:13

Możesz spróbować AUTOMA.

Jest to narzędzie automatyki systemu Windows Gui napisane w Pythonie, który jest bardzo prosty w użyciu. Na przykład możesz wykonać następujące czynności:

# 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)

Pełna lista dostępnych poleceń można znaleźć tutaj.

Zrzeczenie się : Jestem jednym z deweloperów Automam.

8
Tytus 20 lipiec 2013, 07:10

Istnieją różne sposoby automatyzacji interfejsów użytkownika w systemie Windows, do których można uzyskać dostęp przez Pythona (przy użyciu {x0}} lub niektórych wiązań Python Windows):

  1. Surowe Windows API - {X0}} dla myszy, HWND API jak GetFocus i GetForegroundWindow

  2. AutoIt - Język skryptowy automatyzacji: Dzwonienie do funkcji Autoit w Python

  3. Microsoft Active Accessibility ({X0}}) / WinEvent - API do przesłuchania interfejsu interfejsu interfejsu API w Win95.

  4. UI / Automation (UIA) - Wymiana MSAA wprowadzona w Vista (dostępna do XP SP3 IIRC).

Automatyzacja interfejsu użytkownika do testowania jest to zadanie nierywialne. Jest wiele gotchas, które może cię wykryć.

Sugerowałem testowanie strukturę automatyki w sposób zautomatyzowany, dzięki czemu można sprawdzić, czy działa na testach testowych (w celu identyfikacji awarii automatyki API vs w aplikacji).

Kolejną rozważaniem jest to, jak radzić sobie z lokalizacją. Należy również zwrócić uwagę, że nazwy zminimalizowania / maksymalizacji / ... są również zlokalizowane i mogą być w innym języku do aplikacji (system vs. User Locale)!

W Pseudo-Code, program MSAA, aby zminimalizować aplikację wyglądałoby coś takiego jak:

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 Dostępne elementy są przechowywane jako pary (object: IAccessible, childId: int). Opieka jest tutaj potrzebna, aby uzyskać poprawne połączenia (np {x2}} używa tylko IAccessible, więc gdy childId nie jest 0, musisz wrócić 0 zamiast dzwonić {X5}})!

IAccessible Połączenia mogą zwrócić różne kody błędów, aby wskazać "this object does not support this property" - np. DISP_E_MEMBERNOTFOUND lub E_NOTIMPL.

Bądź świadomy stanu okna. Jeśli okno jest zmaksymalizowane, zminimalizowane, przywrócenie przywróci okno do jego zmaksymalizowanego stanu, więc musisz go przywrócić ponownie, aby odzyskać go do stanu normalnego / okiennego.

MSAA i UIA API nie obsługują kliknięcia prawym przyciskiem myszy, więc trzeba użyć Win32 API, aby go wyzwolić.

Model MSAA nie obsługuje TreeView Heirarchy Information - wyświetla go jako płaska lista. Z drugiej strony UIA wylicza tylko elementy widoczne, dzięki czemu nie będziesz mógł uzyskać dostęp do elementów w drzewie UIA, które są zawalone.

8
Community 23 maj 2017, 12:32

Możesz użyć Pyautogui, który zapewnia specyfikacyjną drogę do wykonywania automatyzacji GUI.

Sterowanie myszą

Oto prosty kod, aby przesunąć mysz do środka ekranu:

import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)

Podobne pytanie: Kontrolowanie myszy z pytonem.

Kontrola klawiatury.

Przykład:

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

Funkcje skrzynki wiadomości

Zapewnia pudełka wiadomości w stylu JavaScript.

I inne.


Dla innych sugestii, sprawdź: Biblioteka automatyki GUI Python do symulowania interakcji użytkownika w aplikacjach.

3
kenorb 7 styczeń 2018, 14:24

Możesz zablokować komputer (Win + L)

import ctypes
ctypes.windll.user32.LockWorkStation()

Możesz oczyścić swój kosz na recykling

import winshell
winshell.recycle_bin().empty(confirm=False, show_progress=False, sound=True)
0
Abhinav Anand 22 czerwiec 2017, 10:29