selenium获取当前页面句柄的顺序
selenium4调用webdriver,可以通过browser.window_handles 获取到当前页面的句柄,其结果是一个列表。
但页面句柄在列表中的顺序,有的说并不是固定的,经过测试,发现其实是有规律的,具体如下:
1、列表第一个为浏览器打开的地址。
2、后续当调用current_window_handle或window_handles时,打开顺序靠后先加入列表。
具体验证结果如下:
1、我们打开页面的顺序分别为:百度一下、百度新闻、百度图片、百度贴吧、百度地图、hao123 共6个网址
2、如下面代码,在打开以上页面后,使用语句 handle_all = browser.window_handles 获取了句柄,打印顺序为:
百度一下、hao123、百度地图、百度贴吧、百度图片、百度新闻
即:百度一下放在了列表第0个位置,打开最后的hao123 放在了第1个位置,接着是依次插入打开顺序靠后的句柄
3、若 在百度图片和百度贴吧之间,增加handle_all = browser.window_handles 获取句柄(即把第15行代码取消注释),则顺序变为
百度一下、百度图片、百度新闻、hao123、百度地图、百度贴吧。
即:在“获取句柄”的前面,把后打开的页面:百度图片插入到第1个位置,百度新闻是第2个位置。 后续再一次获取时,把最后打开的hao123插在了第3个位置。
import time
from selenium import webdriver # 用来驱动浏览器的
from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR
browser =webdriver.Chrome() #打开浏览器
#隐式等待:在查找所有元素时,如果尚未被加载,则等3秒
browser.implicitly_wait(3)
browser.get('https://www.baidu.com/') #输入百度
time.sleep(2)
browser.find_element(By.LINK_TEXT,'新闻').click()
time.sleep(2)
browser.find_element(By.LINK_TEXT,'图片').click()
#handle_all = browser.window_handles
time.sleep(2)
browser.find_element(By.LINK_TEXT,'贴吧').click()
time.sleep(2)
browser.find_element(By.LINK_TEXT,'地图').click()
time.sleep(2)
browser.find_element(By.LINK_TEXT,'hao123').click()
handle_all = browser.window_handles #结果为list类型
print(f"获取当前的handle为:{handle_all}")
browser.switch_to.window(handle_all[0])
time.sleep(2)
print(f'当前窗口的title是:{browser.title}')
browser.switch_to.window(handle_all[1])
time.sleep(2)
print(f'当前窗口的title是:{browser.title}')
browser.switch_to.window(handle_all[2])
time.sleep(2)
print(f'当前窗口的title是:{browser.title}')
browser.switch_to.window(handle_all[3])
time.sleep(2)
print(f'当前窗口的title是:{browser.title}')
browser.switch_to.window(handle_all[4])
time.sleep(2)
print(f'当前窗口的title是:{browser.title}')
browser.switch_to.window(handle_all[5])
time.sleep(2)
print(f'当前窗口的title是:{browser.title}')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构