找回密码
 立即注册
首页 业界区 科技 selenium之 frame、iframe

selenium之 frame、iframe

筒霓暄 2025-6-7 16:13:49
frame、iframe

相信大部分使用selenium的同学都会遇见一个现象,就是明明可以定位到元素,但是就是无法操作;这个是因为遇到了frame、iframe这个东西
frame标签有frameset、frame、iframe三种,
frameset和其他普通标签没有区别,不会影响到定位
它们两个的学名叫做框架,顾名思义,首先你要进去这个框架再进行操作,操作完成再从这个框架离开
selenium就提供了三种方式,来进行frame、iframe的访问

  • WebElement
  • name、id
  • 使用索引
话不多说,让我们开始实践
WebElement
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.chrome.service import Service
  4. serve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'
  5. service = Service(serve_path)
  6. browser = webdriver.Chrome(service=service)
  7. browser.get(f'https://the-internet.herokuapp.com/nested_frames')
  8. # WebElement;先找到这个框架元素,在进行切换
  9. frameset = browser.find_element(By.NAME, "frame-top")
  10. # 切换到大的frame
  11. browser.switch_to.frame(frameset)
  12. # 定位上半部分中间的frame,并切换
  13. frame_middle = browser.find_element(By.NAME, "frame-middle")
  14. browser.switch_to.frame(frame_middle)
  15. # 输出里面的内容
  16. print(browser.find_element(By.ID, "content").text) # MIDDLE
复制代码
name、id
  1. # 如果frama有Id、name属性的话,可以使用该属性;如果不是唯一的话,会默认找第一个
  2. # 先找到上面的frame,再找到中间的
  3. browser.switch_to.frame("frame-top")
  4. browser.switch_to.frame("frame-left")
  5. # # 输出里面的内容
  6. print(browser.find_element(By.TAG_NAME, "body").text) # LEFT
复制代码
使用索引
  1. frame_top = browser.find_elements(By.TAG_NAME, 'frame')[0]
  2. browser.switch_to.frame(frame_top)
  3. frame_right = browser.find_elements(By.TAG_NAME, 'frame')[2]
  4. browser.switch_to.frame(frame_right)
  5. print(browser.find_element(By.TAG_NAME, "body").text) # RIGHT
复制代码
注意离开框架

不管你使用上面什么方法,最后需要离开框架,切换回默认内容

  • switch_to.parent_frame()返回父文档
  • switch_to.default_content()返回主文档
  1. # 离开框架# switch_to.default_content()返回主文档# switch_to.parent_frame()返回父文档frame_top = browser.find_elements(By.TAG_NAME, 'frame')[0]
  2. browser.switch_to.frame(frame_top)
  3. frame_right = browser.find_elements(By.TAG_NAME, 'frame')[2]
  4. browser.switch_to.frame(frame_right)
  5. print(browser.find_element(By.TAG_NAME, "body").text) # RIGHT# 返回父文档,回到frame_top# browser.switch_to.parent_frame()# print(browser.page_source)"""      """# 直接返回主文档browser.switch_to.default_content()print(browser.page_source)"""          Frames are not rendering.  """
复制代码
好了,frame的东西到这里就结束了;有疑问的可以评论区讨论

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册