for schleife rennt nur 1 mal durch

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

Guten Morgen

Mein erster Versuch mit funktionen zu Programmieren und soweit funktioniert alles, jedoch hat die For Schleife einen fehler und zwar rennt diese nur 1x und ich komm nicht auf den fehler drauf

Code: Alles auswählen

# Verrechnung AMC -> Mach2Info
# Autor Jellitsch M 97247

import time
import sys
import openpyxl
from selenium import webdriver
# from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select


# login credentials
def login_credentials():
    print()
    print("VERRECHNUNG \n")

    user = input("Username: ")

    if user == "xx":
        quit(0)
    user_pw = input("Password: ")
    datum = input("Bitte Datum eingeben (zb:211009): ")
    benutzer = input("3L-Code: ")
    print()

    if user == "1" and user_pw == "1":
        user = "Jem"
        user_pw = "Vie14611##"

    return user, user_pw, datum, benutzer


# webpage login->einzelleistungen finden
def get_webpage(user, user_pw):
    driver_pfad = "chromedriver.exe"
    mach2info_link = "http://machprod/info-gui/login.jsp"
    driver = webdriver.Chrome(driver_pfad)
    driver.get(mach2info_link)
    print("----- ", driver.title, " -----")
    driver.implicitly_wait(600)
    login_webpage_user = driver.find_element_by_id("username")
    login_webpage_user.send_keys(user)
    print("----- Username wird eingegeben -----\n")
    login_webpage_user_pw = driver.find_element_by_id("password")
    login_webpage_user_pw.send_keys(user_pw)
    print("----- Password wird eingegeben -----\n")
    login_webpage_button = driver.find_element_by_id("buttonLogin")
    login_webpage_button.click()
    print("----- Einloggen wird versucht -----\n")
    time.sleep(0.3)
    operation_webpage = driver.find_element_by_id(
        "workspace-navigation-operations")
    operation_webpage.click()
    time.sleep(0.3)
    verrechnung_webpage = driver.find_element_by_xpath(
        "//*[@id='accounting-tab-operations']")
    verrechnung_webpage.click()
    print("----- Einzelleistungen wird gesucht -----\n")
    time.sleep(0.3)

    return driver


# Einzelleistunen abfragen
# def get_einzelleistung():
    

#    return workbook, tabelle, rows, cols


