Automatisierung von Screenshots
Verfasst: Mittwoch 13. April 2016, 10:32
Ich habe ein kleines Programm geschrieben, mit dessen Hilfe man automatisiert Screenshots erstellen kann. Das Programm fragt zunächst nach den Namen der Bilder, wobei man gleichzeitig auch die Anzahl festlegt, öffnet dann das Snipping Tool von Windows und klickt die entsprechenden Buttons so, dass man nur noch dann, wenn der Bildschirm trüb wird, den entsprechenden Bereich auf dem Bildschirm auswählen muss.
Das ist der Code:
Zusätzlich braucht man noch Screenshots von den Buttons Neu, Datei, Speichern unter und Beenden als .png im richtigen Unterordner. Hat man eine deutsche Tastatur, muss man vor dem Ausführen des Programms das Layout auf Englisch umschalten, was - wenn man das richtige Layout installiert hat - mit folgendem Skript geht:
Auf manchen PCs muss man Programme, die Maus und Tastatur bedienen, offensichtlich im Admin-Modus ausführen, auf anderen nicht. Warum ich bei meinem Haupt-PC den Faktor 0.8 für das Anklicken der Koordinaten brauche, weiß ich nicht; auf einem anderen PC habe ich das auch nicht gebraucht. (siehe auch: viewtopic.php?f=1&t=38336 und viewtopic.php?f=1&t=38317)
Als Fazit habe ich gelernt, dass pyautogui zwar funktioniert, aber ziemlich nervig ist. Außerdem geht das Klicken auch nicht unbedingt schneller, als wenn man es von Hand machen würde. Die Anwendung lohnt sich daher meiner Meinung nach nur, wenn man etwas programmiert, was keinerlei Eingriffe vom Nutzer erfordert, wo man also das Programm startet und dann einfach geht und nach einer Weile kommt man wieder und das Programm ist fertig. Im konkreten Fall, wo man immer wieder Bildschirmbereiche für die Screenshots erstellen muss, bringt es nicht so viel.
Das ist der Code:
Code: Alles auswählen
import pyautogui
import time
import os
def find_click(button):
not_open = True
while not_open:
try:
button_name = "Screenshots\{}.png".format(button)
button_location = pyautogui.locateOnScreen(button_name)
x,y = pyautogui.center(button_location)
pyautogui.click(0.8*x,0.8*y) #??? ggf.: 0.8* weg
not_open = False
except:
print "Looking for", button
pyautogui.moveRel(1,0)
not_open = True
time.sleep(1)
def make_screenshot(name):
find_click("Neu")
find_click("Datei")
find_click("Speichern_unter")
pyautogui.typewrite("C:\Users\Susanne\Dateien\Verschiedenes\Screenshots\{}.png".format(name)) #Ordner, in den die Screenshots gespeichert werden sollen
pyautogui.hotkey("enter")
print "Eingabe der Dateinamen (ohne Endung), Beenden der Eingabe: quit"
eingabe = ""
names = []
while eingabe != "quit":
eingabe = raw_input(">> ")
if eingabe != "quit":
names.append(eingabe)
pyautogui.hotkey("win", "r")
pyautogui.typewrite("SnippingTool.exe")
pyautogui.press("enter")
for name in names:
make_screenshot(name)
find_click("Datei")
find_click("Beenden")
Code: Alles auswählen
import pyautogui
import subprocess
pyautogui.hotkey("win", "space") #changes layout to English
subprocess.call(["C:\Python27\python.exe", "C:\Users\Susanne\Dateien\Verschiedenes\make_screenshot\make_screenshot.py"]) #hinten: Python-Programm, das geoeffnet werden soll
pyautogui.hotkey("win", "space") #changes layout to back to German
Als Fazit habe ich gelernt, dass pyautogui zwar funktioniert, aber ziemlich nervig ist. Außerdem geht das Klicken auch nicht unbedingt schneller, als wenn man es von Hand machen würde. Die Anwendung lohnt sich daher meiner Meinung nach nur, wenn man etwas programmiert, was keinerlei Eingriffe vom Nutzer erfordert, wo man also das Programm startet und dann einfach geht und nach einer Weile kommt man wieder und das Programm ist fertig. Im konkreten Fall, wo man immer wieder Bildschirmbereiche für die Screenshots erstellen muss, bringt es nicht so viel.