2016-07-06 5 views
1

Ich machte ein einfaches Programm, mit dem ich das Login-Formular ausfüllen und E-Mail an jemanden senden kann .. und während ich drauf bin, es geht einfach nicht mehr und gestoppt beim Öffnen eines Links.Ich bin wirklich mit Python Selen Modul stecken

# Practice Program! 

import requests, os, bs4, webbrowser 
from selenium import webdriver 

url = 'http://google.com' 

res = requests.get(url) 
res.raise_for_status() 

browser = webdriver.Firefox() 

browser.get(url) 

signinElem = browser.find_element_by_id('gb_70') 
signinElem.click() 

idElem = browser.find_element_by_id('Email') 
idElem.send_keys('not_my_real_id') 
idElem.submit() 

pwElem = browser.find_element_by_id('Passwd') 
pwElem.send_keys('not_my_pw') 
pwElem.submit() 

mailElem = browser.find_element_by_class_name('gb_P') 
mailElem.click() 

composeElem = browser.find_element_by_class_name('class="T-I J-J5-Ji T-I-KE L3') 
composeElem.click() 

Der Code funktionierte gut, bis es pwElem getroffen, die mich fragen, warum macht signinElem und idElem aber nicht pwElem gearbeitet ??

Ich stolperte zufällig mit ähnlicher Situation, wo ich einige Verbindungen durchlassen kann, aber andere nicht. Was ist falsch an diesem Code?

Und ich habe folgende Fehler

Traceback (jüngste Aufforderung zuletzt): Datei "C: /Users/Cyber/Downloads/WriteMail.py", Zeile 22, in pwElem = browser.find_element_by_id ('Passwd') Datei "C: \ Benutzer \ Cyber ​​\ Downloads \ lib \ Site-Pakete \ selen \ webdriver \ remote \ webdriver.py", Zeile 269, in find_element_by_id return self.find_element (von = By.ID , Wert = id_) Datei "C: \ Benutzer \ Cyber ​​\ Downloads \ lib \ Site-Pakete \ selen \ webdriver \ remote \ webdriver.py", Zeile 752, in find_element 'Wert': Wert}) ['Wert '] Datei "C: \ Benutzer \ Cyber ​​\ Download s \ lib \ Site-Pakete \ selen \ webdriver \ remote \ webdriver.py ", Zeile 236, in Ausführung self.error_handler.check_response (Antwort) Datei" C: \ Benutzer \ Cyber ​​\ Downloads \ lib \ Site-Pakete \ selen \ webdriver \ remote \ errorhandler.py ", Zeile 192, in check_response raise ausnahmeklasse (message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Nachricht: Kann nicht locate element: {" method ":" id "," selector ":" Passwd "} Stacktrace: um (file: /// C: /Users/Cyber/AppData/Local/Temp/tmpczr__hhf/extensions/[email protected]/components/driver-component. js: 10770) um (file: /// C: /Users/Cyber/AppData/Local/Temp/tmpczr__hhf/extensions/[email protected]/components/driver-component.js: 10779) um (file: /// C:/Benutzer/Cyber ​​/ AppData/Lokal/Temp /tmpczr__hhf/extensions/[email protected]/components/command-processor.js:12661) um (file: /// C:/Benutzer/Cyber ​​/ AppData/Lokale/Temp/tmpczr__hhf/extensions/fxdriver @ googlecode. com/components/command-processor.js: 12666) um (file: /// C: /Users/Cyber/AppData/Local/Temp/tmpczr__hhf/extensions/[email protected]/components/command-processor.js 12608)

+0

Show 'HTML' für gleiche \ – Andersson

+0

+ zu finden, wenn sie versuchen einige Links zu klicken, wird browser.find_by_id und browser.find_by_class_name einen Unterschied? Sind das einige Werke und andere nicht? –

+0

@Andersson Ich habe versucht, HTML-Code mit bs4 zu analysieren, aber ich habe [] ... soup.select ('# Passwd'), soup.select ('password-show'), soup.select ('input [Passwd] '), alle von ihnen. –

Antwort

1

Paasword Feld sichtbar wird immer, wenn Sie die Email so reichen Sie WebDriverWait warten, bis password Feld sichtbar, wie unten implementieren müssen: -

from selenium.webdriver.support import expected_conditions as EC 

------------- 

wait = WebDriverWait(browser, 10) 

idElem = wait.until(EC.visibility_of_element_located((By.ID, "Email"))) 
idElem.send_keys('not_my_real_id') 
idElem.submit() 


pwElem = wait.until(EC.visibility_of_element_located((By.ID, "Passwd"))) 
pwElem.send_keys('not_my_pw') 
pwElem.submit() 

Hoffe, es wird Ihnen helfen .. :)

+1

Erstaunlich !! das wollte ich !!!! Danke !!! –

0

Eigentlich Ihre Fehlermeldung sagt: .NoSuchElementException: Nachricht: Kann nicht Element

ausfindig zu machen und ich sehe es auf der Google-Anmeldeseite rechts unten eine nächste Taste ist das E-Mail-Eingabefeld.

So können Sie die nächste Schaltfläche, um das Kennwort-Eingabefeld

Verwandte Themen