selenium的iframe操作


一、frame的定位方式
from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
driver.get('https://mail.126.com/')
driver.implicitly_wait(10)
'''frame的几种定位方式,
第一种,frame有id或者有name则使用,switch_to.frame只能用于iframe存在id或者name
driver.switch_to.frame('x-URS-iframe')
driver.find_element_by_name('email').send_keys('12355o6')
'''


'''第二种,无id和name
对iframe像普通元素那样先查找到,然后切换
iframe = driver.find_element_by_id('x-URS-iframe')
driver.switch_to.frame(iframe)
driver.find_element_by_name('email').send_keys('12355o6')
'''

'''第三种, 直接数topwin中有多少个iframe,按照数组的方式找到,也就是通过索引值找到
,弊端,不知道要找的iframe的索引是多少
WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id('x-URS-iframe'))
driver.switch_to.frame(0) #括号中为iframe所在的索引位置
driver.find_element_by_name('email').send_keys('12355o6')

备注:进入iframe后如果要操作ifram外面的元素,需要先退出
driver.switch_to.default_content()  #跳出到topwindown层


二、多个frame的问题
'''iframe嵌套问题
第一种:
topwindow中有2个iframe(f1、f2)并列
driver.switch_to.frame('f1') #跳到f1的iframe层
driver.switch_to.default_content() #跳出f1,进入topwindow层
driver.switch_to.frame('f2') #进入f2的iframe层

第二种:
topwindow中有2个iframe(f1、f2),f2在f1里面
driver.switch_to.frame('f1') #从topwindow中进入f1
driver.switch_to.frame('f2') #从f1中进入f2
driver.switch_to.default_content() #退出f2,直接进入topwindow

driver.switch_to.frame('f1') #从topwindow中进入f1
driver.switch_to.frame('f2') #从f1中进入f2
driver.switch_to.parent_frame() #退回到父目录
'''
posted @   月燕如  阅读(3369)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示