selenium窗口切换

1.何时需要切换窗口呢?

(1) 标签内部存在iframe,普通的方式无法直接定位到iframe内部的标签元素。需要切换;

(2) 一个浏览器对象,存在多个标签选项卡。需要切换。

(3). seleniumdriver.switch_to.window()方法和driver.switch_to.frame()方法的区别是什么?

driver.switch_to.window(): 切换窗口,一般是指多个标签选项卡之间的切换,每一个选项卡都是一个window窗口;

driver.switch_to.frame(): 切换html内部框架,一般是在html嵌套的有<iframe>标签时会使用。


2.iframe标签举例(QQ邮箱登录)

  1. from selenium import webdriver
  2. from selenium.webdriver.support.wait import WebDriverWait
  3. import time
  4. driver = webdriver.Firefox()
  5. driver.get( 'https://mail.qq.com/')
  6. #driver.switch_to.frame()切换到iframe标签
  7. driver.switch_to.frame(driver.find_element_by_id( 'login_frame'))
  8. driver.find_element_by_id( 'switcher_plogin').click()

  9. username = WebDriverWait(driver, 10).until( lambda driver: driver.find_element_by_id( 'u'))
  10. username.clear()
  11. username.send_keys( 'QQ号')

  12. password = WebDriverWait(driver, 10).until( lambda driver: driver.find_element_by_id( 'p'))
  13. password.clear()
  14. password.send_keys( '密码')

  15. driver.find_element_by_id( 'login_button').click()
  16. time.sleep( 3)
  17. driver.close()

3.切换窗口举例(百度新闻)

  1. import time
  2. from selenium import webdriver
  3. # 注意:出现无法定位此元素时,可能是要切换窗口,也可能是它更新较快,标签或属性已经发生了变化
  4. driver = webdriver.Firefox()
  5. driver.get( 'https://www.baidu.com/')

  6. driver.find_element_by_link_text( '新闻').click()
  7. # driver.current_window_handle()获取当前窗口操作句柄
  8. # driver.title获取当前窗口标签选项卡名称
  9. current_window = driver.current_window_handle
  10. print(current_window, driver.title)

  11. driver.find_element_by_css_selector( 'strong a').click()
  12. current_window = driver.current_window_handle
  13. print(current_window,driver.title)
  14. # 获取所有窗口操作句柄
  15. windows = driver.window_handles
  16. print(windows, driver.title)
  17. for win in windows:
  18. if current_window != win:
  19. # 切换窗口
  20. driver.switch_to.window(win)


  21. current_window = driver.current_window_handle
  22. print(current_window, driver.title)
  23. time.sleep( 6)

  24. title =driver.find_element_by_css_selector( '.header .title').text
  25. print(title)
  26. driver.close()

猜你喜欢

转载自blog.csdn.net/qq_42336560/article/details/81038732
今日推荐