浏览器打开的窗口其实会有一个叫做句柄的概念。 句柄就类似于每一个标签页的ID一样,具有唯一性。
1.1 语法 获取当前窗口句柄,注意后面没有括号哦~ driver.current_window_handle 获取所有窗口句柄,结果以列表格式存储,注意后面没有括号哦~ driver.window_handles 根据句柄切换页面 driver.switch_to.window(要切换窗口的句柄) 1.2 案例 操作步骤:1、打开百度首页2、输入框输入“马蓉”3、点击回车4、点击“马蓉”百度百科4、在百度百科页面点击“编辑” from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom time import sleep# 打开浏览器driver = webdriver.Chrome()driver.implicitly_wait(5)driver.maximize_window()# 打开网页driver.get('https://www.baidu.com/')# 定位搜索框search_box = driver.find_element(By.ID, 'kw')search_box.send_keys('马蓉')search_box.send_keys(Keys.ENTER)# 点击马蓉百度百科标题,进入详情页面(打开了一个新窗口)driver.find_element(By.XPATH, '//div[@id="content_left"]/div//h3/a').click()# 获取所有窗口句柄,结果保存在列表里handle_list = driver.window_handles# 打印出来看看结果print(handle_list)# 根据每个窗口的句柄唯一,来进行窗口切换driver.switch_to.window(handle_list[-1])# 在新窗口点击“编辑”链接driver.find_element(By.LINK_TEXT, '编辑').click()# 关闭浏览器 二、表单切换 2.1 背景在同一个页面上,也可能存在元素不在同一个iframe标签里面的情况,因此要实现对元素的定位,需要先切换到元素所在的ifame标签,再根据八种元素定位方式进行元素定位。
2.2 语法 切换到最外层iframe driver.switch_to.default_content() 切换到任意iframe 1、定位到iframe标签2、driver.switch_to.frame()switch_to.frame()中可以写iframe标签的id和name属性的值,但是id和name属性的值要唯一switch_to.frame()中可以写通过其他元素定位方式定位的iframe标签对象,比如以下案例就是使用这种方式。 2.3 案例 操作步骤:1、打开163邮箱登录页面2、定位账号和密码输入框,并输入账号和密码3、点击 登录 按钮4、点击页面上的“VIP” 如下图,可以知道账号和密码元素都有"ID"属性,但是,刷新页面可以知道ID属性为动态变化的,因此不可用于元素定位根据经验:ID属性值长长一串类似乱码的格式,都是不可以用于元素定位的,因此保险起见,都是采用其他元素定位方式 from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom time import sleep# 打开浏览器driver = webdriver.Chrome()driver.maximize_window()driver.implicitly_wait(3)# 打开网页driver.get('https://mail.163.com/')# 切换表单# 定位表单元素iframe_element = driver.find_element(By.XPATH, '//div[@id="loginDiv"]/iframe')# 切换driver.switch_to.frame(iframe_element)# 账号输入框driver.find_element(By.NAME, 'email').send_keys('abc')# 密码输入框driver.find_element(By.NAME, 'password').send_keys('1122333')# 点击 登录 按钮driver.find_element(By.ID, 'dologin').click()# 切换到最外层ifamedriver.switch_to.default_content()# 点击最外层表单的VIP字段driver.find_element(By.CSS_SELECTOR, 'a[href="https://vipmail.163.com/?from=fmail"]').click()sleep(3)# 关闭浏览器driver.quit()