筒霓暄 发表于 2025-6-7 16:13:49

selenium之 frame、iframe

frame、iframe

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

[*]WebElement
[*]name、id
[*]使用索引
话不多说,让我们开始实践
WebElement

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

serve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'
service = Service(serve_path)
browser = webdriver.Chrome(service=service)
browser.get(f'https://the-internet.herokuapp.com/nested_frames')
# WebElement;先找到这个框架元素,在进行切换
frameset = browser.find_element(By.NAME, "frame-top")
# 切换到大的frame
browser.switch_to.frame(frameset)
# 定位上半部分中间的frame,并切换
frame_middle = browser.find_element(By.NAME, "frame-middle")
browser.switch_to.frame(frame_middle)
# 输出里面的内容
print(browser.find_element(By.ID, "content").text) # MIDDLEname、id

# 如果frama有Id、name属性的话,可以使用该属性;如果不是唯一的话,会默认找第一个
# 先找到上面的frame,再找到中间的
browser.switch_to.frame("frame-top")
browser.switch_to.frame("frame-left")
# # 输出里面的内容
print(browser.find_element(By.TAG_NAME, "body").text) # LEFT使用索引

frame_top = browser.find_elements(By.TAG_NAME, 'frame')
browser.switch_to.frame(frame_top)
frame_right = browser.find_elements(By.TAG_NAME, 'frame')
browser.switch_to.frame(frame_right)
print(browser.find_element(By.TAG_NAME, "body").text) # RIGHT注意离开框架

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

[*]switch_to.parent_frame()返回父文档
[*]switch_to.default_content()返回主文档
# 离开框架# switch_to.default_content()返回主文档# switch_to.parent_frame()返回父文档frame_top = browser.find_elements(By.TAG_NAME, 'frame')
browser.switch_to.frame(frame_top)
frame_right = browser.find_elements(By.TAG_NAME, 'frame')
browser.switch_to.frame(frame_right)
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的东西到这里就结束了;有疑问的可以评论区讨论

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: selenium之 frame、iframe