多窗口切换
方法:
(1)driver.current_window_handle 获取当前窗口句柄
(2)driver.window_handles 获取所有窗口句柄
(3)driver.switch_to.window(handle) 切换指定句柄窗口
(4)driver.close() 关闭当前的句柄
(5)driver.quit() 关闭浏览器
例:
from selenium import webdriver import time d = webdriver.Firefox() d.get('https://www.baidu.com/') d.find_element_by_id('kw').clear() d.find_element_by_id('kw').send_keys("慕课网") d.find_element_by_id('su').click() time.sleep(10) d.find_element_by_partial_link_text('程序员的梦工厂').click() time.sleep(10) print(d.window_handles) d.switch_to.window(d.window_handles[1]) print(d.current_window_handle) print(d.current_url) d.close() d.quit()
输出:
['6442450945', '6442450949'] 6442450949 https://www.imooc.com/
多表单切换
在网页中,表单嵌套是很常见的情况,尤其是在登录的场景
1)什么是多表单?
实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面
2)处理方法
直接使用id值切换进表单
driver.switch_to.frame(value)
定位到表单元素,再切换进入
el = driver.find_element_by_xxx(value)
driver.switch_to.frame(el)
webdriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to_frame()方法将当前定位的主体切换为内嵌表单。
from selenium import webdriver import time driver = webdriver.Firefox() url = 'http://126.com/' driver.get(url) time.sleep(5) # 防止加载太快 # 定位到表单 el_frame = driver.find_element_by_tag_name('iframe') # 切换进入表单中 driver.switch_to.frame(el_frame) # 在表单中定位账号输入框 el_user = driver.find_element_by_name('email') # 输入账号 el_user.send_keys('itcast_soft_test') # 定位密码输入框标签 el_pwd = driver.find_element_by_name('password') # 输入密码 el_pwd.send_keys('1qaz2wsx#EDC') # 定位登陆按钮 el_sub = driver.find_element_by_id('dologin') # 点击登录 el_sub.click() time.sleep(5) driver.close()
driver.switch_to.default_content()
跳回最外层的页面。
driver.switch_to.parent_frame()
跳回上层的页面。