Python+Selenium實現Web自動化問題定位過程:等待頁面加載及不一樣窗口切換問題

本文內容皆爲做者原創,碼字不易,如需轉載,請註明出處: http://www.javashuo.com/article/p-kmgibodt-b.htmlhtml

今天使用Python+Selenium+PyCharm寫了一個Web自動化小程序練習Xpath定位,在調試程序的過程當中發現代碼未執行完瀏覽器就關閉了,可是後臺並無報錯。通過百度後推測是等待時間的問題,訪問官網查閱Selenium-Python-API,查閱隱式等待和顯示等待用法,修改腳本完善代碼,繼續調試。調試過程當中發現腳本在不一樣窗口進行切換時報NoSuchElementException異常,經問題分析和定位,使用switch_to.window()方法完美解決。整個代碼調試過程花費了很長時間,但在整個問題解決過程,一步一步的探索,在解決一個問題的同時發現新的問題,環環相扣,很有成就感。原本一個簡單的小程序,靠着敏銳的直覺,嗅到了一絲bug的氣息,一路過關斬將,既鍛鍊了問題分析的能力,也順便學習了Selenium-Python-API。我把整個問題定位的過程記錄下來,便於後面的學習。

一,Web自動化環境配置小程序

Python3.8.3+PyCharm 2020.2.1+Selenium+Win10 64位瀏覽器

,Web自動化小程序功能學習

程序功能:訪問百度首頁,點擊新聞超連接,進入新聞頁面後退出瀏覽器。優化

網站地址網站

百度首頁,如圖:調試

百度新聞,如圖:code

三,問題定位過程htm

整個調試過程當中,代碼共經歷了V1.0.0-V1.0.4五個版本,其中V1.0.0和V1.0.2代碼存在問題,V1.0.1(強制等待),V1.0.3(隱式等待)和V1.0.4(顯示等待)調試成功,分別爲強制等待,隱式等待和顯示等待的代碼實現方法,效果是同樣的。

3.1 版本V1.0.0blog

存在問題: 代碼未執行完,瀏覽器就關閉了。

問題分析: 推測是點擊「新聞」超連接進入下一個頁面時,未加等待時間,頁面未加載完成,就執行退出瀏覽器語句了。

代碼如圖

3.2 版本V1.0.1 【強制等待調試成功】

強制等待:在腳本中設置固定時間的休眠,程序中導入time模塊,使用sleep()便可。

代碼優化:進入下一個頁面時添加等待時間,引入time模塊,使用sleep()方法,強制等待幾秒鐘。

調試結果: 程序調試正常,前臺網頁成功打開,點擊「新聞」超連接,進入新聞頁面,瀏覽器正常退出並關閉,版本V1.0.0問題解決。

問題定位: V1.0.0版本代碼,新聞頁面未進入瀏覽器就退出的問題確實是未加等待時間的緣由致使。

代碼如圖

3.3 版本V1.0.2

隱式等待:設置必定的時長等待頁面上的某元素加載完成,若是超過了設置的時長,元素仍未被加載,則拋出NoSuchElementException異常。WebDriver提供了implicitly_wait()方法來實現隱式等待,默認等待時間設置爲0秒。設置的等待時長並不是一個固定的等待時間,它並不影響腳本的執行速度。其次,它並不針對頁面上的某一元素進行等待。

代碼優化:在V1.0.1基礎上添加等待時間,使用implicitly_wait()方法,並判斷頁面元素是否存在,而後退出瀏覽器。
調試結果: 前臺跳轉正常,後臺報NoSuchElementException異常,selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element。
問題分析: 「貼吧」超連接Xpath定位語法寫錯,等待時間不夠長,或者其餘別的錯誤。
代碼如圖

問題定位:新建py文件,修改代碼,瀏覽器直接訪問「http://news.baidu.com」,驗證Xpath語法是否正確。

代碼如圖

經驗證在百度新聞頁面,代碼沒有問題。如圖:

分析結論:經過百度首頁,點擊超連接進入百度新聞頁面,百度新聞頁面的元素定位報NoSuchElementException異常,推測是未切換窗口致使的。

3.4 版本V1.0.3 【隱式等待調試成功】

代碼優化:在V1.0.2基礎上使用switch_to.window()方法,實如今不一樣的窗口之間切換。

調試結果: 前臺跳轉正常,後臺無報錯,調試成功。

代碼如圖

3.5 版本V1.0.4【顯示等待調試成功】

顯示等待:須要使用WebDriver提供的WebDriverWait類,顯示等待將等待時間設置爲一個固定的時長,在設置時間內,默認每隔一段時間檢測一次當前頁面上的某一元素是否存在,若是超過設置時間檢測不到則拋出異常。

代碼優化:頁面加載採用顯示等待方式,使用WebDriverWait類,實現不一樣窗口切換,使用switch_to.window()方法。

調試結果: 前臺跳轉正常,後臺無報錯,調試成功。

代碼如圖

程序調試成功!

相關文章
相關標籤/搜索