python+selenium自動化測試-18Firefox下載自動保存文件及瀏覽器彈窗處理

不能像chrome一樣點擊導出文件便能自動下載,是Firefox的一個巨大的坑。雖然最新版本的Firefox修復長期以來不可選“以後自動採用相同的動作處理此類文件”的Bug,在當次瀏覽器啓用可以自動下載此類文件,但在Firefox下一次啓動後,[選項-應用程序]中並不能找到‘xls文件’這種內容類型,也找不到相應的配置文件(如mimeTypes.rdf),意味着不能自動下載指定類型的文件。
圖01 第N次啓動
圖1
圖02 第N次啓動勾選上‘以後自動採用相同的動作處理此類文件’後,打開[選項-應用程序]查看到
在這裏插入圖片描述
圖03 N+1次啓動,打開[選項-應用程序]查看到
在這裏插入圖片描述
查了各種資料,可以通過about:config,修改一些高級配置來解決。代碼如下:

	fp = webdriver.FirefoxProfile()
    fp.set_preference("browser.download.folderList", 2)# 0下載到桌面,1默認下載路徑,2指定目錄
    fp.set_preference("browser.download.dir", r'C:\Users\ComUserName\Desktop')
    fp.set_preference("browser.download.manager.showWhenStarting", False)# false不顯示
    fp.set_preference("browser.download.forbid_open_with", True)#不打開保存的提示框
    fp.set_preference("browser.altClickSave", True)#快速保存
    # 不詢問下載路徑:後面的參數爲要下載頁面的content-type的值
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream,application/vnd.ms-excel,text/csv,application/zip")
    driver = webdriver.Firefox(firefox_profile=fp)

確實,在對導出文件沒有監聽的情況下,可以自動導出文件到指定路徑。

不過,對導出文件有監聽,就會無法自動保存到指定路徑。我看了一下前臺展示的效果,發現【保存文件】這個按鈕加載出來有延遲。在網上找了,也沒有好的解決方法。最終還是得人工手動點擊一下【保存文件】按鈕才能自動保存到指定的位置,雖然不影響後續自動化的執行,但是始終感覺不完美。

圖A 有監聽的文件導出
在這裏插入圖片描述
圖B 自動化結果
在這裏插入圖片描述
可以用第三方庫SendKeys(Python2)或者PyUserInput(Python3.0以上)解決。

from pykeyboard import PyKeyboard
m = PyKeyboard()
sleep(3)#應對【保存文件】按鈕加載延遲
m.tap_key(m.tab_key)
m.tap_key(m.return_key)

PyUserInput安裝參考
https://blog.csdn.net/zhusongziye/article/details/79586927
pymouse的使用
https://blog.csdn.net/alex1997222/article/details/80518397

發佈了53 篇原創文章 · 獲贊 15 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章