一、iframe元素
1、iframe元素:iframe是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)。
——》使用 find_element_by_class_name等时会出现不识别的问题,操作范围是当前的html,不包含内嵌的html文档里面的内容。
——》若要操作其中的元素,必须 切换操作范围 到 被嵌入的文档中。(iframe内部)
切换方式:使用webDriver对象的switch_to属性
wd.switch_to.frame(frame_reference)
frame_reference可以是frame元素的属性name或ID或者frame对应的WebElement对象。
可以依据frame的元素位置或属性特性,使用find系列的方法,选择该元素,得到对应的WebElement对象。
Iframe外部:使用 default_content()
1 from selenium import webdriver 2 wd = webdriver.Firefox(executable_path=r'D:\BrowserDriver\geckodriver.exe') 3 wd.get('http://cdn1.python3.vip/files/selenium/sample2.html') 4 # 选择内部元素 5 wd.switch_to.frame('innerFrame') 6 # 选择外部元素 7 wd.switch_to.default_content() 8 elements = wd.find_elements_by_class_name('animal') 9 for element in elements: 10 print(element.text) 11 wd.find_element_by_id('outerbutton').click() 12 wd.quit()
2、切换新的窗口
1 # 切换新窗口: 使用webdriver对象的switch_to属性里面的window方法。格式:wd.switch_to.window(handle), 2 # webdriver对象有window_handles属性,这是个列表对象,里面包括了当前浏览器里面所有的窗口句柄 3 # 句柄:网页窗口的id。 4 ''' 5 from selenium import webdriver 6 wd = webdriver.Firefox(executable_path=r'D:\BrowserDriver\geckodriver.exe') 7 wd.get('http://cdn1.python3.vip/files/selenium/sample3.html') 8 link = wd.find_element_by_tag_name('a') 9 link.click() 10 for handle in wd.window_handles: 11 wd.switch_to.window(handle) 12 if 'Bing' in wd.title: 13 break 14 print(handle.title)
可以先保存当前窗口的句柄,在切换新窗口之后,再将driver对应的对象返回到原来的窗口:
# mainWindow变量保存当前窗口的句柄
mainWindow = wd.current_window_handle
#通过前面保存的老窗口的句柄,自己切换到老窗口
wd.switch_to.window(mainWindow)