1

我正在使用 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(username) 文件“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'] 文件“C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver. py”,第 233 行,在执行 self.error_handler.check_response(response) 文件“C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 194 行,在 check_response 中引发异常类(消息,屏幕,堆栈跟踪)selenium.common.exceptions.NoSuchElementException:消息:无法找到元素:{“方法”:“名称”,“选择器”:“成员ID”}堆栈跟踪:在FirefoxDriver.prototype.findElementInternal_(文件:/// C:/Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/fxdriver@googlecode.com/components/driver-component.js:10770) 在 fxdriver.Timer.prototype.setTimeout/<.notify (file:// /C:/Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/fxdriver@googlecode.com/components/driver-component.js:625)/Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/fxdriver@googlecode.com/components/driver-component.js:10770) 在 fxdriver.Timer.prototype.setTimeout/<.notify (file:///C :/Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/fxdriver@googlecode.com/components/driver-component.js:625)/Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/fxdriver@googlecode.com/components/driver-component.js:10770) 在 fxdriver.Timer.prototype.setTimeout/<.notify (file:///C :/Users/hena/AppData/Local/Temp/tmpwk788t0k/extensions/fxdriver@googlecode.com/components/driver-component.js:625)

4

1 回答 1

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

希望能帮助到你...:)

于 2016-07-15T05:54:14.797 回答