20.Selenium【iframe切换】切换页面的iframe、handlers
一、前言
在做web自动化的时候,我们往往会遇到两种切换:iframe、handler。iframe表示在主html上嵌入的子html页面(说人话就是一个页面中套着一个或多个页面);handler表示一个新的页签(说人话就是浏览器上方多了一个页面),但此时我们的操作仍然在原先的窗口当中,如果要在新的窗口继续操作元素,那么就要用到handle窗口切换的方法。
二、学习目标
1.iframe切换
2.handler切换
三、知识点
1.【iframe切换】
示例地址:http://sahitest.com/demo/iframesTest.htm
-
什么是iframe
说明:图中阴影部分就是iframe,可以理解为页面中嵌套着一个小页面,我们如果要定位”Link Test“按钮,必须先切换到小页面才能定位,如果不切换则会报错元素未找到。
-
iframe切换
语法:
#1.直接使用id值切换 driver.switch_to.frame(value) #如果iframe标签中有id属性,可以用这个方法直接传id的值 #2.通过出入元素对象切换 el = driver.find_element_by_xxx(value) driver.switch_to.frame(el) #3.跳回上层的页面 driver.switch_to.parent_frame() #4.跳回最外层的页面 driver.switch_to.default_content()
代码示例:
# 导入webdriver import time from selenium import webdriver #获取驱动路径 driver_path = './chromedriver.exe' #创建一个浏览器对象 driver = webdriver.Chrome(executable_path=driver_path) #设置全屏 driver.maximize_window() #请求某个url driver.get('http://sahitest.com/demo/iframesTest.htm') time.sleep(3) #1.通过el元素对象切换iframe el = driver.find_element_by_xpath('.//body/iframe') driver.switch_to.frame(el) #2.点击Link Test按钮 driver.find_element_by_xpath(".//a[text()='Link Test']").click() #3.返回上一次iframe driver.switch_to.parent_frame() #4.点击Click me按钮 driver.find_element_by_xpath(".//input[@value='Click me']").click()
2.【handler切换】
-
什么是handler
说明:当我们点击百度首页的新闻按钮时,浏览器会出现一个新的窗口。我们如果想操作百度新闻页面的元素,必须要从百度首页的窗口切换到百度新闻页的窗口,否则无法获取到新窗口中的元素。
-
handler切换
语法:
#1.获取当前打开的所有窗口句柄,返回类型为一个列表 driver.window_handles #注:window_handles是对象属性,没有括号 #2.获取当前窗口的句柄 driver.current_window_handle #注:window_handles是对象属性,没有括号 #3.切换窗口,handle_id参数代表的是一个窗口句柄 driver.switch_to.window(handle_id)
代码示例:
# 导入webdriver import time from selenium import webdriver #获取驱动路径 driver_path = './chromedriver.exe' #创建一个浏览器对象 driver = webdriver.Chrome(executable_path=driver_path) #设置全屏 driver.maximize_window() #请求某个url driver.get('https://www.baidu.com/') time.sleep(3) #点击新闻按钮 driver.find_element_by_xpath(".//a[text()='新闻']").click() time.sleep(3) #1.获取当前浏览器的全部窗体 all_handles = driver.window_handles # #2.切换到最新的窗体 driver.switch_to.window(all_handles[-1]) #3.获取当前标题 print(driver.title) #百度新闻——海量中文资讯平台,说明已经切换啦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~