#conding=utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
search_windows=driver.current_window_handle
driver.find_element_by_link_text(u'登录').click()
driver.find_element_by_link_text(u'立即注册').click()
all_handles=driver.window_handles
#进入注册窗口
for handle in all_handles:
if handle !=search_windows:
driver.switch_to.window(search_windows)
print ('now registerwindow!')
driver.find_element_by_name("account").send_keys('username')
driver.find_element_by_name('password').send_keys('password')
time.sleep(2)
#进入搜索窗口
for handle in all_handles:
if handle ==search_windows:
driver.switch_to.window(search_windows)
print ('now sreachwindow!')
driver.find_element_by_id('TANGRAM__PSP_2__closeBtn').click()
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.quit()
控制台信息:
now registerwindow! Traceback (most recent call last): File "F:/Deployment/Python/Selenium2/Part2/baidu5.py", line 20, indriver.find_element_by_name("account").send_keys('username') File "C:\development\python351\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 330, in find_element_by_name return self.find_element(by=By.NAME, value=name) File "C:\development\python351\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 712, in find_element {'using': by, 'value': value})['value'] File "C:\development\python351\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute self.error_handler.check_response(response) File "C:\development\python351\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 181, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"name","selector":"account"} (Session info: chrome=53.0.2785.143) (Driver info: chromedriver=2.24.417431 (9aea000394714d2fbb20850021f6204f2256b9cf),platform=Windows NT 10.0.14393 x86_64) Process finished with exit code 1
整体思路是对的,用法也比较高级;
但是代码有写错哦:
1.既然你的逻辑是如果当前handle不是搜索页面,那就跳转到注册页面,那么此处代码应改为:
#进入注册窗口 for handle in all_handles: if handle !=search_windows: driver.switch_to.window(handle) print ('now register window!')
2.既然你在注册页面输入,那么就应该获取注册页面的元素,而不是登录页面:
for handle in all_handles: if handle !=search_windows: driver.switch_to.window(handle) print ('now registerwindow!') driver.find_element_by_name("userName").send_keys('username') driver.find_element_by_name('phone').send_keys('password') …… time.sleep(2)
帮你修改了一下:
#conding=utf-8 from selenium import webdriver import time driver=webdriver.Chrome() driver.implicitly_wait(10) driver.get("http://www.baidu.com") search_windows=driver.current_window_handle driver.find_element_by_link_text(u'登录').click() driver.find_element_by_link_text(u'立即注册').click() all_handles=driver.window_handles #进入注册窗口 for handle in all_handles: if handle !=search_windows: driver.switch_to.window(handle) print ('now registerwindow!') driver.find_element_by_name("userName").send_keys('username') driver.find_element_by_name('phone').send_keys('password') time.sleep(2) #进入搜索窗口 for handle in all_handles: if handle ==search_windows: driver.switch_to.window(search_windows) print ('now sreachwindow!') driver.find_element_by_id('TANGRAM__PSP_2__closeBtn').click() driver.find_element_by_id("kw").send_keys("selenium") driver.find_element_by_id("su").click() time.sleep(2) driver.quit()