Brauche Hilfe für Scriptzugriff per Webdriver auf geöffnete Webseite in Firefox

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
Clixmaster
User
Beiträge: 3
Registriert: Freitag 7. April 2023, 16:57

Hi@all,

ich habe folgende Aufgabenstellung:

In einem Formular in einem LogIn-Bereich sind in ein Eingabefeld mit der ID "tags" nacheinander Keywords einzutragen, die jeweils einzeln mit ENTER zu übernehmen sind. Händisch ist das extrem aufwändig, zumal die Keywords bereits als Liste vorliegen.

Angestrebte Lösung:

.. ist ein Python-Script, das bei geöffneter Webseite per Tastenkombination gestartet wird, aus einer vorgegebenen Textdatei die Keywords Zeile für Zeile einliest, den richtigen Browsertab identifiziert und dort jedes Keyword gefolgt von einem Enter einfügt.

Entwicklungsstand:

Mit Python befasse ich mich erst seit 2 Tagen und habe versucht, mit Hilfe von ChatGPT ein funktionierendes Script zu schreiben. Bisher leider ohne Erfolg. Das nachfolgende Script öffnet selbst ein neues Fenster, anstatt auf das geöffnete Fenster zuzugreifen. Mir fehlen hier offenbar fundamentale Kenntnisse. Ich wäre euch sehr dankbar, wenn ihr mir da ein wenig auf die Sprünge helfen könntet. Von ChatGPT muss ich mich erst mal ein wenig erholen :)

Code: Alles auswählen

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.firefox.service import Service

# Pfad zur keywords.txt-Datei
keyword_file_path = r"D:\Dokumente\Scripte\keywords.txt"

# Geckodriver-Service starten
service = Service(".\geckodriver.exe")
service.start()

# Firefox Webdriver initialisieren
driver = webdriver.Firefox(service=service)

# Auf das geöffnete Fenster zugreifen
driver.switch_to.window(window_handle)
assert "Upload Page" in driver.title

try:
    # Eingabefeld finden
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "tags"))
    )

    # Keywords aus Datei lesen
    with open(keyword_file_path, "r") as f:
        keywords = [line.strip() for line in f]

    # Keywords in das Eingabefeld eingeben und mit Enter bestätigen
    for keyword in keywords:
        elem = driver.find_element(By.ID, "tags")
        elem.clear()
        elem.send_keys(keyword)
        elem.send_keys(Keys.RETURN)

        # Warten, bis das Keyword im Eingabefeld erscheint
        WebDriverWait(driver, 10).until(
            EC.text_to_be_present_in_element((By.ID, "tags"), keyword)
        )

finally:
    # Geckodriver-Service beenden
    driver.quit()
    service.stop()
    
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@Clixmaster: Ein Programm baut man Schritt für Schritt auf, und testet jeweils die neue Funktionalität, so dass man leicht herausfinden kann, welcher Schritt noch nicht richtig funktioniert. Ab wann weicht denn Dein Programm von dem gewünschten Verhalten ab?
Clixmaster
User
Beiträge: 3
Registriert: Freitag 7. April 2023, 16:57

"Das nachfolgende Script öffnet selbst ein neues Fenster, anstatt auf das geöffnete Fenster zuzugreifen" sagt meiner Meinung nach sehr deutlich aus, wo es zuerst hakt. Ist ja nun auch kein hochkomplexer Code, passt ohne zu scrollen auf den Screen. Das Interesse an meinem Problem scheint ja recht hoch zu sein, wundert mich, dass hier niemand eine Idee hat, wie ich mein Anfängerproblemchen lösen könnte.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Clixmaster: Dann zeig doch mal das Skript, denn das gezeigte hat einen recht offensichtlichen `NameError`.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Clixmaster
User
Beiträge: 3
Registriert: Freitag 7. April 2023, 16:57

@_blackjack_
"Mit Python befasse ich mich erst seit 2 Tagen ...... Mir fehlen hier offenbar fundamentale Kenntnisse." ... aus dem Initialpost !
Schön, dass der 'NameError' für dich so offensichtlich ist. Hättest du aber auch für dich behalten können, denn mir als Anfänger hilft das gar nicht.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Diese Strategie, Leute, von denen man sich Hilfe erwartet, anzupaulen - funktioniert die so ganz allgemein fuer dich? Und nur hier nicht? Vielleicht solltest du ChatGPT nicht nur deinen Code schreiben lassen, sondern auch deine sonstige Kommunikation. Das ist ueblicherweise recht freundlich...
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Clixmaster: Der `NameError` ist auch für Dich so offensichtlich wenn Du das Programm mal starten würdest. Das bricht ab mit einer Fehlermeldung, nämlich eben diesem `NameError`. Oder das ist gar nicht der Quelltext den Du tatsächlich ausführst, dann kann man aber auch nicht wirklich helfen ohne den zu kennen. Der Quelltext im ersten Beitrag ist jedenfalls nicht vollständig, und das was fehlt ist wichtig um zum Fenster zu wechseln — was ja nach Deiner Beschreibung nicht funktioniert.

Falls Du einen Fehler bekommst, solltest Du den auch hier zeigen, am besten 1:1 kopiert, inklusive Traceback, denn selbst wenn *Dir* das nichts sagt, hilft es *uns* dabei zu verstehen was passiert ist und auch wo der Fehler aufgetreten ist.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten