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()