Weibo login in selenium in python?

539 views Asked by At

I'm doing weibo login in selenium, but I can't handle window popup. This is my code. What is problem?

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 (most recent call last): File "D:/python34/weibo_login.py", line 35, in driver.find_element_by_name('memberid').send_keys(username) File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 362, in find_element_by_name return self.find_element(by=By.NAME, value=name) File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 744, in find_element {'using': by, 'value': value})['value'] File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 233, in execute self.error_handler.check_response(response) File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"name","selector":"memberid"} Stacktrace: at 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

There are 1 answers

4
Saurabh Gaur On BEST ANSWER

Actually opened login form is inside an iframe. It's not an alert. You need to switch this particular iframe first before find element and sendKeys as below :-

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

Hope it helps...:)