NoSuchElementException beim Versuch, Selenium Python zu verwenden

Ich bekomme immer eine NoSuchElementException, wenn ich versuche, Selen zu verwenden, um ein Element in Python zu finden. Ich warte darauf, dass die Seite voll geladen ist, und ich schalte auf den richtigen Rahmen um (oder zumindest denke ich!).

Hier ist der Code:

driver.get("https://www.arcgis.com/home/signin.html") driver.implicitly_wait(10) driver.switch_to_frame("oAuthFrame") elem = driver.find_element_by_name('username') elem1 = driver.find_element_by_name('password') 

Hier ist die Webseite Teil Ich versuche zuzugreifen:

 <input id="user_username" class="textBox" type="text" name="username" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"> 

Die sich im Inneren befindet

 <iframe dojoattachpoint="_iFrame" id="oAuthFrame" scrolling="no" style="display: block; border: 0px;" marginheight="0" marginwidth="0" frameborder="0" width="400" height="500"...> 

Sie können den Quellcode für sich selbst unter https://www.arcgis.com/home/signin.html sehen

Voller Fehlerausgang:

  Traceback (most recent call last): File "C:\Python34\beginSample.py", line 12, in <module> elem = driver.find_element_by_name('username') File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", l ine 302, in find_element_by_name return self.find_element(by=By.NAME, value=name) File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", l ine 662, in find_element {'using': by, 'value': value})['value'] File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", l ine 173, in execute self.error_handler.check_response(response) File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py" , line 164, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: 'no such element\n (Session info: chrome=35.0.1916.153)\n (Driver info: chromedriver=2.9.248315,pl atform=Windows NT 6.1 SP1 x86_64)' 

Wenn jemand mir helfen könnte herauszufinden, was falsch ist, würde ich es sehr schätzen.

UPDATE : Ich bin jetzt mit Aktionen, und ich habe bis zum Punkt der keine Fehler debuggen, aber auch seine nicht eingeben nichts. Hier ist der Code:

 from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(driver) actions.send_keys("sd") actions.send_keys(Keys.TAB) actions.send_keys("bg") actions.perform() 

One Solution collect form web for “NoSuchElementException beim Versuch, Selenium Python zu verwenden”

Persönlich versuche ich, mit dem xpath zu bleiben und xquery Funktionalität zu nutzen. Sie können die anderen Anhänge noch verwenden, da sie normalerweise "Attribute" des Elements sind, aber es bietet mehr Flexibilität für komplexe Typen enthält die Suche. Ich bin in der Lage, die Benutzernamen / Passwort-Felder mit den folgenden zwei Xboxen zu finden. Du musst nicht zuerst auf das iframe wechseln … obwohl einige der direkten Anrufe wie der Name nicht funktionieren … die xpath Version hat für mich gearbeitet.

  element = driver.find_element_by_xpath("//input[@name='username']") element1 = driver.find_element_by_xpath("//input[@name='password']") 

Update : Ich konnte das Problem duplizieren … Ich bin mir nicht sicher, warum die Locators hierfür nicht funktionieren, aber hier ist eine Arbeit rund um das funktioniert. Die Standardeinstellung des Fokus, wenn die Seite geladen wird, ist das Feld Benutzername.

  actions = selenium.webdriver.common.action_chains.ActionChains(driver) actions.SendKeys("sd").Perform() actions.SendKeys(selenium.webdriver.common.Keys.Tab).Perform() actions.SendKeys("bg").Perform() 

http://selenium.googlecode.com/git/docs/api/py/webdriver/selenium.webdriver.common.action_chains.html Ich werde es erneut aktualisieren, wenn ich einen Weg finden kann, um direkt mit den Feldern zu verbinden.

Update: Mit Chrome, wenn du das spezifische iFrame packst, wirst du einen Fehler sehen, der besagt, dass dein Browser dieses iFrame nicht unterstützt. Ich glaube, der Kommunikationsausfall könnte im Browser nicht in der Lage sein, es richtig zu lesen … obwohl es scheint es zu machen und die Funktionalität richtig zu machen. Da Selen auf der DOM-Auswahl basiert, würde es versuchen, ähnliche Verhaltensweisen zu nutzen, um dies zu finden. Ich würde empfehlen, ein driver.execute_script("script goes here") versuchen und es zu finden, rein mit Javascript und sehen, ob das funktionieren würde. Sie müssten natürlich auch mit Javascript fortfahren und die Steuerattribute / Eigenschaften direkt mit Javascript modifizieren und dann ein Javascript-Event für die Schaltfläche ausführen.

  • Einfügen von Befehl mit Selen
  • Wie lese ich eine Datei, die von selenium webdriver in python heruntergeladen wurde
  • Navigieren von Paginierung mit Selen
  • Wie können wir in einem Robotframework einen anderen Browser passieren?
  • PhantomJS Rückkehr leere Web-Seite (Python, Selen)
  • Selen WebDriver und generische Wartezeit oder Verzögerung
  • Schaben mit Scrapy und Selen
  • Verstecken chromeDriver Konsole in Python
  • Python Selenium Webdriver - Proxy-Authentifizierung
  • Selen + Firefox: leere execute_script Argumente
  • Wie man HTTP-Authentifizierung mit Selen pythonbindenden Webdriver einreicht
  • Python ist die beste Programmiersprache der Welt.