Selenium Probleme mit for schleife

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cybrixx252
User
Beiträge: 30
Registriert: Freitag 27. August 2021, 14:06

hallo

ich stecke leider bei einem Programm fest
die For schleife wird immer sofort abgebrochen

zur erklärung ich will in ein feld Personalnummer von mitarbeitern eingeben lassen dann Zone auswählen und speichern klicken
dann wieder personalnummer löschen und von vorne

das geht mit einem Excel sheet wo nur Personalnummern drinnen stehen.

Code: Alles auswählen


import sys
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import openpyxl
# from openpyxl import workbook, load_workbook
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec


print("                                                                erstellt v. J***h M")
print("HINZUFÜGEN DER ZMD ZONEN EINTEILUNG  ")
print()
print("Folgende Zonen können gewählt werden:")
print()
print("-----------------------------------")
print("[   1 = GUT            8 =  POL   ]")
print("[   2 = HAL            9 =  SCJ   ]")
print("[   3 = HAK           10 = STD    ]")
print("[   4 = HOE           11 = STH    ]")
print("[   5 = KAM           12 = SZM    ]")
print("[   6 = MAI           13 = ULJ    ]")
print("[   7 = ORS           14 = WOM    ]")
print("-----------------------------------")
print()
print()
print("Bei Falscher Zone schließt das Programm")
time.sleep(1)

Zone = input("Welche Zone: ")
print()
print("Bitte Login daten eingeben")
user = input("Username: ")
userpw = input("Password: ")

if user == "1":
    user = "*****"
if userpw == "1":
    userpw = "*****"

if Zone == "1":
    print("Zone gewählt: GUT")
    Zone = "Gussenbauer"
elif Zone == "2":
    print("Zone gewählt: HAL")
    Zone = "Halper"
elif Zone == "3":
    print("Zone gewählt: HAK")
    Zone = "Harkam"
elif Zone == "4":
    print("Zone gewählt: HOE")
    Zone = "Hönlinger"
elif Zone == "5":
    print("Zone gewählt: KAM")
    Zone = "Kain"
elif Zone == "6":
    print("Zone gewählt: MAI")
    Zone = "Maierhofer"
elif Zone == "7":
    print("Zone gewählt: ORS")
    Zone = "Orsolics"
elif Zone == "8":
    print("Zone gewählt: POL")
    Zone = "Pöll"
elif Zone == "9":
    print("Zone gewählt: SCJ")
    Zone = "Schneeweiß"
elif Zone == "10":
    print("Zone gewählt: STD")
    Zone = "Stadler"
elif Zone == "11":
    print("Zone gewählt: STH")
    Zone = "Steinbrugger"
elif Zone == "12":
    print("Zone gewählt: SZM")
    Zone = "Szamalovits"
elif Zone == "13":
    print("Zone gewählt: ULJ")
    Zone = "Ullisch"
elif Zone == "14":
    print("Zone gewählt: WOM")
    Zone = "Wollmersdorfer"
else:  # Schließt das Programm
    print("Programm wird geschlosssen in 3")
    time.sleep(1)
    print("Programm wird geschlosssen in 2")
    time.sleep(1)
    print("Programm wird geschlosssen in 1")
    time.sleep(1)
    quit()
print()
time.sleep(1)

Workbook = openpyxl.load_workbook("D:/Zone.xlsm")
Tabelle = Workbook["Tabelle1"]

print()
rows = Tabelle.max_row
cols = 1

print("Anzahl der Personalnummern")
print(rows, "Mitarbeiter")
print(cols, "Spalten")
print()

driver = webdriver.Chrome("D:/chromedriver.exe")

driver.get("http://******/***/ui/#/login")
driver.maximize_window()
driver.find_element_by_id("username").send_keys(user)
driver.find_element_by_id("password").send_keys(userpw)
time.sleep(1)
driver.find_element_by_id("login-button").click()
time.sleep(1)

a = driver.find_element_by_xpath("//*[@id='manage-members']")
a.click()
time.sleep(1)
zonenfilter = driver.find_element_by_xpath("//*[@id='groups']")
zonedd = Select(zonenfilter)
zonedd.select_by_visible_text("Alle")
button = driver.find_element_by_xpath("//*[@id='buttonSearchMember']")
button.click()

rows = Tabelle.max_row
cols = 1
print("Mitarbeiter hinzufügen")

for r in range(1, rows + 1):
    for c in range(1, cols):
        Personal_Nummer = Tabelle.cell(row=r, column=c).value
        eintragen_pnr = driver.find_element_by_id("personNr")
        eintragen_pnr.click()
        eintragen_pnr.send_keys(Personal_Nummer)
        button2 = driver.find_element_by_xpath("//*[@id='buttonSearchMember']")
        button2.click()
        mZ = driver.find_element_by_xpath("//*[@id='member-table-row-0']/zmd-member-table-edit/form/div[3]/div/select")
        mZ.click()
        mitarbeiterdd = Select(mZ)
        mitarbeiterdd.select_by_visible_text(Zone)
        save = driver.find_element_by_xpath("//*[@id='member-table-row-0']/zmd-member-table-edit/form/div[4]/button")
        save.click()
        wait = WebDriverWait(driver, 600)
        warten = wait.until(ec.element_to_be_clickable((By.ID, "personNr")))
        pnr_loeschen = driver.find_element_by_id("personNr")
        pnr_loeschen.click()
        pnr_loeschen.send_keys(Keys.CONTROL + "a")
        pnr_loeschen.send_keys(Keys.DELETE)
        print(Personal_Nummer, "wurde hinzugefügt")
else:
    print("Zone wurde erstellt!")
    print("Bitte noch AMC&Fracht Dummy hinzufügen")
    sys.exit()

