首页 文章

微博登录python中的selenium?

提问于
浏览
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()

Traceback(最近一次调用最后一次):文件“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(响应)文件”C:\ Python34 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py“,第194行,在check_response中引发exception_class(消息,screen,stacktrace)selenium.common.exceptions.NoSuchElementException:消息:无法找到元素:{“method”:“name”,“selector”:“memberid”} Stacktrace:在FirefoxDriver.prototype.findElementInternal_(file:// / C:/用户/ HENA /应用程序数据/本地/温度/ tmpwk788t0k /扩展/ F xdriver@googlecode.com/components/driver-component.js:10770)at fxdriver.Timer.prototype.setTimeout / < . notify(file:/// C:/ Users / hena / AppData / Local / Temp / tmpwk788t0k / extensions /fxdriver@googlecode.com/components/driver-component.js:625)

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

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

相关问题