Autoit 使用


一、Autoit 上傳文件、

1.常用語法

- WinActivate("title")         聚焦到指定活動窗口
 - ControlFocus ( "title", "窗口文本", controlID)   設置輸入焦點到指定窗口的某個控件上;
 - WinWait ( "title" , "窗口文本" , 超時時間 )  暫停腳本的執行直至指定窗口存在(出現)為止;
 - ControlSetText ( "title", "窗口文本", controlID, "新文本" )   修改控件的文本,如選擇文件
 - Sleep ( 延遲 )   使腳本暫停指定時間,單位是毫秒;
 - ControlClick ( "title", "窗口文本", 控件ID , 按鈕 , 點擊次數 )   向指定控件發送鼠標點擊命令;

 

2.windows窗口定位

  a. 打開 AutoIt Window Info (x64),

 

   b. 定位工具界面如下:

  

 

   c. 拖動finder tools到windows 窗口,可定位元素

   在autoit工具的control欄可查看,元素信息

  

 

 3  編寫腳本

  打開SciTE Script Editor編寫腳本

  

 

   

  WinActivate("打開")
  ControlSetText("打開","","Edit1","C:\Users\wang1\Desktop\test.docx")
  Sleep(1000)
  ControlClick("打開","","Button1");

  編輯完后運行(菜單Tools --go),可看到文件上傳成功

  注意需要先打開如下圖的文件選擇框,再運行腳本或exe文件,才能成功

  

 

 

4 將腳本導出為.exe文件

  a. 將編寫好的腳本保存

  b.  右鍵腳本,選擇 compile Script,即可生成exe文件

    

 

 二、文件上傳的參數化

  可通過autoit的命令行參數,實現參數化

      aa.exe param1 “This is a string parameter”  666

    aa.exe: 生成的可執行autoit的exe文件

    param1 “This is a string parameter”  666: 傳入三個參數,參數1: param1 ,參數2:“This is a string parameter”  ,參數3: 666

  注意:如果傳入的參數有空格,則參數必須用雙引號括起來

  aa.exe param1 “This is a string parameter”  666:

    $CmdLine[0] : 表示傳入的參數的個數(不包括腳本文件名),本例中值為3
    $CmdLine[1] : 表示第 1 個參數,本例中表示 param1
    $CmdLine[2] : 表示第 2 個參數,本例中表示 “This is a string parameter”
    ...
    我們常用 $CmdLine[$CmdLine[0]] 來表示最后一個參數...

  除了$CmdLine之外,還有一個變量叫做 $CmdLineRaw,它保存着完整的未被拆分的命令行語句,對於上面這個例子
  $CmdLineRaw 等價於..aa.exe param1 “This is a string parameter”  666

 

  將以下腳本保存為exe文件,在cmd下執行該文件

 WinActivate("打開")
 ControlSetText("打開","","Edit1", $CmdLine[1])
 Sleep(500)
 ControlClick("打開","","Button1");

 

命令運行前:

 

 

 

 

 命令運行后:

 

 三 python 運行exe文件

    def upload_agreement_copy(self):
        """
        # 這是第二種,通過walk函數,返回root(路徑),dirs(子目錄),files(文件名)三個元組,本例中我們用walk來遍歷
        返回值:函數返回一個元組,含有三個元素。這三個元素分別是:每次遍歷的路徑名、路徑下子目錄列表、目錄下文件列表。

        # 先要遍歷文件夾
        path = r'd:\1'  # 定義路徑,OS提供了兩種遍歷文件夾的辦法
        # files1 = os.listdir(path)
        # # 這是第一種,會遍歷路徑下所有文件包括子文件夾,結果以列表給出,但僅僅能給出文件名/子文件名,無法對二者進行區分
        # # for file in files1:
        # #     print(os.path.join(path,file))
        files2 = os.walk(path)
        """
        file_path = self.sign_contracts.get_ini_value("sign_contracts_v4.ini", "basic","agreement_copy_file")
        css_agreement_copy = self.sign_contracts.get_ini_value("sign_contracts_v4.ini", "basic","agreement_copy")
        js_agreement_copy_browse = self.sign_contracts.get_ini_value("sign_contracts_v4.ini", "basic","js_agreement_copy_browse")

        doc_list = []
        for root, dirs, files in os.walk(file_path):
            for doc in files:
                if doc.endswith(".docx") or doc.endswith(".doc"):
                    doc_file_path = os.path.join(root, doc)
                    doc_list.append(doc_file_path)
        choice = random.choice(doc_list)
        self.driver.click(css_agreement_copy)
        self.driver.executeJS(js_agreement_copy_browse)
        time.sleep(1.5)

        #方式一:全路徑運行
        # os.system(r"E:\HP\PycharmProjects\JDMerchant\config\upload_file.exe %s"%choice)

        #方式二
        exe_file = self.sign_contracts_v4_config.get_file_path("upload_file.exe")
        #只有這種試才能運行成功
        os.system("%s %s"%(exe_file,choice))
        log.info("輸入的agreement_copy值為:" + choice)
        time.sleep(self.time_wait_upload)

 

 

 

 

 

  

  

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM