1.frame切换

  iframe 元素非常的特殊, 在html语法中,frame 元素 或者iframe元素的内部 会包含一个 被嵌入的 另一份html文档

  在我们使用selenium打开一个网页是, 我们的操作范围 缺省是当前的 html , 并不包含被嵌入的html文档里面的内容。

  1.切换到对应iframe中:

    如果我们要 操作 被嵌入的 html 文档 中的元素, 就必须 切换操作范围 到 被嵌入的文档中

    语法:wd.switch_to.frame(frame_reference)

      frame_reference 可以是 frame 元素的属性 name 或者 ID 。

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)

driver.get('http://cdn1.python3.vip/files/selenium/sample2.html')

# 根据id属性值'frame1',切换到iframe中
driver.switch_to.frame('frame1')

elements = driver.find_elements_by_class_name('animal')

for element in elements:
    print(element.get_attribute('outerHTML'))

driver.quit()

      如果frame元素中没有name或ID属性,那么可以根据CSS选择器利用标签等内容选择当前iframe元素

# 根据id属性值'frame1',切换到iframe中
driver.switch_to.frame(driver.find_element_by_css_selector('[src = "sample1.html"]'))

   2.切换回最外部的主HTML

     语法:wd.switch_to.default_content()

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)

driver.get('http://cdn1.python3.vip/files/selenium/sample2.html')

# 根据id属性值'frame1',切换到iframe中
driver.switch_to.frame('frame1')

elements = driver.find_elements_by_class_name('animal')

for element in elements:
    print(element.get_attribute('outerHTML'))

# 切换回最外部的HTML中
driver.switch_to.default_content()

# 然后再 选择操作 外部的 HTML 中 的元素
driver.find_element_by_id('outerbutton').click()

pass

 

 

2.切换窗口

  1.切换到新的窗口:

    使用Webdriver对象的switch_to属性的 window方法:wd.switch_to.window(handle)

      WebDriver对象有window_handles 属性,这是一个列表对象, 里面包括了当前浏览器里面所有的窗口句柄(相当于网页窗口的ID)

      可通过下列代码:

for handle in wd.window_handles:
    # 先切换到该窗口
    wd.switch_to.window(handle)
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if 'Bing' in wd.title:
        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
        break

      上面代码的用意就是:

      我们依次获取 wd.window_handles 里面的所有 句柄 对象, 并且调用 wd.switch_to.window(handle) 方法,切入到每个窗口,

      然后检查里面该窗口对象的属性(可以是标题栏,地址栏),判断是不是我们要操作的那个窗口,如果是,就跳出循环。

     切换窗口后,打印对应窗口标题栏名称:

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)

driver.get('http://cdn1.python3.vip/files/selenium/sample3.html')

driver.find_element_by_css_selector('a').click()

# 从所有窗口中顺序选择一个窗口出来
for handle in driver.window_handles:
    # 先切换到该窗口
    driver.switch_to.window(handle)
    # 获取窗口的标题栏字符串,判断是不是我们要操作的窗口
    if 'Bing' in driver.title:
        # 如果是,那么这时候WebDriver对象就是对应的该窗口,跳出循环
        break

print(driver.title)

driver.quit()

  2.回到原来的窗口:

    可以事先保存该老窗口的句柄,使用如下方法:

# mainWindow变量保存当前窗口的句柄       mainWindow = wd.current_window_handle

      切换到新窗口操作完后,就可以直接像下面这样,将driver对应的对象返回到原来的窗口

        #通过前面保存的老窗口的句柄,自己切换到老窗口

wd.switch_to.window(mainWindow)
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)

driver.get('http://cdn1.python3.vip/files/selenium/sample3.html')

# mainWindow变量保存当前窗口的句柄
mainWindow = driver.current_window_handle

driver.find_element_by_css_selector('a').click()

# 从所有窗口中顺序选择一个窗口出来
for handle in driver.window_handles:
    # 先切换到该窗口
    driver.switch_to.window(handle)
    # 获取窗口的标题栏字符串,判断是不是我们要操作的窗口
    if 'Bing' in driver.title:
        # 如果是,那么这时候WebDriver对象就是对应的该窗口,跳出循环
        break

print(driver.title)

#通过前面保存的老窗口的句柄,自己切换到老窗口
driver.switch_to.window(mainWindow)

print(driver.title)

driver.quit()


执行结果:
微软 Bing 搜索 - 国内版
白月黑羽测试网页3