1. 程式人生 > >Selenium在Firefox中踩過的

Selenium在Firefox中踩過的

否則 json enter bdr gecko next 驗證 還得 xxxx

本文轉至 http://www.51testing.com/html/11/n-3711311.html,作者對webdriver在Firefox中設置profile配置項挺熟的,是用Python實現,後續有時間用Java實現一下,先轉過來Mark一下

1.selenium 在打開firefox後,發現程序‘死’那裏了,不動了,後面的代碼不執行,最後拋出異常說超時。   原因:這個主要原因selenium在運行時會在firefox中安裝一個Firefox WebDriver的插件,如果firefox版本太高,比如最新的FF48版本,在48版本中,對於安裝的插件要進行驗證,沒有經過驗證的插件不會被運行,而且通過在firefox中輸入about:config,設置xpinstall.signatures.required為true,同樣也無法生效。 技術分享圖片
  解決方案:很簡單,用低版本的firefox把,比如firefox45,當然也請跟蹤selenium的開發進度,目前正有個geckodriver的新版本開發過程中,不過當前這個時間點最好的辦法是降低你的firefox版本。目前為止47.01是可以用的。   (請註意,本條記錄時間為2016-08-07)   上代碼便於說清楚,以下代碼是正確無任何問題
#coding=utf-8 #運行環境配置 #主要配置firefox的profile文件是否可用 import os import sys from selenium import webdriver from selenium.common.exceptions import NoSuchElementException gourl=‘http://www.baidu.com/‘ #獲得webdriver函數 def get_webdriver(): #定制firefox的profile文件 profileDir = r"d:\xiaoshuo\profile" profile1 = webdriver.FirefoxProfile(profileDir) #親們重點關註這句就好,其他更多的不用關心 br=webdriver.Firefox(profile1) br.set_window_size(600,600) return br br=get_webdriver() br.get(gourl)
2.在使用find_element_by_xxxx()查找元素時,如果元素找不到,不會返回None,而是拋出異常,你必須得自己捕獲異常
from selenium import webdriver from selenium.common.exceptions import NoSuchElementException br=webdriver.Firefox() gourl=‘http://www.baidu.com/‘ br.get(gourl) try: xiaoyiye=br.find_element_by_link_text(u‘下一頁‘) #找到要做的事情 except NoSuchElementException: #找不到異常處理 print "no next page"
3.selenium啟動firefox,如果不指定profile文件,將只能使用firefox默認配置,無法進行瀏覽器定制,比如不顯示圖片,啟動廣告插件等,你必須得自己配置profile,讓selenium用指定配置啟動   from selenium import webdriver   from selenium.common.exceptions import NoSuchElementException   profileDir = r"G:\myproject\python\xiaoshuo\profile"   profile1 = webdriver.FirefoxProfile(profileDir)   time.sleep(1)   br=webdriver.Firefox(profile1)   gourl=‘http://www.baidu.com‘   br.get(gourl) 4.在使用firefox的 profile文件後,你會發現很多選項雖然在瀏覽器中進行了設置但是在通過selenium啟動firefox的時候很多設置沒有生效,所以你還得必須會通過代碼進行配置設置來關閉圖片   profileDir = r"G:\myproject\python\xiaoshuo\profile"   profile1 = webdriver.FirefoxProfile(profileDir)   profile1.set_preference(‘permissions.default.stylesheet‘, 2)   profile1.set_preference(‘permissions.default.image‘, 2)   profile1.set_preference(‘dom.ipc.plugins.enabled.libflashplayer.so‘, ‘false‘)   br=webdriver.Firefox(profile1)   gourl=‘http://www.duzheba.cc/‘   br.get(gourl) 5. 用標簽頁代替彈出窗口無法設置成功   在python使用selenium來操控firefox的時候,有時候希望所有的新開窗口用TabPage來代替,但是如果你以為通過設置firefox的profile文件目錄,或者在代碼中通過profile1.set_preference(‘browser.link.open_newwindow‘,3)來搞定,那麽你會發現你啟動的窗口永遠browser.link.open_newwindow的值永遠等於2,也就是下圖中的“需要新建窗口時以新建標簽頁代替”選項永遠是沒有選中的,除非手動點擊一下。   技術分享圖片 標簽頁選項   原因很簡單,因為selenium的綁定中已經將這個選項寫成了固定值,所以無論你如何設定除非在窗口啟動後手動點擊,否則該項用戶按不會選中。而該問題的解決在於直接手動改寫selenium代碼中的設置,具體方法如下:   確定目錄,在我的機器上是C:\Python27\Lib\site-packages\selenium\webdriver\firefox,大家可以根據自己的機器情況進行調整   編輯器打開目錄中的webdriver_prefs.json文件,將browser.link.open_newwindow的值修改為3。 技術分享圖片

Selenium在Firefox中踩過的