1. 程式人生 > >Selenium+Python瀏覽器下載彈窗的處理

Selenium+Python瀏覽器下載彈窗的處理

from selenium importwebdriver
from time importsleep
 
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir','d:\\')
profile.set_preference('browser.download.folderList',2)
profile.set_preference('browser.download.manager.showWhenStarting',False)
profile.set_preference('browser.helperApps.neverAsk.saveToDisk','application/zip')
 
driver =webdriver.Firefox(firefox_profile=profile)
 
driver.get('http://sahitest.com/demo/saveAs.htm')
driver.find_element_by_xpath('//a[text()="testsaveas.zip"]').click()
sleep(3)
driver.quit()

Firefox需要針對每種檔案型別進行設定

Chrome 檔案下載

Chrome瀏覽器類似,設定其options:

  • download.default_directory:設定下載路徑
  • profile.default_content_settings.popups:設定為 0 禁止彈出視窗

---例項----

# -*- coding: utf-8 -*-

from selenium import webdriver
from time import sleep


options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\\'}
options.add_experimental_option('prefs', prefs)

driver = webdriver.Chrome(executable_path='D:\\chromedriver.exe', chrome_options=options)
driver.get('http://sahitest.com/demo/saveAs.htm')
driver.find_element_by_xpath('//a[text()="testsaveas.zip"]').click()
sleep(3)
driver.quit()

但是,發現在selenium+firefox的配置下並不能生效!於是就在網上繼續找,找到了下面這種方法

新建火狐瀏覽器的profile,設定測試場景的配置,預設自動儲存,直接跳過下載視窗】

步驟:
1、火狐下建立一個新的profile,建立過程參考
建立獨立的Firefox profile
2、啟動新建的profile瀏覽器,讓瀏覽器學習下載的操作(把下載操作的步驟操作一遍,讓瀏覽器的應用程式中出現該型別操作的選擇項)



3、設定指令碼,指令碼設定如下:

fp=webdriver.FirefoxProfile("新建profile的訪問路徑")    #注意是profile路徑,不是bat檔案的路徑,一般位於火狐瀏覽器的資料目錄下  
browser = webdriver.Firefox(fp)     #啟動瀏覽器,載入profile</strong></span></span>
這樣就會自動載入新的profile來執行指令碼.此類方法在火狐上面驗證OK。可以很完美的解決下載彈窗的問題,其他瀏覽器可以先嚐試前一種方法。

宣告:本文的各種解決方案為參考其他網友的文章,本人只是做了整理和記錄。