UI自動化學習筆記- Selenium操作檔案上傳下載

本該是你發表於2021-08-09

1、Selenium實現檔案上傳

檔案上傳在Web頁面上是非常常見的一個操作,一般頁面中的檔案上傳按鈕分為兩種,一種是input標籤,另一種是非input標籤

1.1 方式一:input標籤上傳檔案

這種方式的檔案上傳比較簡單,可以定位到 input 標籤後,直接 .send_keys() 就ok了

示例程式碼

# 1.匯入selenium
from selenium import webdriver

# 2.開啟瀏覽器
driver = webdriver.Chrome()

# 3.開啟註冊A頁面(頁面地址根據自己的需要修改)
url = "xxx"
driver.get(url)
driver.maximize_window()

# 4.定位上傳檔案按鈕
upfile = driver.find_element_by_name("upfile")

# 5.使用send_keys方法上傳檔案
upfile.send_keys(r"C:\Users\L\Desktop\測試上傳檔案.txt")

# 6.關閉瀏覽器
driver.quit()
1.2 方式二:非input檔案上傳

這種非input的檔案上傳實現起來相對來說要複雜一些,可以藉助 autoit 工具或者 SendKeys 第三方庫來實現。在上傳的過程當中一般要開啟系統的Windows視窗,從視窗選擇本地檔案新增。

# 開啟上傳網站
driver.get("https://tinypng.com/")
paths = Path.cwd().parent

# 觸發檔案上傳的操作
driver.find_element_by_css_selector("section.target").click()

time.sleep(2)
# 一級頂層視窗
dialog = win32gui.FindWindow("#32770", "開啟")

# 二級視窗
comboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)

# 三級視窗
comboBox = win32gui.FindWindowEx(comboBoxEx32, 0, "ComboBox", None)

# 四級視窗 -- 檔案路徑輸入區域
edit = win32gui.FindWindowEx(comboBox, 0, "Edit", None)

# 二級視窗 -- 開啟按鈕
button = win32gui.FindWindowEx(dialog, 0, "Button", None)

# 1、輸入檔案路徑
filepath = f"{paths}\\resources\\11.png"
win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath)

# 2、點選開啟按鈕
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)

2、Selenium實現檔案下載

這裡主要講一下Chrome瀏覽器檔案下載

示例

首先需要設定option:

(1)download.default_directory:設定下載路徑

(2)profile.default_content_settings.popups:設定為0 禁止彈出視窗

# 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()

相關文章