多窗口切换
方法:
(1)driver.current_window_handle 获取当前窗口句柄
(2)driver.window_handles 获取所有窗口句柄
(3)driver.switch_to.window(handle) 切换指定句柄窗口
(4)driver.close() 关闭当前的句柄
(5)driver.quit() 关闭浏览器
例:
from selenium importwebdriverimporttime
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']6442450949https://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 importwebdriverimporttime
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()
跳回上层的页面。