1. 程式人生 > >Selenium自動化下載檔案Firefox配置教程

Selenium自動化下載檔案Firefox配置教程

在上一篇文章中有提到【使用Selenium server standalone實現定時web自動化下載電影】,這只是實現了下載指令碼和Selenium server的部署,但在實際下載過程中,這樣的設定還是不夠的。

大家都知道Firefox在下載檔案的時候,會彈出一個確認對話方塊,讓使用者選擇是直接開啟還是儲存到指定的檔案路徑,但這個彈出對話方塊是瀏覽器客戶端層面的,Selenium指令碼是無法控制的。
這裡寫圖片描述

但本文探討如何以Selenium方式,不借助其他工具和方法。既然無法Selenium無法控制,我們能不能繞過這個彈出框,讓它點選下載後預設自動儲存到指定檔案路徑呢?答案是肯定的。
這裡寫圖片描述

開啟Firefox->工具->選項,或者直接輸入【about:preferences】進入通用設定,選擇儲存到指定檔案路徑。設定好後,讓我們點選一個檔案進行下載,奇怪?怎麼不生效!還是會有彈出視窗…….
這裡寫圖片描述

原來這個設定只對相應的檔案生效,讓我們找到這個相應的檔案進行配置。
這裡寫圖片描述

點選【應用程式】,搜尋exe,在操作選項選擇【儲存檔案】。因為要下載電影,格式為【rmvb】,怎麼搜尋沒有任何結果?可以百度一下【rmvb content-type】,這裡直接貼上對照表:http://tool.oschina.net/commons

雖然這個對照表包含了絕大多數的型別對照,但總有漏網之魚,例如【.war】檔案就沒有在對照表上面。不用著急,我們可以自己檢視網路傳輸的內容來獲取。
這裡寫圖片描述


開啟瀏覽器,按F12調出開發者工具,在網路[network]中找到這個檔案,可以檢視它的[Content-Type]了,就是那麼easy~

找到了檔案的Content-Type,如何新增到應用程式列表上,讓它識別呢?
在Firefox中輸入【about:config】進入瀏覽器配置頁面,在搜尋中輸入【browser.helperApps.neverAsk.saveToDisk】
雙擊進入編輯,在【Value】中輸入之前找到的Content-Type
這裡寫圖片描述

大功告成,所有配置都設定好了,但預設這些設定被儲存在當前Firefox的Profile。而Selenium在啟動的時候預設是新建一個profile,全新的空的乾淨瀏覽器來執行,這些設定相當於白乾,別急。讓我們來指定Selenium啟動Firefox時的Profile。
開啟資料夾【C:\Users\XXX\AppData\Roaming\Mozilla\Firefox\Profiles】
但是此目錄下生成的Profile的檔名是自動產生的一串數字,如何對Firefox Profi進行管理呢?
1、關閉所有Filefox瀏覽視窗
2、執行Firefox Manager,點選windows“開始”–>“執行”,然後在輸入框輸入firefox.exe -ProfileManager,點選“確定”按鈕
這裡寫圖片描述


3、建立一個新的Profile,只需點選“建立配置檔案”按鈕,在接著出現的嚮導窗口裡輸入配置檔名”seo”
這裡寫圖片描述
現在就建立了一個獨立的Firefox Profile配置檔案,你可以將你的設定、首選項、和一些外掛設定等儲存在你的個人配置檔案中。記住產生的配置檔名稱所對應的目錄名。

修改啟動Selenium Server Standalone的程式碼:

java -jar C:\test\selenium-server-standalone-2.53.1.jar
 -htmlSuite "*firefox" "http://www.baidu.com" "C:\test\Baidu.html" "C:\test\report.html" -log selenium-alone.log -browserTimeout 9999 
 -timeout 9999999999 -firefoxProfileTemplate "C:\Users\XXX\AppData\Roaming\Mozilla\Firefox\Profiles\v4f5xsv1.Selenium"

-timeout 9999999999 指定了整個Selenium server的超時時間,由於下載比較大的檔案需要很長時間,儘可能設定常一點的時間

-firefoxProfileTemplate 指定了Profile進行啟動,這樣可以把剛才對於檔案型別設定和預設不彈框的配置載入進來。

當然可以在執行完Selenium指令碼後進行呼叫批處理Batch命令,進行自動關機。

shutdown -s -t 60