這篇文章帶給大家的內容是關於Python和Selenium對瀏覽器視窗處理的程式碼實例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
上一次提到了瀏覽器的彈出框處理,瀏覽器視窗也是會由某種原因觸發,使得瀏覽器開啟了一個新的視窗。定位到新的視窗和定位到彈出框差不多,需要先使用切換到該視窗後才能進行操作。
名稱 | #用法 |
---|---|
switch_to.window(window_handle) | 切換視窗 |
#current_window_handle | 目前視窗句柄 |
## window_handles | 所有視窗句柄 |
close() | 關閉目前視窗 |
關閉瀏覽器 |
# coding = utf-8 from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('https://www.baidu.com') first_window_handle = driver.current_window_handle #获取当前(百度首页)的窗口句柄 print('now handle is : ',first_window_handle) #打印百度首页窗口句柄 driver.find_element_by_id('jgwab').click() #点击打开新窗口 second_window_handle = driver.current_window_handle #再获取一次窗口句柄并打印 print('and now handle is : ', second_window_handle) all_handles = driver.window_handles #获取所有窗口句柄 sleep(2) for window in all_handles: if window != first_window_handle: print('and and now handle is : ', window) driver.switch_to.window(window) #切换到非百度首页的窗口 driver.close() #关闭该窗口 sleep(2) try: driver.find_element_by_id('kw').send_keys('test') #关闭窗口后操作百度首页元素 driver.find_element_by_id('su').click() except Exception as msg: print('error: ', msg) #如果有错误,打印错误信息 finally: driver.switch_to.window(first_window_handle) #切换到百度首页后再操作 driver.find_element_by_id('kw').send_keys('try again') driver.find_element_by_id('su').click() sleep(2) driver.quit()我們看一下執行結果:
now handle is : CDwindow-6CF04CE58FCA5EA42EC453509FFDF773 and now handle is : CDwindow-6CF04CE58FCA5EA42EC453509FFDF773 and and now handle is : CDwindow-C6EDDF33CAA9BC9330585B2DCB8A664B error: Message: no such window: target window already closed from unknown error: web view not found (Session info: chrome=69.0.3497.92) (Driver info: chromedriver=...回顧剛才的測試我們發現: 1.即使打開了新視窗後獲取到的視窗句柄依舊是百度首頁的句柄(打印的兩次句柄相同)。 2.關閉了新窗口後,瀏覽器預設顯示了百度首頁,但並不能對百度首頁進行操作,而是報了錯誤:沒有窗口,目標窗口已關閉。我們必須在程式中切換回百度首頁之後才可以操作首頁的元素(沒有檢索“test”,而檢索了“test again”)。 總結所見不一定為實,除了腳本初始開啟瀏覽器時顯示的窗口,後續透過一系列動作(如:開啟/關閉視窗)而顯示的視窗不代表可以直接操作。定位各視窗元素前要先使用switch_to.window()切換,driver是不會自己跳轉的哦。
以上是Python和Selenium對瀏覽器視窗進行處理的程式碼實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!