前言:這個是在悠悠博客中學到的方法,本來不打算記錄的,但是由於編碼時很粗心,報錯解決了一個多小時,所以還是記錄下,以便記憶更深刻。
適用場合:非input文件上傳
1、環境准備
在官網上下載autoit工具並安裝(根據引導安裝即可),下載地址: https://www.autoitscript.com/site/autoit/downloads/
2、在開始菜單中查看安裝成功后的文件
3、AutoIt里面幾個菜單功能介紹:
- SciTE Script Editor 編輯器,在這里編寫AutoIt腳本
- AutoIt Windows Info 元素定位器,用於識Windows控件信息
- Run Script 執行AutoIt腳本
- Compile Script to.exe 將AutoIt生成 .exe 可執行文件
4、定位本地文件所在位置
操作步驟:
(1)點擊上傳按鈕
(2)進入要上傳文件所在的位置
(3)在開始中打開AutoIt Windows Info 工具
(4)拖動Finder Tool 至本地彈框的文件名輸入框中,AutoIt Windows Info中顯示如下圖:
(5)拖動Finder Tool 至本地彈框的打開按鈕上,AutoIt Windows Info中顯示如下圖:
5、在開始中打開 SciTE Script Editor編輯器,編寫執行腳本
autoit幾個常用的語法:
- WinActivate("title") 聚焦到指定活動窗口
- ControlFocus ( "title", "窗口文本", controlID) 設置輸入焦點到指定窗口的某個控件上;
- WinWait ( "title" , "窗口文本" , 超時時間 ) 暫停腳本的執行直至指定窗口存在(出現)為止;
- ControlSetText ( "title", "窗口文本", controlID, "新文本" ) 修改指定控件的文本;
- Sleep ( 延遲 ) 使腳本暫停指定時間,單位是毫秒;
- ControlClick ( "title", "窗口文本", 控件ID , 按鈕 , 點擊次數 ) 向指定控件發送鼠標點擊命令;
命令行參數:
- $CmdLine[0] 獲取的是命令行參數的總數
- $CmdLine[1]~$CmdLine[63] 獲取的是命令行參數第1到第63位,這個方式最多只能獲取63個參數,不過正常情況下是足夠用的
- $CmdLineRaw 獲取的是未拆分的所有參數,是一個長字符串,這種情況下不局限與63個參數
注意:編寫執行腳本時一定帶上instance這個參數,否則無法跳到要上傳的文件路徑!!!
將以上編寫好的執行腳本另存為 .au3 結尾的文件
6、將執行腳本轉換為 .exe結尾的文件
在開始菜單中打開 這個工具,選擇執行腳本和exe文件保存路徑,點擊“convert”按鈕即可
下圖為生成的 .exe 文件
+ R 快捷鍵打開cmd命令窗口,拖入剛轉化的exe文件及要上傳的文件路徑(兩個路徑間有個空格),回車,如下圖則執行成功
7、代碼編寫
from selenium import webdriver from common.base import Base import time import os base_url = "url地址"
class ImportRisk(Base): def importRisk(self): '''風險模板導入''' node = ("css selector", ".bp3-tree-node-content.bp3-tree-node-content-0.sc-eNQAEJ.geXpPO") self.move_to_element(node) # 鼠標右鍵
self.move_context_click(node) # 選擇導入
menu = ("css selector",".bp3-menu>li:nth-child(1)") self.click(menu) #點擊上傳按鈕
upfile = ("css selector",".bp3-file-upload-input.bp3-file-upload-input-custom-text") self.click(upfile) time.sleep(2) #上傳文件
file_path = "D:\EprosliteUI\common\風險模板.xls" os.system(r"D:\EprosliteUI\common\upfile.exe %s" %file_path ) time.sleep(5) #點擊導入
submit = ("name","Submit") self.click(submit) if __name__ == '__main__': driver = webdriver.Chrome() driver.get(base_url) driver.maximize_window() time.sleep(2) risk = ImportRisk(driver) risk.importRisk() time.sleep(2) driver.quit()
附:文章參考及批量上傳地址:https://www.cnblogs.com/yoyoketang/p/7653221.html