def eintragen_der_leistungen(driver, datum, tabelle, rows, benutzer):
    print("Excel Vorlage wird geladen.... \n")
    workbook = openpyxl.load_workbook("Verrechnung.xlsx")
    tabelle = workbook["Tabelle1"]
    rows = tabelle.max_row
    cols = tabelle.max_column
    print(rows, "Anzahl der Flüge \n")
    
    for r in range(1, rows + 1):
          flug = tabelle.cell(row=r, column=1).value
          verrechnungs_code = tabelle.cell(row=r, column=4).value

          if verrechnungs_code == "059 Schleppfahrzeug":
              verrechnungs_code = "059"
          if verrechnungs_code == "065 Airstarter":
              verrechnungs_code = "065"
          if verrechnungs_code == "080 Schlepp":
              verrechnungs_code = "080"
          if verrechnungs_code == "085/1 Pushback-Stange":
              verrechnungs_code = "085"
          if verrechnungs_code == "098 Hitzer/Kühlung":
              verrechnungs_code = "098"
          if verrechnungs_code == "059 Schleppfahrzeug":
              verrechnungs_code = "059"
          if verrechnungs_code == "101 Ballast":
              verrechnungs_code = "101"
          if verrechnungs_code == "120 Zurrösen(Ringe)":
              verrechnungs_code = "120"
          if verrechnungs_code == "122 Strick":
              verrechnungs_code = "122"
          if verrechnungs_code == "125 Brett 1m":
              verrechnungs_code = "125"
          if verrechnungs_code == "120 Zurrösen(Ringe)":
              verrechnungs_code = "120"
          if verrechnungs_code == "122 Strick":
              verrechnungs_code = "122"
          if verrechnungs_code == "125 Brett 1m":
              verrechnungs_code = "125"
          if verrechnungs_code == "202 Red Cap/Loading Supervisor":
              verrechnungs_code = "202"
          if verrechnungs_code == "204 Lader (Gepäcksuche)":
              verrechnungs_code = "204"
          if verrechnungs_code == "227 KINDERWAGEN":
              verrechnungs_code = "227"
          if verrechnungs_code == "236 150 Pax":
              verrechnungs_code = "236"
          if verrechnungs_code == "237 151 Pax":
              verrechnungs_code = "237"
          if verrechnungs_code == "268 Bremsenk. B777,A380":
              verrechnungs_code = "268"
          if verrechnungs_code == "50 Gr. Bus":
              verrechnungs_code = "050"
          if verrechnungs_code == "51 Citybus PAX":
              verrechnungs_code = "051"
          if verrechnungs_code == "52 Crew-Bus":
              verrechnungs_code = "052"
          if verrechnungs_code == "55 Citybus Connex PAX":
              verrechnungs_code = "055"
          if verrechnungs_code == "57Citybus B/C":
              verrechnungs_code = "057"
          if verrechnungs_code == "66 GPU 90KV 1Stecker":
              verrechnungs_code = "066"
          if verrechnungs_code == "67 GPU180KV 2 Stecker":
              verrechnungs_code = "067"
          if verrechnungs_code == "68 DIESELSTAPLER":
              verrechnungs_code = "068"
          if verrechnungs_code == "69 Hubtisch Maindeck":
              verrechnungs_code = "069"
          if verrechnungs_code == "70 Hubtisch":
              verrechnungs_code = "070"
          if verrechnungs_code == "76 Stiege":
              verrechnungs_code = "076"

          einheiten = tabelle.cell(row=r, column=5).value
          flug_eingabe = driver.find_element_by_id(
              "accounting-flight-flightdesignator")
          flug_eingabe.send_keys(flug)
          time.sleep(0.3)
          flug_datum = driver.find_element_by_id("accounting-flight-flightdate")
          flug_datum.send_keys(datum)
          time.sleep(0.3)
          flug_abfrage = driver.find_element_by_id(
              "query-button-accounting-flight")
          flug_abfrage.click()
          time.sleep(0.3)

        #   gibt es eine fehlermeldung
        fehler = driver.find_element_by_id("error-overlay-accounting-flight")
        time.sleep(0.3)
        #   wenn fehlermeldung aufscheint dann wechseln in/out
        if fehler.is_displayed():
            in_out_abfrage = driver.find_element_by_id(
                "accounting-flight-direction")
            in_out_abfrage.click()
            in_out_abfrage_dropdown = Select(in_out_abfrage)
            in_out_abfrage_dropdown.select_by_visible_text("Incoming")
            in_out_abfrage_dropdown.click()

        verrechnung = driver.find_element_by_id("code-accounting-flight")
        verrechnung.send_keys(verrechnungs_code)
        time.sleep(0.3)
        verrechnung_einheiten = driver.find_element_by_id(
            "amount-accounting-flight")
        verrechnung_einheiten.send_keys(einheiten)
        time.sleep(0.3)
        lettercode_eingabe = driver.find_element_by_id(
            "name-accounting-flight")
        lettercode_eingabe.send_keys(benutzer)
        time.sleep(0.3)
        speichern_verrechnung = driver.find_element_by_id(
            "plus-button-accounting-flight")
        speichern_verrechnung.click()

        #   ausgabe ------ 204 wurde für OS123 mit 100 Einheiten hinzugefügt-----
        print("-----", r, "--- ", verrechnungs_code, " wurde für ", flug,
              "mit ", einheiten, "Einheiten hinzugefügt---")

        return workbook, tabelle, rows, cols


def beenden(driver):
    driver.quit()
    sys.exit()


# hauptfunktion
def main():
    user, user_pw, datum, benutzer = login_credentials()
    driver = get_webpage(user, user_pw)
    eintragen_der_leistungen(driver, datum, benutzer)
    # beenden()

    return


# hauptfunktion starten
if __name__ == "__main__":
    main()
cybrixx252
User
Beiträge: 30
Registriert: Freitag 27. August 2021, 14:06

kann man so eine for schleife in einer funktion bauen oder sollte diese in die Main funktion sein?

https://replit.com/join/zmkphphgur-cybrixx252
Benutzeravatar
__blackjack__
User
Beiträge: 13064
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@cybrixx252: Der Code rennt gar nicht, weil der Compiler wegen Einrückungsfehler schon vor dem Start an dem Quelltext scheitert.

Ansonsten hast Du dann halt ein ``return`` *in* der ``for``-Schleife stehen, und ``return`` bricht die Funktion an der Stelle ab und gibt den Rückgabewert dort an den Aufrufer zurück. Ist vielleicht ein weiterer Einrückungsfehler und das sollte gar nicht bedingungslos am Ende des Schleifenkörpers stehen, sondern gehört alles noch zum ``if``‽

