您好,登錄后才能下訂單哦!
在很多頁面上都有可點擊的鏈接,點擊這些鏈接會打開一個新的窗口,這時如果要在新打開的窗口中操作頁面,就需要先切換到新窗口中,如果不進(jìn)行切換操作,還是操作的上一個頁面窗口
瀏覽器窗口的切換通過句柄(handle)來操作,每個窗口都有一個句柄,代表當(dāng)前窗口,需要操作哪個頁面的窗口,切換到窗口對應(yīng)的句柄。通過driver.switch_to.window(handle)來切換句柄
在新的窗口中打開頁面
打開百度首頁,點擊右上角的新聞鏈接,默認(rèn)會在當(dāng)前窗口中打開?,F(xiàn)在通過修改點擊元素的屬性,讓新打開的頁面顯示在一個新的窗口中。
找到新聞元素的定義
<a class="mnav" rel="external nofollow" name="tj_trnews">新聞</a>
修改上面的代碼,為news元素增加一個屬性:target=”_blank”,增加這個屬性后,再次點擊鏈接,就會開啟一個新的窗口來打開頁面。通過執(zhí)行js語句為元素增加屬性
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") time.sleep(3) #通過執(zhí)行js語句為元素添加target="_blank"屬性 js = 'document.getElementsByName("tj_trnews")[0].target="_blank"' driver.execute_script(js) news = driver.find_element_by_name('tj_trnews') news.click()
webdriver執(zhí)行js語句的內(nèi)容在后面的博客中會有講解,這里先使用一下,這樣設(shè)置后,再次打開新聞頁面時就會在新的窗口中打開。在上面的代碼中再加入兩句
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") time.sleep(3) print(driver.current_window_handle) #打印當(dāng)前頁面的句柄 print(driver.title) #打印頁面標(biāo)題 #通過執(zhí)行js語句為元素添加target="_blank"屬性 js = 'document.getElementsByName("tj_trnews")[0].target="_blank"' driver.execute_script(js) news = driver.find_element_by_name('tj_trnews') news.click() time.sleep(3) handles = driver.window_handles #獲取所有打開窗口的句柄 print(handles)
程序輸出:
第一次打印的結(jié)果是首頁的句柄,第二次結(jié)果是獲取到的當(dāng)前所有打開的窗口句柄。一共打開了兩個窗口,一個是主頁,另一個是點擊新聞打開的頁面,所以第二次獲取到的是一個list,包含兩個窗口的句柄。
獲取到窗口的句柄后,就可以通過切換句柄來操作頁面,打開新聞頁面后,當(dāng)前的句柄還是主頁的句柄,如果要操作第二個頁面,需要將句柄切換到第二個窗口
driver.switch_to.window(handles[1]) print(driver.current_window_handle) print(driver.title)
輸出結(jié)果:
可以看到,切換后再次打印的句柄是list的第二個元素,也就是將句柄切換到了第二個打開的新窗口中,這樣就可以操作第二個頁面中的元素了。在切換句柄后打印了一下頁面標(biāo)題,根據(jù)標(biāo)題得知句柄已經(jīng)切換到新聞頁面窗口了
在操作完新聞頁面后,使用close()關(guān)閉當(dāng)前頁面,close和quit的區(qū)別在selenium+python自動化測試(二)–使用webdriver操作瀏覽器中已經(jīng)說明過,關(guān)閉當(dāng)前頁面后會回到首頁,需要將句柄再切換回主頁
driver.switch_to.window(handles[0]) print(driver.title)
輸出結(jié)果:
句柄又切換為了首頁的句柄,現(xiàn)在又可以操作主頁的元素了
全部代碼:
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") time.sleep(3) print(driver.current_window_handle) #打印當(dāng)前窗口的句柄 print(driver.title) #打印當(dāng)前頁面標(biāo)題 #通過執(zhí)行js語句為元素添加target="_blank"屬性 js = 'document.getElementsByName("tj_trnews")[0].target="_blank"' driver.execute_script(js) news = driver.find_element_by_name('tj_trnews') news.click() time.sleep(3) handles = driver.window_handles #獲取當(dāng)前打開的所有窗口的句柄 print(handles) driver.switch_to.window(handles[1]) #切換到第二個窗口的句柄 print(driver.current_window_handle) print(driver.title) driver.switch_to.window(handles[0]) #切換回主頁句柄 print(driver.title)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。