目錄
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("https://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.學習目標
瞭解使用谷歌瀏覽器實現檔案下載
2.操作步驟(
2.1 建立谷歌瀏覽器載入項物件
webdriver.ChromeOptions()
2.2 定義Chrome瀏覽器載入項引數
2.3 將載入項引數新增到谷歌瀏覽器載入項物件中
options.add_experimental_option('prefs', prefs)
2.4 建立Chrome瀏覽器物件,並把自定義載入項物件儲存到瀏覽器物件中
2.5 訪問下載網站
2.6 進行下載
3.需求
使用谷歌瀏覽器實現檔案下載
"""
# 1.匯入selenium
from selenium import webdriver
from time import sleep
# 2. 建立谷歌瀏覽器載入項物件
options = webdriver.ChromeOptions()
# 3. 定義載入項引數
prefs = {'profile.default_content_settings.popups': 0,
'download.default_directory': 'f:\\'}
# 4.將載入項引數新增到谷歌瀏覽器載入項物件中
options.add_experimental_option('prefs', prefs)
# 5. 建立瀏覽器物件,並新增載入項物件
driver = webdriver.Chrome(options=options)
# 6. 方位下載頁面
driver.get('https://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操作元素的基礎操作,在實際工作中需要對這些操作進行封裝,來解決實際工作中的問題。