1. 程式人生 > 其它 >selenium獲取當前頁面控制代碼的順序

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