selenium+python自動化77-autoit檔案上傳【轉載】

來源:互聯網
上載者:User

標籤:css_   上下   圖片上傳   操作   圖片   分享   log   方法   命令列   

前言

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

一、環境準備

1.可以autoit官網上下載,安裝 http://www.autoitscript.com/site/

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

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

  • SciTE Script Editor 編輯器,在這裡編寫AutoIt指令碼
  • AutoIt Windows Info 元素定位器,用於識Windows控制項資訊
  • Run Script 執行AutoIt指令碼
  • Compile Script to.exe 將AutoIt產生 .exe 可執行檔

4.autoit 線上文檔,是中文版http://www.autoitx.com/Doc/

二、指令碼實現

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

2.開啟 SciTE Script Editor編輯器,開始寫指令碼,代碼非常簡單只有四行

WinActivate("檔案上傳");ControlSetText("檔案上傳", "", "Edit1", "D:\1.png" );Sleep(2000);ControlClick("檔案上傳", "", "Button1");

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下的表徵圖,然後拖拽到你想定位的元素上

2.查看title,title即AutoIt Window Info識別出的Title欄位

3.查看controlID,controlID即AutoIt Window Info識別出的Class和Instance的拼接

如這裡的“開啟”按鈕的Class屬性是Button,Instance屬性是1,那麼controlID屬性就是Button1

五、匯出為exe檔案

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

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

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

直接把產生的這個.exe檔案拽到cmd裡面,斷行符號就能執行了

六、python執行

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

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

# coding:utf-8from selenium import webdriverimport timeimport os# 載入設定檔實現免登入profileDir = r‘C:\Users\Gloria\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default‘  # 你自己電腦的設定檔路徑,不要抄我的profile = webdriver.FirefoxProfile(profileDir)driver = webdriver.Firefox(profile)driver.implicitly_wait(30)driver.get("http://www.cnblogs.com/yoyoketang/")driver.find_element_by_link_text("新隨筆").click()time.sleep(3)# 點開編輯器圖片driver.find_element_by_css_selector("img.mceIcon").click()time.sleep(3)# 定位所有iframe,取第二個iframe = driver.find_elements_by_tag_name(‘iframe‘)[1]# 切換到iframe上driver.switch_to_frame(iframe)# 點開檔案上傳按鈕driver.find_element_by_name(‘file‘).click()# 執行autoit上傳檔案os.system("C:\Users\Gloria\Desktop\sendjpg.exe")  # 你自己本地的這個.exe檔案絕對路徑
七、autoit命令列參數

1.上面打包的exe檔案把上傳檔案的路徑給寫死了,每次只能傳固定的那個圖片,我們實際測試時候希望傳不同的圖片,這樣就需要參數化檔案路徑了。
想要參數化傳入的參數,可以通過autoit的命令列參數:

    myProg.exe param1 “This is a string parameter” 99

在指令碼中,可用以下變數擷取命令列參數:

$CmdLine[0] ; = 3$CmdLine[1] ; = param1$CmdLine[2] ; = "This is a string parameter"$CmdLine[3] ; = 99$CmdLineRaw ; = ‘param1 "This is a string parameter" 99‘

$CmdLine[0] 擷取的是命令列參數的總數,在上例中$CmdLine[0]=3
$CmdLine[1]~$CmdLine[63] 擷取的是命令列參數第1到第63位,這個方式最多隻能擷取63個參數,不過正常情況下是足夠用的
$CmdLineRaw 擷取的是未拆分的所有參數,是一個長字串,這種情況下不局限與63個參數

WinActivate("檔案上傳");ControlSetText("檔案上傳", "", "Edit1", $CmdLine[1] );Sleep(2000);ControlClick("檔案上傳", "", "Button1");

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

selenium+python自動化77-autoit檔案上傳【轉載】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.