有時我們在打開瀏覽器瀏覽網頁時,當點擊網頁上某些鏈接時,它不是直接在當前頁面上跳轉,而是重新打開一個新標簽頁面,對於這種情況,想在新頁面上操作,就得先切換窗口了。獲取窗口的唯一標識用句柄表示,所以只需要切換句柄,我們就能在多個頁面上靈活自如的操作了。
一、認識多窗口
1、這里以趕集網為例,打開趕集網http://cd.ganji.com/,點擊工作,就會發現會重新打開一個窗口;
二、獲取當前窗口句柄
1.元素有屬性,瀏覽器的窗口其實也有屬性的,只是你看不到,瀏覽器窗口的屬性用句柄(handle)來識別。
2.人為操作的話,可以通過眼睛看,識別不同的窗口點擊切換。但是腳本沒長眼睛,它不知道你要操作哪個窗口,這時候只能句柄來判斷了。
3.獲取當前頁面的句柄:browser.current_window_handle
4.執行結果
三、獲取所有窗口句柄
1、獲取所有窗口句柄:brows.window_handles
2、執行結果
四、切換句柄
方法一:
1.循環判斷是否與首頁句柄相等;
2.如果不等,說明是新頁面的句柄;
3.獲取的新頁面句柄后,可以切換到新打開的頁面上;
4.打印新頁面的title,看是否切換成功。
執行結果
方法二:
直接獲取all_h這個list數據里面第二個hand的值:all_h[i]
執行結果
五、關閉新窗口,返回到原來的窗口
1.打開新頁面后,其實只想驗證新頁面跳轉對不對,這里可以做個簡單的驗證,獲取當前頁面的title驗證;
2.驗證完后切關閉新窗口;
3.切回句柄到首頁;
4.打印當前頁面的句柄,看是否切換到首頁了。
執行結果
六、參考代碼
#!/usr/bin/env python # -*- coding: utf-8 -*- # @File : handles.py # @Software: PyCharm import time from selenium import webdriver url = 'http://cd.ganji.com/' browser = webdriver.Firefox() browser.get(url) time.sleep(5) # 獲取當前頁面的窗口句柄 handle = browser.current_window_handle print(handle) # 獲取所有窗口句柄 browser.find_element_by_link_text('成都招聘').click() handles = browser.window_handles print(handles) # 方法一:判斷句柄是否與首頁相等 for i in handles: if i != handle: browser.switch_to.window(i) print(browser.title) browser.close() browser.switch_to.window(handle) print(browser.title) # 方法二:直接獲取list列表里面的值,取值handles[i] # browser.switch_to.window(handles[0]) # print(browser.title) # 退出 browser.quit()
寫在最后的話:這些都是小編自己一個字一個字敲上去的,原創算不上,可能很多類似的資料,小編寫這個的目的是為了激勵自己在學習道路上養成良好的習慣,所以轉載請注明出處,謝謝!