以下文章來自於 上海-悠悠的博客 《Selenium2+python自動化13-多窗口、句柄(handle)》
有些頁面的鏈接打開后,會重新打開一個窗口,對於這種情況,想在新頁面上操作,就得先切換窗口了。獲取窗口的唯一標識用句柄表示,所以只需要切換句柄,我們就能在多個頁面上靈活自如的操作了。
一、認識多窗口
1.打開趕集網:http://bj.ganji.com/,點擊招聘求職按鈕會發現右邊多了一個窗口標簽
2.我們用代碼去執行點擊的時候,發現界面上出現兩個窗口,如下圖這種情況就是多窗口了。
3.到這里估計有小伙伴納悶了,手工點擊是2個標簽,怎么腳本點擊就變成2個窗口了,這個在2.1里面講過,腳本執行是不加載配置的,
手工點擊是瀏覽器默認設置了新窗口打開方式為標簽,這里用鼠標按住點二個標簽,拖拽出來,也就變成2個標簽了,是一回事。
二、獲取當前窗口句柄
1.元素有屬性,瀏覽器的窗口其實也有屬性的,只是你看不到,瀏覽器窗口的屬性用句柄(handle)來識別。
2.人為操作的話,可以通過眼睛看,識別不同的窗口點擊切換。但是腳本沒長眼睛,它不知道你要操作哪個窗口,這時候只能句柄來判斷了。
3.獲取當前頁面的句柄:driver.current_window_handle
三、獲取所有句柄
1.定位趕集網招聘求職按鈕,並點擊
2.點擊后,獲取當前所以的句柄:window_handles
四、切換句柄
網上大部分教程都是些的第一種方法,估計是互相抄吧,小編這里新增一個更簡單的方法,直接從獲取所有的句柄list里面取值。
方法一:
1.循環判斷是否與首頁句柄相等
2.如果不等,說明是新頁面的句柄
3.獲取的新頁面句柄后,可以切換到新打開的頁面上
4.打印新頁面的title,看是否切換成功
方法二:
1.直接獲取all_h這個list數據里面第二個hand的值:all_h[1]
五、關閉新窗口,切回主頁
1.打開新頁面后,其實只想驗證新頁面跳轉對不對,這里可以做個簡單的驗證,獲取當前頁面的title驗證
2.驗證完后切關閉新窗口
3.切回句柄到首頁
4.打印當前頁面的句柄,看是否切換到首頁了
六、參考代碼
# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://bj.ganji.com/")
h = driver.current_window_handle
print h # 打印首頁句柄
driver.find_element_by_link_text("招聘求職").click()
all_h = driver.window_handles
print all_h # 打印所有的句柄
# 方法一:判斷句柄,不等於首頁就切換
# for i in all_h: # 這里不建議用for循環了,很多小伙伴懵的
# if i != h:
# driver.switch_to.window(i)
# print driver.title
# 方法二:獲取list里面第二個直接切換
driver.switch_to.window(all_h[1])
print driver.title
# 關閉新窗口
driver.close()
# 切換到首頁句柄
driver.switch_to.window(h)
# 打印當前的title
print driver.title
selenium(python+java)