iframe切换

有时,在网页上 f12-elements-ctrl+f 输入xpath语句可以定位到目标元素,但在selenium中却无法定位到,可能是因为该元素在另一个iframe框架中

import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.implicitly_wait(30)

# 方式一:通过iframe的名字(name属性)进行切换
driver.switch_to.frame('login_frame')
driver.find_element(by=By.XPATH, value="//a[text()='帐号密码登录']").click()

# 方式二:通过索引去切换iframe标签(索引从0开始)
driver.switch_to.frame(0)
driver.find_element(by=By.XPATH, value="//a[text()='帐号密码登录']").click()

# 方式三:通过element节点去进行切换
ele_iframe = driver.find_element(by=By.XPATH, value="//iframe[@id='login_frame']")  # 先定位iframe这个元素
driver.switch_to.frame(ele_iframe)  # 再切换到这个iframe中
driver.find_element(by=By.XPATH, value="//a[text()='帐号密码登录']").click()

# 方式四:使用显示等待的方式,等待iframe处于可以的状态后切换进去
WebDriverWait(driver, 20, 1).until(
    EC.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[@id="login_frame"]'))
)
driver.find_element(by=By.XPATH, value="//a[text()='帐号密码登录']").click()

#  从切换进入的iframe切换回默认的HTML页面
driver.switch_to.default_content()

# 切换进入到iframe中嵌套的iframe后,切换回父级的iframe中
driver.switch_to.parent_frame()

time.sleep(10)

driver.quit()

 

posted @ 2022-01-05 09:40  2orange  阅读(251)  评论(0)    收藏  举报