2016-07-15 7 views
1

Ich mache Weibo Login in Selen, aber ich kann Fenster Popup nicht behandeln. Das ist mein Code. Was ist das Problem?Weibo Login in Selen in Python?

from selenium import webdriver 

username = 'your id' 
password = 'your password' 

driver = webdriver.Firefox() 
driver.get("http://overseas.weibo.com/") 
driver.implicitly_wait(10) 

handles = driver.window_handles 


driver.find_elements_by_link_text('登入微博')[0].click() 
driver.implicitly_wait(10) 

driver.switch_to_alert() 
driver.find_element_by_name('memberid').send_keys(username) 
driver.find_element_by_name('passwd').send_keys(password) 
driver.find_elements_by_link_text('登入')[0].click() 

Traceback (jüngste Aufforderung zuletzt): Datei "D: /python34/weibo_login.py"., Zeile 35, in driver.find_element_by_name ('MemberID') send_keys (Benutzername) Datei "C: \ Python34 \ lib \ Site-Pakete \ selen \ webdriver \ remote \ webdriver.py", Zeile 362, in find_element_by_name return self.find_element (von = By.NAME, value = name) Datei "C: \ Python34 \ lib \ Site-Pakete \ selen \ webdriver \ remote \ webdriver.py ", Zeile 744, in find_element {'using': von, Wert ': Wert}) [' Wert '] Datei" C: \ Python34 \ lib \ Site-Pakete \ selen \ webdrive r \ remote \ webdriver.py ", Zeile 233, in Ausführung self.error_handler.check_response (Antwort) Datei" C: \ Python34 \ lib \ Site-Pakete \ selen \ webdriver \ remote \ errorhandler.py ", Zeile 194 , in check_response Erhöhung exception_class (message, Leinwand, Stacktrace) selenium.common.exceptions.NoSuchElementException: Meldung: Kann nicht Element lokalisieren: { "Methode": "Name", "Selektor": "memberid" } Stacktrace: bei FirefoxDriver.prototype.findElementInternal_ (Datei: /// C: /Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/[email protected]/components/driver-component.js: 10770) bei fxdriver.Timer .prototype.setTimeout/< .notify (Datei: /// C: /Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/[email protected]/components/driver-component.js: 625)

Antwort

1

Eigentlich geöffnet Login-Formular ist in einem iframe. Es ist kein alert. Sie müssen diese besondere iframe zuerst, bevor wechseln finden Element und sendKeys wie folgt: -

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

username = 'your id' 
password = 'your password' 

driver = webdriver.Firefox() 
driver.get("http://overseas.weibo.com/") 

wait = WebDriverWait(browser, 10) 

link = wait.until(EC.visibility_of_element_located((By.LINK_TEXT, "登入微博"))) 
link.click() 

frame = wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "cboxIframe"))) 
driver.switch_to_frame(frame) 

user = wait.until(EC.visibility_of_element_located((By.ID, "memberid"))) 
user.send_keys(username) 

passwd = wait.until(EC.visibility_of_element_located((By.ID, "passwd"))) 
passwd.send_keys(password) 

button = wait.until(EC.visibility_of_element_located((By.ID, "login"))) 
button.click() 

Hoffe, es hilft ... :)

+0

Sie meinen Code alle ändern. omg ㅜㅠ, aber, sehr danke ~ ^^ –

+0

@ 오 은아 은아 Sie begrüßen ... froh, Ihnen zu helfen ... Ich versuche nur, Ihnen die beste Möglichkeit zur Lokalisierung von Element ... :) –

+0

yeah Ihren Code ist am besten. aber es ist einfach zu meinem Code zu verstehen ^^ –