selenium窗口window的切换

窗口切换

在使用selenium进行网页操作时,经常会遇到打开新的窗口的情况,以下以京东首页举例:

html代码如图:

jd1-b6448a47f153494595c82e48f2760cba

通过switch_to.window切换窗口

在点击电脑文本时会打开新的窗口,但我们的 WebDriver对象对应的还是京东首页,所以自动化操作也还是在老窗口进行,这时候就需要切换到新窗口,在进行自动化操作使用Webdriver对象的switch_to属性的window方法来切换到新窗口

window_handles属性

  1. WebDriver对象有window_handles属性,这是一个列表对象,里面包括了当前浏览器里面所有的窗口句柄。
  2. 所以我们需要依次获取driver.window_handles里面的所有 句柄 对象,并且调用driver.switch_to.window(handle)方法,切入到每个窗口
  3. 然后检查里面该窗口对象的属性(可以是标题栏,地址栏),判断是不是我们要操作的那个窗口,如果是,就跳出循环
  4. 在新窗口操作完毕后,然后再通过driver.switch_to.window(main_window_handle)切换回老窗口.
  5. 推荐一个比较省事儿的办法
    # mainWindow变量保存当前窗口的句柄
    main_window_handle = driver.current_window_handle
    # 通过前面保存的老窗口的句柄,自己切换到老窗口
    driver.switch_to.window(main_window_handle)
    

代码示例

import time
from selenium import webdriver

# 创建WebDriver对象,指明使用chrome浏览器驱动
driver = webdriver.Chrome('./chromedriver')
mark_text = '\n' + '*' * 50 + '华丽的分割线' + '*' * 50 + '\n'
# 设置隐性等待时间
driver.implicitly_wait(10)
# 打开京东首页
driver.get('https://www.jd.com/')
# 最大化浏览器
driver.maximize_window()
# 点击电脑栏目标签
driver.find_element_by_css_selector('a[href=//diannao.jd.com/]').click()
# mainWindow变量保存当前窗口的句柄
main_window_handle = driver.current_window_handle
# 打印当前窗口title
print(mark_text, 'title:', driver.title)
# 打印窗口当前URL地址
print('current_url:', driver.current_url)
# 打印当前窗口句柄
print('current_window_handle:', driver.current_window_handle)
# 依次获取wd.window_handles里面的所有句柄对象
for handle in driver.window_handles:
    # 调用wd.switch_to.window(handle)方法,切入到每个窗口
    driver.switch_to.window(handle)
    # 然后检查里面该窗口对象的属性(可以是标题栏,地址栏),判断是不是我们要操作的那个窗口
    if '电脑_笔记本_台式机' in driver.title:
        # 打印当前窗口title
        print(mark_text, 'title:', driver.title)
        # 打印窗口当前URL地址
        print('current_url:', driver.current_url)
        # 打印当前窗口句柄
        print('current_window_handle:', driver.current_window_handle)
        # 如果已经切换到我们需要的窗口,就跳出循环
        break
# 通过线程睡眠可以直观的看到由新窗口切换到老窗口的过程
time.sleep(3)
# 通过前面保存的老窗口的句柄,自己切换到老窗口
driver.switch_to.window(main_window_handle)
# 再次打印当前窗口的句柄,URL和title
print(mark_text, 'title:', driver.title)
print('current_url:', driver.current_url)
print('current_window_handle:', driver.current_window_handle)
time.sleep(2)
# 退出浏览器
driver.quit()

运行效果

sel1-5cd6015ec5cd45e58dff30aa76413d38