UI自動化學習筆記- Selenium操作檔案上傳下載
阿新 • • 發佈:2021-08-06
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()