2016-07-15 75 views
1

我在微博登录硒,但我无法处理窗口弹出。 这是我的代码。什么是问题?微博用python登陆selenium?

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() 

回溯(最近通话最后一个): 文件 “d:/python34/weibo_login.py” 35行,在 driver.find_element_by_name( 'MEMBERID')send_keys(用户名) 文件“C:\ Python34 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py”,第362行,在find_element_by_name中 返回self.find_element(by = By.NAME,value = name) 文件“C:\ Python34 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py“,第744行,在find_element中 {'using':by,'value':value})['value'] File”C:\ Python34 \ LIB \站点包\硒\ webdrive self.error_handler.check_response(response) 文件“C:\ Python34 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py”,第194行,in check_response raise exception_class(message,screen,stacktrace) selenium.common.exceptions.NoSuchElementException:消息:无法定位元素:{“method”:“name”,“selector”:“memberid”} Stacktrace: 在FirefoxDriver.prototype.findElementInternal_(file:/// C:/Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/[email protected]/components/driver-component.js:10770) at fxdriver.Timer .prototype.setTimeout/< .notify(file:/// C:/Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/[email protected]/components/driver-component.js:625)

回答

1

实际打开的登录表单位于iframe之内。这不是alert。你需要如下切换这个特殊的iframe之前,首先找到元素和sendKeys: -

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() 

希望它能帮助... :)

+0

你改变我的代码全部。 omgㅜㅠ,但是,非常感谢〜^^ –

+0

@오은아은아欢迎您...高兴地帮助您...我只是想为您提供定位元素的最佳方式...... :) –

+0

是的,您的代码是最好的,但我的代码很容易理解我^^ –