金天牛

导航

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}')

 

posted on 2022-04-22 14:41  金天牛  阅读(695)  评论(0编辑  收藏  举报