1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        解放雙手|利用 PyAutoGUI 快速構(gòu)建自動化操作腳本

        共 4069字,需瀏覽 9分鐘

         ·

        2021-05-24 19:20

        ↑↑↑關(guān)注后"星標"簡說Python

        人人都可以簡單入門Python、爬蟲、數(shù)據(jù)分析
         簡說Python推薦 
        來源:早起Python
        作者:大奎

        一、背景

        大家好,我是老表,

        我們經(jīng)常遇到需要進行大量重復操作的時候,比如網(wǎng)頁上填表,對 web 版本 OA 進行操作,自動化測試或者給新系統(tǒng)首次添加數(shù)據(jù)等。這些操作的特點往往是:數(shù)據(jù)同構(gòu),大多是已經(jīng)有了的結(jié)構(gòu)化數(shù)據(jù);操作比較呆板,都是同一個流程的點擊、輸入;數(shù)據(jù)量大,極大消耗操作人精力。

        那么能不能自動化呢?

        二、自動化的方案

        如果你在 web 上進行操作, Python 的 Selenium 可以滿足要求。如果需要對 GUI 界面進行操作,你恐怕得試驗下“按鍵精靈”能不能滿足要求。對新系統(tǒng)添加初始數(shù)據(jù),SQL 導出導入是最高效的方式,不過可能需要進行一些較復雜的處理。

        曾經(jīng)多次遇到要求一條條手動輸入舊數(shù)據(jù)的系統(tǒng)升級活動。

        但以上都存在一些問題, Selenium 比較復雜,按鍵精靈功能上不太完善, SQL 需要一定的知識基礎(chǔ)。那么這里推薦一個更好的解決方案:PyAutoGUI

        其實 PyAutoGUI 最主要好處就是比較簡單,應(yīng)急使用的話可以很快構(gòu)建一個可用的自動化操作腳本。畢竟,數(shù)據(jù)處理任務(wù)本來就比較急迫,沒有時間使用復雜知識,來構(gòu)建一個完善的腳本。

        三、思路和知識點

        現(xiàn)在哈來說一下基本思路與相關(guān)知識點

        • PyAutoGUI 就是模擬鍵盤、鼠標在界面上進行操作。
        • 這里只使用它的 click 功能來模擬鼠標點擊。
        • 為了獲取需要點擊的位置,設(shè)計了一個鼠標坐標獲取的程序。
        • ASCII 碼的輸入比較簡單。再解決漢字輸入問題,就使得系統(tǒng)基本可用了。

        本文以在 web 界面批量新增數(shù)據(jù)記錄為例,講解如何自動化操作。這個例子只是演示之用,非常簡單,大家自行理解、遷移。

        四、操作步驟

        4.1 初識 PyAutoGUI

        簡單地說, PyAutoGUI 就是模擬鍵盤、鼠標在界面上進行操作的包。安裝時直接使用如下語句:pip install pyautogui即可。

        編寫一個簡單的測試程序:

        import pyautogui as pag

        pag.PAUSE = 1.5
        pag.click(63,191

        以上程序?qū)霂?,定義了每步驟的暫停時間 1.5 秒(用來留給操作時間),然后在屏幕左起 63 像素,上起 191 像素這個點上點擊了鼠標。

        4.2 坐標系

        PyAutoGUI 默認的坐標系從屏幕左上角開始,x 軸向右增大,y 軸向下增大。所以顯示器上每個點都有自己的位置。

        引申一下,當知道界面上每個按鈕的位置時,點擊這些點,就是執(zhí)行相應(yīng)的操作了。

        當然,這一切的前提是界面不變。大多數(shù)應(yīng)用的界面、按鈕位置不會變來變?nèi)ァH绻阌羞@方面需求,可以參考下 locateOnScreen() 函數(shù)。這個函數(shù)根據(jù)你提供的圖片,在屏幕上找到像素匹配的地方。這樣就不怕按鈕動來動去了。

        為了獲取屏幕的坐標系,寫了一個簡單的程序,用來獲取鼠標在屏幕上的坐標。大家可以自行下載運行。

        import pyautogui as pag 
        import os 

        try:
            while True:
                os.system('cls')
                a = '%4d,%4d'%pag.position()
                print(a)
        except Exception as e:
            print(e) 

        運行以上程序,移動鼠標到各個按鈕上,就可以看到相應(yīng)的坐標。

        4.3 點擊

        PyAutoGUI 的點擊很簡單:

        pyautogui.click(x=None, y=None, clicks=1, interval=0.0, button='left', duration=0.0)

        其中x,y是坐標,clicks 是點擊次數(shù),interval 是點擊間隔,button 指代三個鼠標按鈕的哪一個,duiation 是點擊之間的間隔。

        寫如下程序,來進行任務(wù)、時間和新建按鈕之間的跳轉(zhuǎn)。

        pag.click(63,191)
        pag.click(328,191)
        pag.click(384,461)
        pag.click(374,191)

        4.4 輸入

        輸入 ASCII 字符和鍵盤擊鍵、熱鍵分別如下:

        • 輸入 ASCII 字符串是typewrite(message='test message.',interval=0.5)
        • 擊鍵是press('esc')
        • 按下是KeyDown('ctrl')
        • 松開是KeyUp('ctrl')
        • 組合鍵是hotkey('ctrl','v')。

        至于漢字,稍微復雜點。

        4.5 漢字輸入

        涉及漢字,無法用 ASCII 方案解決,需要導入包 pyperclip ,這個包封裝了系統(tǒng)剪貼板,大家知道怎么回事了吧。

        import pyperclip 

        #以下讀入內(nèi)容,就是把內(nèi)容存入剪貼板。
        pyperclip.copy('需要輸入的漢字')
        #以下輸出內(nèi)容,就是粘貼。
        pag.hotkey('ctrl','v')

        其實就是用 pyperclip 模擬拷貝,用熱鍵 Ctrl+v 粘貼,實現(xiàn)了非 ASCII 字符的輸入。

        4.6 集成起來

        下面,把整個程序集成起來看:

        import pyautogui as pag
        import pyperclip

        pag.PAUSE = 1.5
        pag.FAILSAFE = True

        to = ['測試任務(wù)1','測試任務(wù)2','測試任務(wù)3','測試任務(wù)4','測試任務(wù)5',\
              '測試任務(wù)6','測試任務(wù)7','測試任務(wù)8','測試任務(wù)9','測試任務(wù)10']

        for t in to:
            pag.click(63,191)
            pyperclip.copy(t)
            pag.hotkey('ctrl','v')
            pag.click(328,191)
            pag.click(384,461)
            pag.click(374,191)

        以上程序,根據(jù) to 列表內(nèi)容,把操作分解為點擊和粘貼,實現(xiàn)了自動化操作的目的。大部分編碼都很好理解,能跟鼠標操作一一對應(yīng)起來??赡艽嬖陔y度的是數(shù)據(jù)源的問題,總不能把所有數(shù)據(jù)都寫入程序吧?

        五、數(shù)據(jù)源

        相較于復雜的現(xiàn)實數(shù)據(jù)源,最好的方式就是把數(shù)據(jù)轉(zhuǎn)成 csv 文件。這樣許多 Excel 都可以另存成這個文件,其本身又是基于文本的,可讀可寫,比較方便。其他諸如 SQL 數(shù)據(jù)庫、 XML 數(shù)據(jù)也可以導出轉(zhuǎn)換為 csv 文件。

        假設(shè)現(xiàn)在有了 csv 格式數(shù)據(jù)源 data.csv ,需要這樣操作。

        to = []

        with open('data.csv')as f:
            lines = f.readlines()

        for line in lines:
            to.append(tuple(line.split(',')))

        以上代碼比較簡單,把 csv 中存成的數(shù)據(jù)存儲到 to 這個數(shù)組里,每行數(shù)據(jù)都是一個元組,調(diào)用的時候,如4.6部分代碼所示,使用 for 循環(huán)加上元組下標即可。

        六、總結(jié)

        本文使用 PyAutoGUI 包,對各種鼠標點擊、輸入之類的機械重復操作進行自動執(zhí)行,可大幅提高工作效率。這里只使用了 click 功能和 pyperclip 包的 copy 功能。主要是為了簡化編程,讓大家在緊張和繁瑣的操作中,快速編寫一個自動化執(zhí)行的小腳本。

        -END-


        掃碼即可加老表微信

        觀看朋友圈,獲取最新學習資源

        簡說Python 投稿規(guī)則及激勵

        規(guī)則:必須是自己的原創(chuàng)文章,和Python相關(guān)技術(shù)文章,形式不限制(文字、圖文、漫畫等),字數(shù)800+,在微信公眾號首發(fā)。

        激勵

        根據(jù)文章內(nèi)容 字數(shù) 分為兩種基礎(chǔ)和深度

        基礎(chǔ)文章:每投稿兩篇可以獲得技術(shù)相關(guān)圖書一本 從書單里選

        深度文章:每1k字50-100元(代碼不算)

        額外激勵

        文章閱讀量超過2000,激勵50元

        文章被同量級大號轉(zhuǎn)載次數(shù)5次及以上,激勵100元

        長期投稿作者還有額外激勵,技術(shù)能力可以的,還可以一起做項目,接私活,內(nèi)推等。



        學習更多:
        整理了我開始分享學習筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機器學習等方面,別再說不知道該從哪開始,實戰(zhàn)哪里找了

        點贊”傳統(tǒng)美德不能丟 

        瀏覽 61
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲无码都市激情 | 激情网无码 | 欧美精品第一页在线观看 | 操操操色 | 女人扒开腿让男人桶爽30分钟 | 成人毛片18女人免费看 | 免费看片污网站 | 国产伦子伦一级A片免费看小说 | 成人在线高清无码 | 国产久热精品无码激情亚洲精品 |