Wobei man überhaupt gar nicht erst zur Schleife kommt, denn die Argumentanzahl beim Aufruf der Funktion, stimmt nicht mit der Anzahl der Argumente überein, welche die Funktion erwartet. Auch das gibt einen Fehler.

Also welchen Quelltext hast Du denn da *tatsächlich* am laufen?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
cybrixx252
User
Beiträge: 30
Registriert: Freitag 27. August 2021, 14:06

ah komisch kann vielleicht nur an der seite replit liegen weil die nimm ich in der arbeit um fehler als kommentaren rein zu schreiben etc
hab in der arbeit kein pycharm etc und kann nur durch einen admin installiert werden..

ich hab hier nochmal den code vom pycharm sollte eigentlich der gleiche sein.

Code: Alles auswählen

# Verrechnung AMC -> Mach2Info
# Autor Jellitsch M 97247

import time
import sys
import openpyxl
from selenium import webdriver
# from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select


# login credentials
def login_credentials():
    print()
    print("VERRECHNUNG \n")

    user = input("Username: ")

    if user == "xx":
        quit(0)
    user_pw = input("Password: ")
    datum = input("Bitte Datum eingeben (zb:211009): ")
    benutzer = input("3L-Code: ")
    print()

    if user == "1" and user_pw == "1":
        user = "Jem"
        user_pw = "Vie14611##"

    return user, user_pw, datum, benutzer


# webpage login->einzelleistungen finden
def get_webpage(user, user_pw):
    driver_pfad = "chromedriver.exe"
    mach2info_link = "http://machprod/info-gui/login.jsp"
    driver = webdriver.Chrome(driver_pfad)
    driver.get(mach2info_link)
    print("----- ", driver.title, " -----")
    driver.implicitly_wait(600)
    login_webpage_user = driver.find_element_by_id("username")
    login_webpage_user.send_keys(user)
    print("----- Username wird eingegeben -----\n")
    login_webpage_user_pw = driver.find_element_by_id("password")
    login_webpage_user_pw.send_keys(user_pw)
    print("----- Password wird eingegeben -----\n")
    login_webpage_button = driver.find_element_by_id("buttonLogin")
    login_webpage_button.click()
    print("----- Einloggen wird versucht -----\n")
    time.sleep(0.3)
    operation_webpage = driver.find_element_by_id(
        "workspace-navigation-operations")
    operation_webpage.click()
    time.sleep(0.3)
    verrechnung_webpage = driver.find_element_by_xpath(
        "//*[@id='accounting-tab-operations']")
    verrechnung_webpage.click()
    print("----- Einzelleistungen wird gesucht -----\n")
    time.sleep(0.3)

    return driver


# Einzelleistunen abfragen
# def get_einzelleistung():


#    return workbook, tabelle, rows, cols


