💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## 4.9 多表单切换 在 Web 应用中经常会遇到 frame/iframe 表单嵌套页面的应用,WebDriver 只能在一个 页面上对元素进行识别和定位,无法直接定位 frame/iframe 表单内嵌页面上的元素,这时就需要通过 switch_to.frame()方法将当前定位的主体切换为 frame/iframe 表单的内嵌页面。 这里以 126 邮箱登录为例,登录框结构如下。 <br /> 通过 switch_to.frame()方法切换表单。 ``` from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("https://mail.163.com/") sleep(2) login_frame = driver.find_element_by_css_selector('iframe[id^="x-URS-iframe"]') driver.switch_to.frame(login_frame) driver.find_element_by_name("email").send_keys("email") driver.find_element_by_name("password").send_keys("password") driver.find_element_by_id("dologin").click() driver.switch_to.default_content() driver.quit() ``` switch_to.frame() 默认可以直接对表单的 id 属性或 name 属性传参,因而可以定位元 素的对象。在这个例子中,表单的 id 属性后半部分的数字(1553484417298.5217)是随机变化的,在 CSS 定位方法中,可以通过“^=”匹配 id 属性为以“x-URS-iframe”开头的元素。 最后,通过 switch_to.default_content()回到最外层的页面。