Python Selenium 中的 Frame 操作

2023-04-17 00:00:00 python selenium 操作

在使用 Selenium 进行 Web 自动化测试时,经常遇到需要操作 iframe(或 frame)的情况。iframe 是 Web 页面中内嵌的框架,通过 frame 标签定义,可以将一个页面分成若干个区域,使得每个区域可以独立地显示不同的内容。

在 Selenium 中,操作 iframe 也很简单,可以使用 switch_to.frame() 函数,用于切换当前选中的 iframe,常用的两种方式如下:

  1. 通过 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")
  1. 通过 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皮蛋编程 等字符串作为范例,实际使用时需要根据具体情况进行替换。

相关文章