<Python> Selenium調用高版本瀏覽器異常問題

本文是作者"一葉染秋"原創,轉載請注明出處和作者:
http://www.lxweimin.com/p/62ed9231f824

一、概述

我之前用過selenium 2.x版本操作老版本的firefox,很流暢。現在瀏覽器和selenium都升級后問題隨之而來。

  • 1.<selenium2.x> 版本可能在調試調用高版本瀏覽器會出現系統提示報錯,在排除代碼錯誤的前提,可能是跟selenium版本與目標調用瀏覽器版本不兼容。
    <selenium3.x>版本則一定會出現,官方提示了最新版本的selenium調用瀏覽器,需要到指定網站下載一個類似“補丁文件”的東東(比如,selenium調用Firefox高版本的geckodriver文件)

  • 2.系統中的瀏覽器可能存在你不留意的更新升級,而且主流瀏覽器對selenium的控制現已普遍要用瀏覽器官方提供的控件補丁,才能正常調用操作瀏覽器。

二、問題場景復原

工作環境

  • 1.Ubantu 14.04版本
  • 2.Python 2.7 (本問題和python版本無關)
  • 3.沒有提前下載瀏覽器對selenium的對應補丁文件時候
  • 4.selenium調用本地Firefox瀏覽器或者Chrome瀏覽器(其他主流瀏覽器高版本同樣可能出錯)

代碼

   #coding:utf-8
   from selenium import webdriver
   ‘’‘ 這是一段selenium代碼’‘’

   browser = webdriver.Firefox()
   browser.get("http://docs.seleniumhq.org/")
   browser.close()

如果你調用的是Chrome瀏覽器,我們換成調用Chrome瀏覽器方法
browser = webdriver.Chrome()

注意:代碼沒有錯誤,錯誤的是selenium與高版本瀏覽器不兼容

報錯信息

調用Firfox瀏覽器方法報錯


調用Chrome瀏覽器方法報錯


報錯解讀

  • 1 對于調用Firefox瀏覽器,系統提示我們,缺少一個叫geckodriver的文件,并且需要設置路徑指向
  • 2 對于調用Chrome瀏覽器,系統提示我們,缺少一個叫chromedriver的文件,并且需要設置路徑指向

三、解決辦法

Step1.你需要從selenium官網的提供網址針對不通瀏覽器下載這類補丁文件(每個主流瀏覽器的補丁文件都不相同)
官方提供瀏覽器driver補丁文件下載地址:
selenium提供瀏覽器官方driver補丁文件下載.

Step2.把下載后的壓縮包,解壓縮后的文件,放在瀏覽器文件夾下,并且在終端命令行下配置環境變量

舉例說明:

  • 1.我把調用Firefox瀏覽器的補丁文件geckodriver文件解壓縮后放在我本地的Firefox文件夾下

  • 2.對照geckodriver所在位置,我在終端執行一條指令進行配置路徑:
    #export PATH=$PATH:/usr/lib/firefox

  • 3 或者直接編輯:
    vim /etc/environment 文件
    PATH = ':/usr/lib/firefox/geckodriver' 把geckodriver的路徑加入環境 變量文件中

注意:
1.必須是在管理員權限下配置(linux: root#)
2.如果你的配置后,程序依舊提示報錯,那么請重啟電腦!
3.我們配置環境變量指向的是瀏覽器補丁文件所在瀏覽器文件的位置,且不能指向這個文件。
#export PATH=$PATH:/usr/lib/firefox/geckodriver
如果這么輸入終端命令就會出現如下報錯:

  • 3.關于Windows環境下,MacOS環境下,都需各位少俠們自己配置其相同原理的環境變量的操作,才能有效。

四、一個小延伸

此時此刻估計很多小伙伴們和一樣倔強固執,我就是不想下載那個XXX瀏覽器補丁文件,我就是要用低版本selenium調用指定位置低版本瀏覽器。

"固執,是盤踞于心靈的根源性沖動之一 "。
美國哲學家、詩人 桑塔亞那

原先使用的是selenium 版本低(目前我在pip源上顯示可提供的最低版本也是2.4x,大家可以從別的網站上找到老版本的selenium源碼),低版本的瀏覽器文件需要大家自行查找下載。
ps:低版本的selenium能調用打開高版本的瀏覽器,但是會出現閃退等異常現象

代碼

    #coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    
    ffBinary = FirefoxBinary(firefox_path="/usr/lib/firefox/firefox.sh")
    browser = webdriver.Firefox(firefox_binary=ffBinary)
    browser.get("http://docs.seleniumhq.org/")

代碼說明

本處的路徑是相對路徑,py文件和下載的firefox瀏覽器文件夾是同一級,如果你的py文件路徑和firefox文件夾路徑不通,要注明絕對路徑。
注意:此處的firefox文件是ubantu下的,如果是Win平臺下的firefox文件應該是firefox.exe啟動文件

這樣修改完之后,你的舊版本selenium配合指定路徑下的老版本瀏覽器就開始那些年熟悉的操作了。。。


-閑言碎語-

本文的寫作緣由是因為一次很簡單的調試而消耗了本不應該花費的時間長度,暴露了自己的一些問題,我覺得我不寫出來我都虧得慌。

因為遇到問題報錯或者系統bug時候,每個的解決問題的方法因自己的能力水平和固化的思維邏輯所影像,這就是導致每個人解決問題的能力不通和效率高低的一種原因。

我在這里總結了一點我的解決問題小思路想和和大家探討交流

  • 1.根據系統提示信息確定問題位置出處(判斷是多個原因還是單個原因),排除人為低級失誤。
  • 2.首先應該去官方網站去檢索問題關鍵詞,查找解決方案,最為直接有效,降低廣域搜索解決問題的原因,因為常規出錯,官方的解決方案還是比較全面的
  • 3.不能從官方網站上解決問題,就直接利用科學瀏覽器檢索“系統報錯部分的提示語”,或者是從各大知名平臺進行檢索問題關鍵詞尋求答案。
  • 4.如果你有個技術扛把子的同事,同時他比較好相處,那就不要舍近求
    遠。

切記不要自己一個勁和自己的報錯代碼死較真,當局者迷何必自己折磨自己,在外部尋求解決方案,要相信你犯過的錯別人都犯過(一碗雞湯,各位少俠請喝下)。

-鳴謝-

本次對我提供過幫助的,一位真誠無私且喜歡《秦時明月》的技術員朋友ZYJ
(大家都覺得:你側目的眼神很YD)
我的朋友千千萬,他們都很可愛。

-尾語-

嘮嘮叨叨啰啰嗦嗦寫完了,我<簡書>上的第一篇原創文章,的確,我寫的很自嗨(因為都是我的切實體會啊,魂淡),還因為我不是一個人在戰斗。

如果文章內容有出錯和相關意見想法,歡迎大家指正,我都會及時改正.
十一快到啦,散花~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容