web-dev-qa-db-de.com

Python-Code zum Automatisieren von Desktop-Aktivitäten in Windows

Ich möchte Desktop-Aktivitäten in der Windows-Umgebung mit Python automatisieren. Wie geht das? Einige Beispiele werden auch hilfreich sein.

Mit Desktop-Aktivitäten meine ich Aktionen wie das Steuern der Maus und der Tastatur, den Zugriff auf die Eigenschaften des aktiven Fensters, das Doppelklicken auf ein Symbol auf dem Desktop, das Minimieren und Maximieren von Fenstern, das Eingeben von Daten in ein Popup-Eingabefenster über die Tastatur usw.

17
stallion

Schauen Sie sich SIKULI an.

Sikuli ist eine visuelle Technologie zum Automatisieren und Testen grafischer Benutzer Schnittstellen (GUI) mit Bildern (Screenshots).

SIKULI verwendet eine sehr clevere Kombination aus dem Erstellen von Screenshots und deren Einbettung in Ihr Python-Skript (eigentlich jython ).


Machen Sie Screenshots:

enter image description here

und verwende sie in deinem Code:

enter image description here

14
sloth

Es gibt verschiedene Möglichkeiten, Benutzeroberflächen in Windows zu automatisieren, auf die über Python (mit ctypes oder einigen der Python-Windows-Bindungen) zugegriffen werden kann:

  1. Raw-Windows-APIs - Get/SetCursorPos für die Maus, HWND-APIs wie GetFocus und GetForegroundWindow

  2. AutoIt - Automatisierungsskriptsprache: AutoIt-Funktionen in Python aufrufen

  3. Microsoft Active Accessibility (MSAA)/WinEvent - Eine API zum Abfragen einer Benutzeroberfläche über die Eingabehilfen-APIs in Win95.

  4. UI/Automation (UIA) - ein Ersatz für MSAA in Vista (verfügbar für XP SP3 IIRC).

Die Automatisierung einer Benutzeroberfläche zu Testzwecken ist eine nicht triviale Aufgabe. Es gibt viele Gotchas, die dich stolpern können.

Ich würde vorschlagen, Ihr Automatisierungsframework auf automatisierte Weise zu testen, damit Sie überprüfen können, ob es auf den von Ihnen getesteten Plattformen funktioniert (um Fehler in der Automatisierung API vs. Fehler in der Anwendung zu identifizieren).

Eine weitere Überlegung betrifft den Umgang mit der Lokalisierung. Beachten Sie auch, dass die Namen für Minimize/Maximize/... ebenfalls lokalisiert sind und sich in einer anderen Sprache als die Anwendung befinden können (System vs. User Locale)!

In Pseudo-Code würde ein MSAA-Programm zum Minimieren einer Anwendung ungefähr so ​​aussehen:

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 zugreifbare Elemente werden als (object: IAccessible, childId: int) Paare gespeichert. Hier ist Vorsicht geboten, damit die Anrufe korrekt sind (z. B. verwendet get_accChildCount nur die IAccessible. Wenn childId nicht 0 ist, müssen Sie 0 zurückgeben, anstatt get_accChildCount aufzurufen)!

IAccessible-Aufrufe können unterschiedliche Fehlercodes zurückgeben, um "this object does not support this property" anzuzeigen, z. DISP_E_MEMBERNOTFOUND oder E_NOTIMPL.

Beachten Sie den Zustand des Fensters. Wenn das Fenster maximiert und dann minimiert wird, stellt restore das Fenster wieder in den maximierten Zustand zurück. Sie müssen es daher erneut wiederherstellen, um es wieder in den normalen/Fensterzustand zu bringen.

Die MSAA- und UIA-APIs unterstützen keine Klicks mit der rechten Maustaste. Daher müssen Sie zum Auslösen einen Win32 API verwenden.

Das Modell MSAA unterstützt keine Informationen zur Baumansicht-Hierarchie, sondern zeigt es als einfache Liste an. Andererseits listet UIA nur Elemente auf, die sichtbar sind, sodass Sie nicht auf Elemente in der UIA-Struktur zugreifen können, die reduziert sind.

7
reece

Sie können Automa versuchen.

Es ist ein in Python geschriebenes Windows-GUI-Automatisierungswerkzeug, das sehr einfach zu bedienen ist. Sie können beispielsweise Folgendes tun:

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

Die vollständige Liste der verfügbaren Befehle finden Sie hier .

Disclaimer: Ich bin ein Entwickler von Automa.

5
Tytus

Sie können PyAutoGUI verwenden, um eine plattformübergreifende Python-Methode für die GUI-Automation bereitzustellen.

Maussteuerung

Hier ist ein einfacher Code, um die Maus in die Mitte des Bildschirms zu bewegen:

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

Verwandte Frage: Steuern der Maus mit Python .

Tastatursteuerung

Beispiel:

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

Meldungsfeldfunktionen

Es enthält Meldungsfelder im JavaScript-Stil.

Und andere.


Weitere Vorschläge finden Sie unter: Python GUI-Automationsbibliothek zum Simulieren der Benutzerinteraktion in Apps .

0
kenorb

Sie können Ihren PC sperren (Win + L)

import ctypes
ctypes.windll.user32.LockWorkStation()

Sie können Ihren Papierkorb löschen

import winshell
winshell.recycle_bin().empty(confirm=False, show_progress=False, sound=True)
0
Abhinav Anand