1. 常用方法
使用背景:有些网站点击链接会新打开一个tab,如下图打开了两个浏览器窗口;元素定位正确,调试时一直报错,原因是未切换到对应的窗口句柄,切换到对应的窗口句柄才可以正常操作
- current_window_handle:获得当前窗口句柄
- window_handles:获取所有窗口的句柄到当前会话,返回一个窗口句柄列表
- switch_to.window():切换窗口句柄
1. # -*-coding:utf-8一*- 2. # @Time:2021/1/14 3. # @Author: 大海 4. import time 5. from selenium import webdriver 6. 7. driver = webdriver.Chrome() 8. driver.implicitly_wait(10) 9. driver.get("http://www.baidu.com") 10. 11. # 获得百度搜索窗口句柄 12. search_windows = driver.current_window_handle 13. print(search_windows) 14. 15. driver.find_element_by_link_text('登录').click() 16. driver.find_element_by_link_text("立即注册").click() 17. 18. # 获得当前所有打开的窗口的句柄 19. all_handles = driver.window_handles 20. print(all_handles) 21. 22. # 切换到注册窗口 方式1 通过判断是否与当前窗口句柄一致 23. for handle in all_handles: 24. if handle != search_windows: 25. driver.switch_to.window(handle) 26. driver.find_element_by_name("userName").send_keys('我是测试小白') 27. driver.find_element_by_name('phone').send_keys('12345678910') 28. time.sleep(2) 29. # 后续步骤省略 30. 31. # 切换到注册窗口 方式2 通过获取的所有窗口列表的索引切换 32. # driver.switch_to.window(all_handles[1]) 33. # driver.find_element_by_name("userName").send_keys('我是测试小白') 34. # driver.find_element_by_name('phone').send_keys('12345678910') 35. # time.sleep(2) 36. 37. driver.quit()