<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何用 Python 實(shí)現(xiàn)電腦端自動(dòng)化?

          共 5556字,需瀏覽 12分鐘

           ·

          2021-08-30 08:38

          △點(diǎn)擊上方“Python貓”關(guān)注 ,回復(fù)“1”領(lǐng)取電子書(shū)

          1. 前言

          大家好,我是貓哥!

          一提到自動(dòng)化,可能大家想到的是 App 端的 Appium、Airtest、AutoJS,亦或是 Selenium、Puppeteer、Cypress 等 Web 端的自動(dòng)化框架

          本篇文章,將和大家聊聊 PC 端的自動(dòng)化工具 - WinAppDriver

          2. 準(zhǔn)備

          WinAppDriver,全稱(chēng)為 Windows Application Driver,它是 Windows 上一個(gè)類(lèi)似 Selenium 的 UI 自動(dòng)化驅(qū)動(dòng)服務(wù)框架

          它支持 Appium,可以使用 Appium-Python-Client 依賴(lài)庫(kù)完成對(duì) Windows 桌面程序的自動(dòng)化操作

          項(xiàng)目地址:https://github.com/Microsoft/WinAppDriver

          需要注意的是,要使用 WinAppDriver 服務(wù)框架完成 Windows 的自動(dòng)化,需要滿(mǎn)足 Windows10 或 Windows Server 2016 以上系統(tǒng)

          另外,它支持的應(yīng)用程序包含:

          • UWP  -  Universal Windows Platform

          • WinForms  -  Windows Forms

          • WPF  -  Windows Presentation Foundation

          • Win32  -  Classic Windows

          在實(shí)現(xiàn)之前,我們需要做好以下準(zhǔn)備工作

          2-1  開(kāi)啟「 開(kāi)發(fā)者模式 

          關(guān)鍵字搜索「 開(kāi)發(fā)者設(shè)置 」,選擇開(kāi)啟「 開(kāi)發(fā)者模式 」

          2-2  安裝窗口組件元素識(shí)別工具

          常用的 2 種窗口元素識(shí)別工具為:inspect.exe、FlaUInspect

          其中

          作為官方的組件元素識(shí)別工具,inspect.exe 集成于 Windows SDK

          如果本地不存在該文件,可以通過(guò)下面鏈接進(jìn)行安裝

          https://download.microsoft.com/download/4/d/2/4d2b7011-606a-467e-99b4-99550bf24ffc/windowssdk/winsdksetup.exe

          相比 inspect.exe,FlaUInspect 界面更簡(jiǎn)潔,功能更易用( 推薦 )

          項(xiàng)目地址:https://github.com/FlaUI/FlaUInspect

          2-3  安裝 WinAppDriver

          通過(guò)下面鏈接下載 WinAppDriver 應(yīng)用程序,并在本地運(yùn)行起來(lái)

          https://github.com/Microsoft/WinAppDriver/releases

          2-4  搭建 Appium 環(huán)境

          這部分內(nèi)容涉及 NodeJS 安裝及 Appium-Server 環(huán)境的搭建

          可以參考:https://www.cnblogs.com/amoyshmily/p/10500687.html

          2-5  安裝依賴(lài)

          最后安裝 Python 依賴(lài)庫(kù) Appium-Python-Client

          # 安裝依賴(lài) Appium-Python-Client
          pip3 install Appium-Python-Client

          3. 實(shí)戰(zhàn)一下

          我們以操作 PC 端的微信為例,聊聊自動(dòng)化的常見(jiàn)步驟

          首先,我們?cè)诒緳C(jī)打開(kāi) WinAppDriver 服務(wù),讓它在后臺(tái)運(yùn)行

          然后,我們使用 Python 編寫(xiě)自動(dòng)化腳本

          通過(guò) ip 地址、端口號(hào)及 PC 版微信的絕對(duì)路徑,使用 Appium 打開(kāi)微信

          import time, os
          from appium import webdriver
          from selenium.webdriver import ActionChains
          from selenium.webdriver.common.keys import Keys
          from time import sleep

          class Auto():

              def open_weixin(self, host='localhost', port=4723):
                  # 打開(kāi)WinAppDriver服務(wù)
                  # 注意:如果手動(dòng)開(kāi)啟,則可以注釋掉
                  # os.system(r'start "" /d "C:\Program Files\Windows Application Driver\"  "WinAppDriver.exe"')

                  # 配置信息
                  # 包含:平臺(tái)名、系統(tǒng)、應(yīng)用程序絕對(duì)路徑
                  desired_caps = {'platformName''Windows''deviceName''WindowsPC',
                                  'app'r"D:\Program Files (x86)\Tencent\WeChat\WeChat.exe"}

                  try:
                      # 連接WinAppDriver服務(wù),打開(kāi)目標(biāo)軟件
                      self.driver = webdriver.Remote('http://{}:{}'.format(host, port), desired_caps)
                  except Exception as e:
                      raise AssertionError(e)

          接著,通過(guò)「 組件元素識(shí)別工具 」拿到界面元素的屬性值,執(zhí)行常見(jiàn)的點(diǎn)擊、移動(dòng)、滑動(dòng)等操作

          比如:點(diǎn)擊「 文件傳輸助手 」,發(fā)送一條信息

          # 給文件傳輸助手發(fā)送一條信息
          def send_msg(self, element_name, msg):
              """
              :param element_name:元素name值
              :param msg:
              :return:
              """

              # 通過(guò)name屬性,找到目標(biāo)元素
              chat_element = self.weixin_driver.find_element_by_name(target_name)

              # 點(diǎn)擊元素,進(jìn)入聊天界面
              chat_element.click()

              # 找到輸入框,并輸入
              self.weixin_driver.find_element_by_name("輸入").send_keys(msg)

              # 點(diǎn)擊右下角的發(fā)送,發(fā)送消息出去
              self.weixin_driver.find_element_by_name("發(fā)送(S)").click()

          需要注意的是,如果涉及界面的滑動(dòng),可以使用「 ActionChains 」移動(dòng)鼠標(biāo),然后使用 win32api 和 win32con 模擬屏幕滑動(dòng)即可

          import win32api
          import win32con
          from appium import webdriver
          from selenium.webdriver import ActionChains

          # 模擬屏幕滑動(dòng)
          # 1、移動(dòng)到某個(gè)元素區(qū)域
          ActionChains(self.weixin_driver).move_to_element(
               self.weixin_driver.find_element_by_name("element_name")).perform()

          # 2、滑動(dòng)界面
          # 比如,向上滾動(dòng),模擬滑動(dòng)
          win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 00-500)

          完成自動(dòng)化操作后,就可以主動(dòng)釋放資源、關(guān)閉 WinAppDriver 服務(wù)

          # 釋放資源及關(guān)閉服務(wù)
          def tearDownFunc(self):
              print("準(zhǔn)備退出")
              sleep(2)

              # 1、釋放資源
              self.weixin_driver.quit()

              # 2、關(guān)閉WinAppDriver應(yīng)用程序
              os.system(' @taskkill /f /im WinAppDriver.exe')

          4. 最后

          在實(shí)際使用過(guò)程中,可能會(huì)遇到復(fù)雜的桌面應(yīng)用程序,這時(shí)我們可以通過(guò)打印驅(qū)動(dòng)對(duì)象的「 page_source」元素控制樹(shù)值,以此來(lái)幫助我們進(jìn)行快速定位元素,進(jìn)而完善自動(dòng)化腳本。

          Python貓技術(shù)交流群開(kāi)放啦!群里既有國(guó)內(nèi)一二線大廠在職員工,也有國(guó)內(nèi)外高校在讀學(xué)生,既有十多年碼齡的編程老鳥(niǎo),也有中小學(xué)剛剛?cè)腴T(mén)的新人,學(xué)習(xí)氛圍良好!想入群的同學(xué),請(qǐng)?jiān)诠?hào)內(nèi)回復(fù)『交流群』,獲取貓哥的微信(謝絕廣告黨,非誠(chéng)勿擾!)~


          還不過(guò)癮?試試它們




          Python 數(shù)值中的下劃線是怎么回事?

          pypy 真的能讓 Python 比 c 還快么?

          分享 8 款 Redis 可視化工具

          解開(kāi) Python 中 self 的四個(gè)秘密!

          這有 73 個(gè)例子,徹底掌握 f-string 用法!

          Python 之父為什么嫌棄 lambda 匿名函數(shù)?


          如果你覺(jué)得本文有幫助
          請(qǐng)慷慨分享點(diǎn)贊,感謝啦
          瀏覽 84
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中国一级黄色毛片 | 亚洲清晰视频 | 亚洲欧美性爱视频 | 国产免费自拍视频 | 三级久久电影网址 |