一、切换页签(句柄handle)的基础用法:
备注:部分方法为老写法,官方已经不推荐使用;点击这篇文章查看切换handle新写法。
1.获取浏览器当前所在页签的句柄:
current_window_handle()
2.获取所有页面窗口的句柄
window_handles()
3.将定位的页面转到指定的window_name页面
switch_to_window(window_name):
window_name:指定页面窗口的handle
二、关于webdriver源码展示
@property def current_window_handle(self): """ Returns the handle of the current window. :Usage: driver.current_window_handle """ if self.w3c: return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value'] else: return self.execute(Command.GET_CURRENT_WINDOW_HANDLE)['value'] @property def window_handles(self): """ Returns the handles of all windows within the current session. :Usage: driver.window_handles """ if self.w3c: return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value'] else: return self.execute(Command.GET_WINDOW_HANDLES)['value'] def switch_to_window(self, window_name): """ Deprecated use driver.switch_to.window """ warnings.warn("use driver.switch_to.window instead", DeprecationWarning, stacklevel=2) self._switch_to.window(window_name)
三、实例演示
百度贴吧的场景,如何通过切换窗口来定位其他窗口页面的元素。我们可以通过页面title的变化来判断handle是否已经切换;然后我们关闭这个新打开的页签后,需要手动切换到第一个handle,才能在第一个页面操作。
代码演示:
from selenium import webdriverfrom time import sleep # sleep方法是为了初学者能够更好地了解操作的变化 driver = webdriver.Chrome() # get() 进入贴吧页面driver.get("https://tieba.baidu.com/")sleep(1) # 点击title为娱乐明星的标签元素driver.find_element_by_css_selector("a[title = '娱乐明星']").click()sleep(5) # 获取全部窗口的handleall = driver.window_handlesprint("所有页签handle %s" % all) # 获取当前窗口的handle(贴吧首页)now_page = driver.current_window_handleprint("当前页面handle %s" % now_page) # 获取当前页面的title(当前title)title_first_page = driver.titleprint("切换前title %s" % title_first_page) # 将页面handle转到娱乐明星页面driver.switch_to_window(all[1]) # 获取当前页面的title(切换handle后)title_next_page = driver.titleprint("切换后title %s" % title_next_page) # 关闭当前页签sleep(2)driver.close() # 必须要切换回另一个页签窗口driver.switch_to_window(all[0])print("切换回第一个页签:%s" % driver.title)
输出结果:
所有页签handle ['CDwindow-7FDD7BD3B5CCC6AB2F24D23BFAAEE3B3', 'CDwindow-BB6E2A7BB6B1A175947956E61DCF64BD']当前页面handle CDwindow-7FDD7BD3B5CCC6AB2F24D23BFAAEE3B3切换前title 百度贴吧——全球最大的中文社区切换后title 娱乐明星_百度贴吧切换回第一个页签:百度贴吧——全球最大的中文社区