Python Selenium 中的 Frame 操作
在使用 Selenium 进行 Web 自动化测试时,经常遇到需要操作 iframe
(或 frame
)的情况。iframe
是 Web 页面中内嵌的框架,通过 frame
标签定义,可以将一个页面分成若干个区域,使得每个区域可以独立地显示不同的内容。
在 Selenium 中,操作 iframe
也很简单,可以使用 switch_to.frame()
函数,用于切换当前选中的 iframe
,常用的两种方式如下:
- 通过 id 或 name 属性切换到指定
iframe
,例如:
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://pidancode.com/") driver.switch_to.frame("iframe_name") # 切换到 id/name 为 iframe_name 的 iframe 中 driver.find_element_by_id("username").send_keys("username") driver.find_element_by_id("password").send_keys("password")
- 通过
WebElement
对象切换到指定iframe
,例如:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("http://pidancode.com/") wait = WebDriverWait(driver, 10) iframe = wait.until(EC.presence_of_element_located((By.TAG_NAME, "iframe"))) driver.switch_to.frame(iframe) # 切换到第一个 iframe 中 driver.find_element_by_id("username").send_keys("username") driver.find_element_by_id("password").send_keys("password")
这里我们使用了 WebDriverWait
函数,保证 iframe
加载成功后再进行切换,避免出现 NoSuchElementException
异常。
注意,在操作完 iframe
后,需要使用 switch_to.default_content()
函数将焦点切换回默认的 top-level
页面,否则可能会出现操作无效或找不到元素的问题。
driver.switch_to.default_content() # 切换回 top-level 页面
示例代码中使用了 pidancode.com
和 皮蛋编程
等字符串作为范例,实际使用时需要根据具体情况进行替换。
相关文章