『心善淵』Selenium3.0基礎 — 19、使用Selenium操作文件的上傳和下載
- 2021 年 7 月 8 日
- 筆記
- 測試基礎必會技能 - Selenium測試框架
1、Selenium實現文件上傳
(1)頁面中的文件上傳說明
文件上傳是Web頁面上很常見的一個功能,用腳本去實現文件上傳很簡單。
一般場景:在頁面中的上傳按鈕是一個<input>
標籤,其中type
屬性為type="file"
,這種可以用Selenium提供的send_keys()
方法輕鬆解決。
(2)文件上傳示例
頁面程式碼片段:
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
</head>
<body>
<fieldset>
<legend>文件上傳</legend>
<form action="">
<input type="file" name="upfile" value="">
</form>
</fieldset>
</fieldset>
</body>
</html>
腳本程式碼:
"""
1.學習目標:
掌握文件上傳功能操作
2.操作步驟
此上傳方式適用大多數情況。
上傳文件標籤為input類型,並且type=file時可使用此方式上傳。
使用send_keys(「需要上傳的文件的路徑")
3.需求
在頁面中,實現文件上傳
4.總結
4.1 在上傳文件的時候,對文件類型,大小等做充分驗證。
4.2 在執行上傳文件腳本時,加一定的等待時間,sleep()。
4.3 大多數上傳文件都是input類型並且type=file。
4.4 對於非input標籤的上傳文件功能,使用Sendkeys庫來實現。
"""
# 1.導入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打開瀏覽器
driver = webdriver.Chrome()
# 3.打開註冊A頁面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)
sleep(2)
# 4.上傳文件
# 4.1 定位上傳文件按鈕
upfile = driver.find_element_by_name("upfile")
# 4.2 使用send_keys方法上傳文件
upfile.send_keys(r"C:\Users\L\Desktop\測試上傳文件.txt")
sleep(5)
# 5.關閉瀏覽器
driver.quit()
提示:
另外一種非
<input>
標籤的上傳文件按鈕,實現起來比較困難,可以藉助autoit
工具或者SendKeys
第三方庫來實現。上傳過程一般要打開一個系統的windows窗口,從窗口選擇本地文件添加。所以,一般會卡在如何操作本地windows窗口。
(3)總結
其實上傳本地文件沒我們想的那麼複雜,只要定位上傳按鈕,通send_keys()
方法添加本地文件路徑就可以了。絕對路徑和相對路徑都可以,關鍵是上傳的文件存在。
小練習:使用郵箱給其他人發送一封代附件的郵件。
即:添加附件,就是上傳文件操作;郵件正文的操作就是操作
iframe
元素。
2、Selenium實現文件下載
使用selenium.webdriver
實現下載文件功能,只需要配置一下瀏覽器的參數即可實現。
(1)Firefox瀏覽器文件下載
1)操作步驟:
- 對於Firefox,需要我們設置其
Profile
:通過FirefoxProfile()
方法創建一個Firefox自定義配置資訊實例。 - 設置Firefox瀏覽器下載相關的自定義配置資訊到
Profile
實例中。 - 啟動Firefox,並把自定義配置
Profile
實例存儲到瀏覽器對象中。 - 訪問下載網站,進行下載。
2)文件下載示例:
需求:下載Firefox瀏覽器驅動文件
"""
1.學習目標
了解使用火狐瀏覽器實現文件下載
2.操作步驟(語法)
2.1 創建Firefox瀏覽器配置資訊對象
webdriver.FirefoxProfile()
2.2 設置Firefox瀏覽器下載相關的自定義配置資訊
2.3 創建Firefox瀏覽器對象,並把自定義配置資訊存儲到瀏覽器對象中
2.4 訪問下載網站
2.5 進行下載
3.需求
使用火狐瀏覽器實現文件下載
"""
# 1.導入selenium
from selenium import webdriver
from time import sleep
# 2.創建Firefox瀏覽器配置資訊對象,用於存放自定義配置
profile = webdriver.FirefoxProfile()
# 3. 配置profile下載相關資訊
"""
3.1 指定自定義下載路徑,默認只會自動創建一級目錄,
如果指定了多級不存在的目錄,將會下載到默認路徑,
如下就是定義了多級不存在的目錄,文件就下載到了火狐瀏覽器的默認下載目錄中
我的火狐默認下載路徑:C:\\Users\\L\\Downloads
"""
profile.set_preference('browser.download.dir', 'f:\\Download\\123\\456')
"""
3.2 將browser.download.folderList設置為:
設置成 0 表示下載到桌面
設置成 1 表示下載到瀏覽器默認下載路徑
設置成 2 表示使用自定義下載路徑
和上面browser.download.dir配合使用,如果設置成0和1
上面的配置基本無用。
"""
profile.set_preference('browser.download.folderList', 2)
"""
3.3 browser.helperApps.alwaysAsk.force:
對於未知的 MIME 類型文件會彈出窗口讓用戶處理,
默認值為true,設定為False,
表示不會記錄打開未知 MIME 類型文件的方式
"""
profile.set_preference("browser.helperApps.alwaysAsk.force", False)
"""
3.4 在開始下載時是否顯示下載管理器
設定為true,則在用戶啟動下載的時候顯示Firefox瀏覽器的文件下載窗口
否則不顯示文件下載窗口。
"""
profile.set_preference('browser.download.manager.showWhenStarting', False)
"""
3.5 設定為 False 會把下載框進行隱藏
"""
profile.set_preference("browser.download.manager.useWindow", False)
"""
3.6 默認值為 true,設定為 False 表示不獲取焦點
"""
profile.set_preference("browser.download.manager. focusWhenStarting", False)
"""
3.7 下載.exe文件彈出警告,
默認值是 true,設定為False 則不會彈出警告框
"""
profile.set_preference("browser.download.manager.alertOnEXEOpen", False)
"""
3.8 browser.helperApps.neverAsk.openFile:
表示直接打開下載文件,不顯示確認框
默認值為空字元串,下行程式碼行設定了多種文件的 MIME類型.
例如:
application/exe,表示.exe類型的文件,
application/excel表示 Excel 類型的文件
"""
profile.set_preference("browser.helperApps.neverAsk.openFile", "application/zip")
"""
3.9 對所給出文件類型不再彈出框進行詢問,直接保存到本地磁碟
"""
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip, application/octet-stream')
"""
其他可選文件類型:
application/a-gzip
application/x-gzip,
application/zip,
application/x-gtar,
text/plain,
application/x-compressed,
application/octet-stream,
application/pdf
"""
"""
3.10 browser.download.manager.showAlertOnComplete:
設定下載文件結束後是否顯示下載完成提示框,
默認為true,設定為False,
表示下載完成後不顯示下載完成提示框
"""
profile.set_preference("browser.download.manager. showAlertOnComplete", False)
"""
3.11 browser.download.manager.closeWhenDone:
設定下載結束後是否自動關閉下載框,
默認值為true,設定為False,
表示不關閉下載管理器.
"""
profile.set_preference("browser.download.manager.closeWhenDone", False)
# 4. 創建瀏覽器對象
# 啟動瀏覽器時,通過firefox_profile參數
# 將自動以配置添加到FirefoxProfile對象中
driver = webdriver.Firefox(firefox_profile=profile)
# 5. 訪問Firefox瀏覽器驅動文件下載網址
driver.get("//npm.taobao.org/mirrors/geckodriver/v0.20.0/")
sleep(3)
# 6. 定位下載鏈接,並點擊下載
file = driver.find_element_by_link_text("geckodriver-v0.20.0-win64.zip")
file.click()
sleep(3)
# 7.關閉瀏覽器
driver.quit()
(2)Chrome瀏覽器文件下載
1)示例:
Chrome瀏覽器,設置其options
:
download.default_directory
:設置下載路徑。profile.default_content_settings.popups
:設置為0禁止彈出窗口。
"""
1.學習目標
了解使用Google瀏覽器實現文件下載
2.操作步驟(
2.1 創建Google瀏覽器載入項對象
webdriver.ChromeOptions()
2.2 定義Chrome瀏覽器載入項參數
2.3 將載入項參數添加到Google瀏覽器載入項對象中
options.add_experimental_option('prefs', prefs)
2.4 創建Chrome瀏覽器對象,並把自定義載入項對象存儲到瀏覽器對象中
2.5 訪問下載網站
2.6 進行下載
3.需求
使用Google瀏覽器實現文件下載
"""
# 1.導入selenium
from selenium import webdriver
from time import sleep
# 2. 創建Google瀏覽器載入項對象
options = webdriver.ChromeOptions()
# 3. 定義載入項參數
prefs = {'profile.default_content_settings.popups': 0,
'download.default_directory': 'f:\\'}
# 4.將載入項參數添加到Google瀏覽器載入項對象中
options.add_experimental_option('prefs', prefs)
# 5. 創建瀏覽器對象,並添加載入項對象
driver = webdriver.Chrome(options=options)
# 6. 方位下載頁面
driver.get('//npm.taobao.org/mirrors/chromedriver/80.0.3987.106/')
# 7. 點擊下載
driver.find_element_by_link_text("chromedriver_win32.zip").click()
sleep(3)
# 8.關閉瀏覽器
driver.quit()
2)說明:Chrome其他常用啟動參數
需要用的時候直接添加到配置資訊中。
- 取消瀏覽器下載時保存路徑彈框
"download.prompt_for_download": False, "download.directory_upgrade": True, """ 'profile.default_content_settings.popups': 0 是禁止彈出所有窗口 """
- 是否提示安全警告
# 下載xml文件時,會彈出「此文件類型可能會損害您的電腦」的提示。 # 而不顯示消息警告,需要添加下面配置,使用Selenium chromedriver禁用此彈出窗口。 "safebrowsing.enabled": True
提示:以上說明的都是Selenium操作元素的基礎操作,在實際工作中需要對這些操作進行封裝,來解決實際工作中的問題。