def eintragen_der_leistungen(driver, datum, benutzer):
    print("Excel Vorlage wird geladen.... \n")
    workbook = openpyxl.load_workbook("Verrechnung.xlsx")
    tabelle = workbook["Tabelle1"]
    rows = tabelle.max_row
    cols = tabelle.max_column
    print(rows, "Anzahl der Flüge \n")
    for r in range(1, rows + 1):
        flug = tabelle.cell(row=r, column=1).value
        verrechnungs_code = tabelle.cell(row=r, column=4).value

        if verrechnungs_code == "059 Schleppfahrzeug":
            verrechnungs_code = "059"
        if verrechnungs_code == "065 Airstarter":
            verrechnungs_code = "065"
        if verrechnungs_code == "080 Schlepp":
            verrechnungs_code = "080"
        if verrechnungs_code == "085/1 Pushback-Stange":
            verrechnungs_code = "085"
        if verrechnungs_code == "098 Hitzer/Kühlung":
            verrechnungs_code = "098"
        if verrechnungs_code == "059 Schleppfahrzeug":
            verrechnungs_code = "059"
        if verrechnungs_code == "101 Ballast":
            verrechnungs_code = "101"
        if verrechnungs_code == "120 Zurrösen(Ringe)":
            verrechnungs_code = "120"
        if verrechnungs_code == "122 Strick":
            verrechnungs_code = "122"
        if verrechnungs_code == "125 Brett 1m":
            verrechnungs_code = "125"
        if verrechnungs_code == "120 Zurrösen(Ringe)":
            verrechnungs_code = "120"
        if verrechnungs_code == "122 Strick":
            verrechnungs_code = "122"
        if verrechnungs_code == "125 Brett 1m":
            verrechnungs_code = "125"
        if verrechnungs_code == "202 Red Cap/Loading Supervisor":
            verrechnungs_code = "202"
        if verrechnungs_code == "204 Lader (Gepäcksuche)":
            verrechnungs_code = "204"
        if verrechnungs_code == "227 KINDERWAGEN":
            verrechnungs_code = "227"
        if verrechnungs_code == "236 150 Pax":
            verrechnungs_code = "236"
        if verrechnungs_code == "237 151 Pax":
            verrechnungs_code = "237"
        if verrechnungs_code == "268 Bremsenk. B777,A380":
            verrechnungs_code = "268"
        if verrechnungs_code == "50 Gr. Bus":
            verrechnungs_code = "050"
        if verrechnungs_code == "51 Citybus PAX":
            verrechnungs_code = "051"
        if verrechnungs_code == "52 Crew-Bus":
            verrechnungs_code = "052"
        if verrechnungs_code == "55 Citybus Connex PAX":
            verrechnungs_code = "055"
        if verrechnungs_code == "57Citybus B/C":
            verrechnungs_code = "057"
        if verrechnungs_code == "66 GPU 90KV 1Stecker":
            verrechnungs_code = "066"
        if verrechnungs_code == "67 GPU180KV 2 Stecker":
            verrechnungs_code = "067"
        if verrechnungs_code == "68 DIESELSTAPLER":
            verrechnungs_code = "068"
        if verrechnungs_code == "69 Hubtisch Maindeck":
            verrechnungs_code = "069"
        if verrechnungs_code == "70 Hubtisch":
            verrechnungs_code = "070"
        if verrechnungs_code == "76 Stiege":
            verrechnungs_code = "076"

        einheiten = tabelle.cell(row=r, column=5).value
        flug_eingabe = driver.find_element_by_id(
            "accounting-flight-flightdesignator")
        flug_eingabe.send_keys(flug)
        time.sleep(0.3)
        flug_datum = driver.find_element_by_id("accounting-flight-flightdate")
        flug_datum.send_keys(datum)
        time.sleep(0.3)
        flug_abfrage = driver.find_element_by_id(
            "query-button-accounting-flight")
        flug_abfrage.click()
        time.sleep(0.3)

        #   gibt es eine fehlermeldung
        fehler = driver.find_element_by_id("error-overlay-accounting-flight")
        time.sleep(0.3)
        #   wenn fehlermeldung aufscheint dann wechseln in/out
        if fehler.is_displayed():
            in_out_abfrage = driver.find_element_by_id(
                "accounting-flight-direction")
            in_out_abfrage.click()
            in_out_abfrage_dropdown = Select(in_out_abfrage)
            in_out_abfrage_dropdown.select_by_visible_text("Incoming")
            in_out_abfrage_dropdown.click()
            
        verrechnung = driver.find_element_by_id("code-accounting-flight")
        verrechnung.send_keys(verrechnungs_code)
        time.sleep(0.3)
        verrechnung_einheiten = driver.find_element_by_id(
            "amount-accounting-flight")
        verrechnung_einheiten.send_keys(einheiten)
        time.sleep(0.3)
        lettercode_eingabe = driver.find_element_by_id(
            "name-accounting-flight")
        lettercode_eingabe.send_keys(benutzer)
        time.sleep(0.3)
        speichern_verrechnung = driver.find_element_by_id(
            "plus-button-accounting-flight")
        speichern_verrechnung.click()

        #   ausgabe ------ 204 wurde für OS123 mit 100 Einheiten hinzugefügt-----
        print("-----", r, "--- ", verrechnungs_code, " wurde für ", flug,
              "mit ", einheiten, "Einheiten hinzugefügt---")

        return workbook, tabelle, rows, cols


def beenden(driver):
    driver.quit()
    sys.exit()


# hauptfunktion
def main():
    user, user_pw, datum, benutzer = login_credentials()
    driver = get_webpage(user, user_pw)
    # workbook, tabelle, rows, cols = get_einzelleistung()
    eintragen_der_leistungen(driver, datum, benutzer)
    # beenden()

    return


# hauptfunktion starten
if __name__ == "__main__":
    main()
cybrixx252
User
Beiträge: 30
Registriert: Freitag 27. August 2021, 14:06

dh die einrückungen unter den if abfragen gehört eines nach vorne
am ende kein return, weil er eigentlich nichts wiedergeben muss
und das click beim dropbox gehört auch weg weil dort ja kein click gehen sollte. dh es würde eigentlich reichen wenn ich dann wieder ins flug_eingabe klicken lasse.
Antworten