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() #退回到父目录
'''

猜你喜欢

转载自www.cnblogs.com/yueyanru/p/9392202.html
今日推荐