selenium獲取當前頁面控制代碼的順序
阿新 • • 發佈:2022-04-22
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}')