Python和Selenium對瀏覽器視窗進行處理的程式碼實例

不言
發布: 2018-10-27 16:15:26
轉載
5351 人瀏覽過

這篇文章帶給大家的內容是關於Python和Selenium對瀏覽器視窗處理的程式碼實例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

上一次提到了瀏覽器的彈出框處理,瀏覽器視窗也是會由某種原因觸發,使得瀏覽器開啟了一個新的視窗。定位到新的視窗和定位到彈出框差不多,需要先使用切換到該視窗後才能進行操作。

瀏覽器視窗相關API

##quit()關閉瀏覽器
名稱 #用法
switch_to.window(window_handle) 切換視窗
#current_window_handle 目前視窗句柄
## window_handles 所有視窗句柄
close() 關閉目前視窗
window_handle是瀏覽器視窗的唯一標識,一般稱為視窗句柄,透過這個句柄才可以自由切換視窗。 close()和quit()也一起列出來,重點強調關閉視窗和關閉瀏覽器的差異。

實例

我們直接用百度的網頁來舉例,透過點擊百度首頁下方的「京公網安備…號」開啟新的窗口,關閉新窗口,然後再回到百度首頁中。

我們做兩個小測試:

  • #打開百度首頁,我們先取得目前視窗句柄,開啟新視窗後,再取得一次視窗句柄,並把兩次獲取結果列印出來。

  • 關閉新視窗後,瀏覽器自動切換回了最初的百度首頁,這時候對百度首頁進行操作

為了防止程式中斷,必要的地方使用try/except/finally處理。我們來看程式碼和結果。

# 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中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板