Die IT-Administratoren drüfen/müssen in der app.digitaleslernen.gv.at jedes Endgerät mit der entsprechenden Seriennummer einem Schüler oder einer Schülerin zuordnen. Bei 20 Geräten mag das ja noch in Ordnung sein. Wenn man mehr als 300 Geräte händisch zuordnen muss, ist eine manuelle Eingabe nicht mehr vertretbar. Leider stellt das System diesezüglich keinen Automatismus zur Verfügung.

Seit unserem Beitrag „Webseiten automatisiert ausfüllen„, sollte aber klar sein, dass einer Automatisierung nichts im Wege steht.

Das unten abgebildete Python-Skript weist jeder Schülerin/jedem Schüler seine Geräteseriennummer zu. Eine CSV-Datei enthält diese Daten und kann auch relativ einfach erstellt werden. So kann z.B. aus der Google-Admin-Console ein CSV-Datei mit den Seriennummern und den zugeordneten SuS. heruntergeladen werden. Übrigens werden Schulgeräte in dieser Version nicht zugeordnet.

Die CSV-Datei hat folgende Strukur:

vorname, nachname, deviceId

Der Aufruf braucht zwei Parameter, die CSV-Datei und die Klasse für die die Zuordnung gemacht werden soll. Zum Beispiel

python3 matchUserDevice 2C.csv 2C

Im Programm sind Login und Passwort zu ändern. Nach der Zuordnung wird noch verifiziert, ob diese auch korrekt ist. Dazu wird im Filter die Seriennummer eingegeben und überprüft, ob unten auch tatsächlich die richtigen Personendaten angezeigt werden. Im Konsolenfenster wird die Verifizierung mitprotokolliert.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
import csv
import sys

USERNAME = "" #please fill in
PASSWORD = "" #please fill in

def login():
   driver.get("https://app.digitaleslernen.gv.at/login")
   time.sleep(2)
   line = driver.find_element(By.XPATH,"//input[@placeholder='Benutzername']")
   line.send_keys(USERNAME)
   line = driver.find_element(By.XPATH,"//input[@placeholder='Passwort']")
   line.send_keys(PASSWORD)
   line = driver.find_element(By.XPATH,"//button")
   line.click();
   time.sleep(1)

def selectDeviceTab(currentClass):
    driver.get(driver.current_url+"/school")
    time.sleep(1)
    driver.find_element(By.ID,"data-sources-tabs-tab-4").click()
    driver.find_element(By.XPATH,"//button[contains(text(),'"+currentClass+"')]").click()
    time.sleep(2)
    driver.find_element(By.XPATH,"//a[contains(text(),'Gerätezuweisung')]").click()

def readCSV_andAddMatch(fileName):
   with open(fileName) as csvdatei:
      csv_reader_object = csv.reader(csvdatei,delimiter=",")
      next(csv_reader_object, None) #Skip header
      for row in csv_reader_object:
          #print(row[0],row[1],row[2]) #vorname,nachname,deviceId,
          name = row[0]+" "+row[1]
          if row[2]: #only match if deviceId exists
              matchDeviceWithUser(name,row[2])

def matchDeviceWithUser(name,devId):
    time.sleep(1)
    driver.find_element(By.XPATH,"//span[text()='Neues Gerät zuweisen']//parent::button").click()
    device = driver.find_element(By.XPATH,("//span[text()='Seriennummer:']/following::input[1]"))
    device.send_keys(devId)
    device.send_keys(Keys.RETURN)
    user = driver.find_element(By.XPATH,("//span[text()='Ausgabe an:']/following::input[1]"))
    user.send_keys(name)
    user.send_keys(Keys.RETURN)
    user.send_keys(Keys.TAB)
    time.sleep(1)
    button = driver.find_element(By.XPATH,("//span[text()='Zuweisung speichern']//parent::button"))
    button.click()
    time.sleep(1)

def verifyEntries(fileName):
    driver.find_element(By.XPATH,("//button[text()='Filter']")).click()
    with open(fileName) as csvdatei:
       csv_reader_object = csv.reader(csvdatei,delimiter=",")
       next(csv_reader_object, None) #Skip header
       for row in csv_reader_object:
           element = driver.find_element(By.XPATH,("//span[text()='Seriennummer']/following::input[1]"))
           element.clear()
           if row[2]: # make sure student has deviceId assigned
               element.send_keys(row[2])
               driver.find_element(By.XPATH,("//span[text()='Anwenden']//parent::button")).click()
               time.sleep(1)
               element = driver.find_element(By.XPATH,("//td[text()='"+row[1]+"']/preceding-sibling::td[1]"))
               if (row[0] == element.text):
                   print( "Verified "+row[0]+" "+row[1])

def main():
    fileName = ''
    currentClass=''
    n = len(sys.argv)

    if (n != 3):
       print(" Bitte folgende Argumente übergeben: Dateiname, Klasse")
    else:
       fileName = sys.argv[1]
       currentClass = sys.argv[2]

    login()
    selectDeviceTab(currentClass)
    readCSV_andAddMatch(fileName)
    verifyEntries(fileName)
    driver.close()

driver = webdriver.Firefox()
main()

Bild von Lukas Bieri auf Pixabay

Kategorien: HowToTools

0 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert