Selenium: Abbruch bei login

Django, Flask, Bottle, WSGI, CGI…
Antworten
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

Hallo,

Möchte einen automatischen Login zu "website.de" kreieren.
Habe folgenden Code:

Code: Alles auswählen

from selenium import webdriver
from selenium.webdriver.support import ui
from selenium.webdriver.common.keys import Keys    
def page_is_loaded(driver):
    return driver.find_element_by_tag_name("body") != None
driver = webdriver.Firefox()
driver.get("https://www.website.de/")
wait = ui.WebDriverWait(driver, 10)
wait.until(page_is_loaded)
email_field = driver.find_element_by_id("USERNAME")
email_field.send_keys("***@***.de")
password_field = driver.find_element_by_id("PASSWORD")
password_field.send_keys("********")
password_field.send_keys(Keys.RETURN)

Setze ich Facebook anstelle der gewünschten Website ein, funktioniert es.
Folgende Fehlermeldung bekomme ich:

Code: Alles auswählen

Traceback (most recent call last):
  File "fb.py", line 11, in <module>
    email_field = driver.find_element_by_id("USERNAME")P
  File "/home/rtfm/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 359, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "/home/rtfm/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 966, in find_element
    'value': value})['value']
  File "/home/rtfm/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "/home/rtfm/.local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="USERNAME"]
Liegt es an meiner Python Version?
Unter Python3 kann ich nämlich weder mechanize noch selenium importieren.
Python2: Python 2.7.15rc1
Python3: Python 3.6.5

Nutze ein frisch installiertes Linux Mint Tara (19) mit Kernelversion 4.15.0.20
Wie kann ich den Fehler lösen bzw. könnte es an der Website liegen?
Die id's sind an die Website angepasst, mir fiele kein Grund für ein "Nichtfunktionieren" ein.

Gruß
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Fehler ist doch sehr sprechend: Kann das Element USERNAME nicht finden. Das hat also nichts mit Python zu tun, sondern damit, was du programmiert hast, und was die Realitaet auf der Webseite ist. Da gibt's eben kein Element mit ID USERNAME.
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

Hallo,
das war das Erste was ich überprüft habe.
So sieht der Quelltext des Form-Elementes aus:

Code: Alles auswählen

<input class="text" style="width:185px;" name="USERNAME" value="" type="text">
und für das Passwort:

Code: Alles auswählen

<input class="text" style="width:185px;" name="PASSWORD" size="22" type="password">
Der Fehler ist allerdings, dass ich hier .get_element_by_name benutzen muss, da es sich ja nicht um eine ID handelt.
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin mir nicht sicher, was mir deine Antwort sagen soll. Du hast das uebeprueft, sprich: mein Hinweis ist nicht richtig? Aber dann stellt sich raus, das Element hat einen Namen statt einer ID, womit ich ja doch recht hatte. Da bin ich verwirrt. Ist das Problem jetzt durch get_element_by_name geloest?
Antworten