天天看點

selenium+python自動化77-autoit檔案上傳

關于非input檔案上傳,點上傳按鈕後,這個彈出的windows的控件了,已經跳出三界之外了,不屬于selenium的管轄範圍(selenium不是萬能的,隻能操作web上元素)。autoit工具處理windows的控件視窗是專業的,是以這個需借助AutoIt來解決了。

selenium+python自動化77-autoit檔案上傳

2.下載下傳到本地後傻瓜式安裝,安裝完之後在應用程式找到這個Autoit v3

selenium+python自動化77-autoit檔案上傳

3.AutoIt裡面幾個菜單功能介紹:

SciTE Script Editor 編輯器,在這裡編寫AutoIt腳本

AutoIt Windows Info 元素定位器,用于識Windows控件資訊

Run Script 執行AutoIt腳本

Compile Script to.exe 将AutoIt生成 .exe 可執行檔案

1.先準備好web頁面的環境,以部落格園的上傳圖檔為例:建立部落格>點圖檔上傳>上傳本地圖檔>彈出選擇圖檔界面,在這裡不要動了

selenium+python自動化77-autoit檔案上傳

2.打開 SciTE Script Editor編輯器,開始寫腳本,代碼非常簡單隻有四行

selenium+python自動化77-autoit檔案上傳

3.編輯完成後執行,tools>go ;或者按f5執行,執行完之後就能看到圖檔上傳成功了。

4.autoit幾個常用的文法

WinActivate("title") 聚焦到指定活動視窗

ControlFocus ( "title", "視窗文本", controlID) 設定輸入焦點到指定視窗的某個控件上;

WinWait ( "title" , "視窗文本" , 逾時時間 ) 暫停腳本的執行直至指定視窗存在(出現)為止;

ControlSetText ( "title", "視窗文本", controlID, "新文本" ) 修改指定控件的文本;

Sleep ( 延遲 ) 使腳本暫停指定時間,機關是毫秒;

ControlClick ( "title", "視窗文本", 控件ID , 按鈕 , 點選次數 ) 向指定控件發送滑鼠點選指令;

1.Find Tool 檢視元素屬性,用滑鼠按住Find Tool下的圖示,然後拖拽到你想定位的元素上

selenium+python自動化77-autoit檔案上傳

2.檢視title,title即AutoIt Window Info識别出的Title字段

selenium+python自動化77-autoit檔案上傳

3.檢視controlID,controlID即AutoIt Window Info識别出的Class和Instance的拼接

如這裡的“打開”按鈕的Class屬性是Button,Instance屬性是1,那麼controlID屬性就是Button1
selenium+python自動化77-autoit檔案上傳

1.第三步執行成功後,先把腳本儲存到本地

selenium+python自動化77-autoit檔案上傳

2.在應用程式裡面找到打開Compile Script to.exe工具,将剛才導出的.au3檔案轉化成.exe檔案

selenium+python自動化77-autoit檔案上傳

3.為了驗證這個生成的.exe檔案是有效的,先在cmd去執行一次

直接把生成的這個.exe檔案拽到cmd裡面,回車就能執行了
selenium+python自動化77-autoit檔案上傳

1.把上傳檔案的動作已經弄成了一個.exe的檔案了,接下來用python去執行這個.exe檔案就能實作檔案上傳了

python調用dos,用這個方法os.system("需執行的指令")

1.上面打包的exe檔案把上傳檔案的路徑給寫死了,每次隻能傳固定的那個圖檔,我們實際測試時候希望傳不同的圖檔,這樣就需要參數化檔案路徑了。

想要參數化傳入的參數,可以通過autoit的指令行參數:

在腳本中,可用以下變量擷取指令行參數:

$CmdLine[0] 擷取的是指令行參數的總數,在上例中$CmdLine[0]=3

$CmdLine[1]~$CmdLine[63] 擷取的是指令行參數第1到第63位,這個方式最多隻能擷取63個參數,不過正常情況下是足夠用的

$CmdLineRaw 擷取的是未拆分的所有參數,是一個長字元串,這種情況下不局限與63個參數

2.問題來了,如果想批量上傳圖檔,又如何實作呢??參數化後是不是so easy了。

學習過程中有遇到疑問的,可以加selenium(python+java) QQ群交流:646645429

也可以關注下我的個人微信公衆号:yoyoketang