Benutzeravatar
__blackjack__
User
Beiträge: 14065
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@cybrixx252: Die innere ``for``-Schleife wird ganz offensichtlich 0 mal durchlaufen weil `cols` den Wert 1 hat und ``range(1, 1)`` dann natürlich leer ist.

Der ``else``-Zweig macht keinen Sinn weil in der Schleife gar kein ``break`` vorkommt. Und ein `sys.exit()` am Ende macht auch keinen Sinn, weil das keine Effekt hat. Wenn man das weg lässt, passiert genau das selbe: am Ende wird der Prozess beendet, mit einem Rückgabecode 0.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
cybrixx252
User
Beiträge: 30
Registriert: Freitag 27. August 2021, 14:06

ok Cols wird ja vorher als 1 definiert sprich wenn ich das einfach rausnehme sollte er trotzdem immer den wert von spalte "A" nehmen.

den Else und sys.exit hab ich rausgenommen

vielen dank bin halt leider noch anfänger bzgl python :)
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Statt 14 if-Abfragen benutzt man eine Datenstruktur für die Zone.
Die unnötigen sleep-Aufrufe sind nur eins, nervig. `quit` hat in einem Programm nichts verloren.
Da fehlt einiges an Struktur in Form von Funktionen.
Variablennamen werden komplett klein geschrieben.
Warum benutzt Du eine .xlsm-Datei?
Warum hast Du zwei for-Schleifen, wenn Dich nur eine Spalte interessiert?

Code: Alles auswählen

import time
import openpyxl
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec


ZONES = {
    "GUT": "Gussenbauer",
    "HAL": "Halper",
    "HAK": "Harkam",
    "HOE": "Hönlinger",
    "KAM": "Kain",
    "MAI": "Maierhofer",
    "ORS": "Orsolics",
    "POL": "Pöll",
    "SCJ": "Schneeweiß",
    "STD": "Stadler",
    "STH": "Steinbrugger",
    "SZM": "Szamalovits",
    "ULJ": "Ullisch",
    "WOM": "Wollmersdorfer",
}

def input_zone():
    print("                                                                erstellt v. J***h M")
    print("HINZUFÜGEN DER ZMD ZONEN EINTEILUNG  ")
    print()
    print("Folgende Zonen können gewählt werden:")
    print()
    print("-----------------------------------")
    zones = list(enumerate(ZONES, 1))
    for (row1, zone1), (row2, zone2) in zip(zones, zones[len(zones)//2:]):
        print(f"[  {row1:2d} = {zone1}           {row2:2d} = {zone2}    ]")
    print("-----------------------------------")
    print()
    print()
    print("Bei Falscher Zone schließt das Programm")
    zone = int(input("Welche Zone: "))
    if not 1 <= zone <= len(ZONES):
        raise ValueError()
    abbreviation, zone = list(ZONES.items())[zone - 1]
    print(f"Zone gewählt: {abbreviation}")
    return zone


def input_credentials():
    print()
    print("Bitte Login daten eingeben")
    user = input("Username: ")
    password = input("Password: ")
    if user == "1" and password == "1":
        user = "*****"
        password = "*****"
    return user, password


def login_to_webpage(user, password):
    driver = webdriver.Chrome("D:/chromedriver.exe")
    driver.get("http://******/***/ui/#/login")
    driver.maximize_window()
    driver.find_element_by_id("username").send_keys(user)
    driver.find_element_by_id("password").send_keys(userpw)
    time.sleep(1)
    driver.find_element_by_id("login-button").click()
    time.sleep(1)
    a = driver.find_element_by_xpath("//*[@id='manage-members']")
    a.click()
    time.sleep(1)
    zonenfilter = driver.find_element_by_xpath("//*[@id='groups']")
    zonedd = Select(zonenfilter)
    zonedd.select_by_visible_text("Alle")
    button = driver.find_element_by_xpath("//*[@id='buttonSearchMember']")
    button.click()
    return driver


def get_personal_numbers():
    workbook = openpyxl.load_workbook("D:/Zone.xlsm")
    tabelle = workbook["Tabelle1"]
    return tabelle['A']


def add_personal_number(driver, zone, personal_number):
    personal_number_entry = driver.find_element_by_id("personNr")
    personal_number_entry.click()
    personal_number_entry.send_keys(personal_number)
    button2 = driver.find_element_by_xpath("//*[@id='buttonSearchMember']")
    button2.click()
    member = driver.find_element_by_xpath("//*[@id='member-table-row-0']/zmd-member-table-edit/form/div[3]/div/select")
    member.click()
    member = Select(member)
    member.select_by_visible_text(zone)
    save = driver.find_element_by_xpath("//*[@id='member-table-row-0']/zmd-member-table-edit/form/div[4]/button")
    save.click()
    wait = WebDriverWait(driver, 600)
    warten = wait.until(ec.element_to_be_clickable((By.ID, "personNr")))
    pnr_loeschen = driver.find_element_by_id("personNr")
    pnr_loeschen.click()
    pnr_loeschen.send_keys(Keys.CONTROL + "a")
    pnr_loeschen.send_keys(Keys.DELETE)


def main():
    try:
        zone = input_zone()
    except ValueError:
        print("Keine Zone gewählt")
        return
    user, password = input_credentials()
    driver = login_to_webpage(user, password)
    print()
    print("Mitarbeiter hinzufügen")
    for personal_number in get_personal_numbers():
        add_personal_number(driver, zone, personal_number)
        print(f"{personal_number} wurde hinzugefügt")
    print("Zone wurde erstellt!")
    print("Bitte noch AMC&Fracht Dummy hinzufügen")


if __name__ == "__main__":
    main()
Antworten