Python使用pyautogui控制鼠標鍵盤


官方文檔:https://pyautogui.readthedocs.io/en/latest/#

安裝pyautogui模塊

在 Windows 上,不需要安裝其他模塊。
在 OS X 上,運行 sudo pip3 install pyobjc-framework-Quartz,sudo pip3 install pyobjc-core,然后 sudo pip3 install pyobjc。
在 Linux 上,運行 sudo pip3 install python3-xlib,sudo apt-get install scrot,sudo apt-get install python3-tk,以及 sudo apt-get install python3-dev(Scrot 是PyAutoGUI 使用的屏幕快照程序)。

在這些依賴安裝后,運行 pip install pyautogui (或在 OS X 和 Linux 上運行 pip3),安裝 pyautogui。

注意事項

有時候自動控制鍵盤鼠標的測試程序可能會導致人工無法停止的狀態

通過注銷關閉所有程序

停止失去控制的 GUI 自動化程序,最簡單的方法可能是注銷,這將關閉所有運行的程序。在 Windows 和 Linux 上,注銷的熱鍵是 Ctrl-Alt-Del。在 OS X,熱鍵是 -Shift-Option-Q。通過注銷,你會丟失所有未保存的工作,但至少不需要等計算機完全重啟。

暫停和自動防故障裝置

你可以告訴腳本在每次函數調用后等一會兒,在出問題的時候,讓你有很短的時間窗口來控制鼠標和鍵盤。要做到這一點,將 pyautogui.PAUSE 變量設置為要暫停的秒數。例如,在設置 pyautogui.PAUSE = 1.5 之后,每個 PyAutoGUI 函數調用在執行動作之后,都會等待一秒半。非 PyAutoGUI 指令不會停頓。

pyautogui 也有自動防故障功能。將鼠標移到屏幕的左上角,這將導致 pyautogui產生 pyautogui .FailSafeException 異常。你的程序可以用 try 和 except 語句來處理這個異常,也可以讓異常導致程序崩潰。這兩種情況下,如果你盡可能快地向左上移動鼠標,自動防故障功能都將停止程序。可以設置 pyautogui. FAILSAFE = False,禁止這項功能。

我們導入 pyautogui,並將 pyautogui.PAUSE 設置為 1,即每次函數調用后暫停一秒。將 pyautogui.FAILSAFE 設置為 True,啟動自動防故障功能。

控制鼠標

屏幕的坐標

屏幕坐標

pyautogui.size() 函數返回兩個整數的元組,包含屏幕的寬和高的像素數。

移動鼠標

pyautogui.moveTo(x, y, duration=..)

  • x,y:移動到的坐標位置
  • duration:移動所花費的時間;默認值為0,表示立刻到終點;

獲取鼠標的位置

pyautogui.position()
這個函數返回鼠標當前位置x,y的元組;

小例子:現在鼠標在哪里?

import pyautogui

try:
    print("按Ctrl+C結束:")
    while True:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr, end='')
        print('\b' * len(positionStr), end='', flush=True)
except:
    pass

點擊鼠標

pyautogui.click(x, y, button=.. )

  • x和y為鼠標點擊的坐標
  • button指定是鼠標哪個鍵點擊;默認為鼠標左鍵;可選(left, right, middle)

pyautogui.doubleClick():鼠標左鍵雙擊
pyautogui.rightClick():鼠標右鍵單擊
pyautogui.middleClick():鼠標中鍵單擊

另外還有:pyautogui. mouseDown()pyautogui.mouseUp()類似,分別是鼠標按下和鼠標抬起。

拖動鼠標

  • pyautogui.dragTo():拖動到指定位置
  • pyautogui.dragRel():按偏移量進行拖動

一個小例子:

import pyautogui
import time
time.sleep(5)
pyautogui.click()  # click to put drawing program in focus
distance = 200
while distance > 0:
    pyautogui.dragRel(distance, 0, duration=0.05)  # move right
    distance = distance - 5
    pyautogui.dragRel(0, distance, duration=0.05)  # move down
    pyautogui.dragRel(-distance, 0, duration=0.05)  # move left
    distance = distance - 5
    pyautogui.dragRel(0, -distance, duration=0.05)  # move up

打開畫圖工具,選擇畫筆,然后運行這個程序,將鼠標放在畫板上,5秒后,它就會畫出一個圖形:
enter description here

滾動鼠標

  • pyautogui.scroll():要一個整型參數,說明向上或向下滾動多少單位。單位的意義在每個操作系統和應用上不一樣,所以你必須試驗,看看在你的情況下滾動多遠。滾動發生在鼠標的當前位置。傳遞正整數表示向上滾動,傳遞負整數表示向下滾動

處理屏幕

在 Linux 計算機上,需要安裝 scrot 程序,才能在 pyautogui 中使用屏幕快照功能。在終端窗口中,執行 sudo apt-get install scrot,安裝該程序。如果你使用 Windows或 OS X,就跳過這一步

獲取屏幕快照

要在 Python 中獲取屏幕快照,就調用 pyautogui.screenshot() 函數:im = pyautogui.screenshot()

im 變量將包含一個屏幕快照的 Image 對象。現在可以調用 im 變量中 Image 對象的方法,就像所有其他 Image 對象一樣。

向 getpixel() 函數傳入坐標元組,如(0,0)或(50,200),它將告訴你圖像中這些坐標處的像素顏色。getpixel() 函數的返回值是一個RGB 元組,包含3 個整數,表示像素的紅綠藍值(沒有第四個值表示 alpha,因為屏幕快照是完全不透明的)。這就是你的程序“看到”當前屏幕上內容的方法。

分析屏幕快照

如果屏幕上指定的 x、y 坐標處的像素與指定的顏色匹配,PyAutoGUI 的pixelMatchesColor() 函數將返回 True。第一和第二個參數是整數,對應 x 和 y 坐標。第三個參數是一個元組,包含 3 個整數,是屏幕像素必須匹配的 RGB 顏色。

在獲取屏幕快照,並用 getpixel() 函數取得特定坐標處像素顏色的 RGB 元組之后,將同樣的坐標和 RGB 元組傳遞給 pixelMatchesColor(),這應該返回 True。然后改變 RBG 元組中的一個值,用同樣的坐標再次調用 pixelMatches Color(),這應該返回 False。你的 GUI 自動化程序要調用 click() 之前,這種方法應該有用。請注意,給定坐標處的顏色應該“完全”匹配。即使只是稍有差異(例如,是(255,255,254)而不是(255,255,255)),那么函數也會返回 False。

圖像識別

locateOnScreen('圖像') 函數返回4個整數的元組,是屏幕上首次發現該圖像時左邊的x 坐標、頂邊的 y 坐標、寬度以及高度

如果屏幕上找不到該圖像,locateOnScreen() 函數將返回 None。請注意要成功識別,屏幕上的圖像必須與提供的圖像完全匹配。即使只差一個像素,locateOnScreen() 函數也會返回 None。

如果該圖像在屏幕上能夠找到多處,locateAllOnScreen() 函數將返回一個Generator 對象。可以將它傳遞給 list() ,返回一個 4 整數元組的列表。每個4整數元組代表了屏幕上的一個區域。如果圖像只找到一次,返回的列表就只包含一個元組。

在得到圖像所在屏幕區域的 4 整數元組后,就可以點擊這個區域的中心。將元組傳遞給 center() 函數,它將返回該區域中心的 x、y 坐標。

控制鍵盤

通過鍵盤發送一個字符串

pyautogui.typewrite() 函數向計算機發送虛擬按鍵。

pyautogui.typewrite('Hello world!')

默認情況下,typewrite() 函數將立即打印出完整字符串。但是,你可以傳入可選的第二參數,在每個字符之間添加短時間暫停。例如,pyautogui.typewrite('Helloworld!',0.25)將在打出H 后等待1/4 秒。打出e 以后再等待1/4 秒,如此等等。這種漸進的打字機效果,對於較慢的應用可能有用,它們處理擊鍵的速度不夠快,跟不上pyautogui。對於 A 或!這樣的字符,pyautogui 將自動模擬按住 Shift 鍵。

鍵名

不是所有的鍵都很容易用單個文本字符來表示, 在PyAutoGUI 中,這些鍵表示為短的字符串值:'esc' 表示Esc 鍵,'enter' 表示 Enter。
除了單個字符串參數,還可以向 typewrite() 函數傳遞這些鍵字符串的列表

也可以查看 pyautogui.KEYBOARD_KEYS 列表,看看 pyautogui 接受的所有可能的鍵字符串

按下和釋放鍵盤

pyautogui.keyDown() 和 pyautogui.keyUp() 將向計算發送虛擬的按鍵和釋放
pyautogui提供了pyautogui.press() 函數,它調用這兩個函數,模擬完整的擊鍵。

熱鍵組合

“熱鍵”或“快捷鍵”是一種按鍵組合,它調用某種應用功能
可以使用按下抬起的組合,但是相當麻煩
可以使用 pyautogui.hotkey() 函數,它接受多個鍵字符串參數,按順序按下,再按相反的順序釋放

常用函數總結

moveTo(x,y)將鼠標移動到指定的 x、y 坐標。
moveRel(xOffset,yOffset)相對於當前位置移動鼠標。
dragTo(x,y)按下左鍵移動鼠標。
dragRel(xOffset,yOffset)按下左鍵,相對於當前位置移動鼠標。
click(x,y,button)模擬點擊(默認是左鍵)。
rightClick() 模擬右鍵點擊。
middleClick() 模擬中鍵點擊。
doubleClick()模擬左鍵雙擊。
mouseDown(x,y,button)模擬在 x、y 處按下指定鼠標按鍵。
mouseUp(x,y,button)模擬在 x、y 處釋放指定鍵。
scroll(units)模擬滾動滾輪。正參數表示向上滾動,負參數表示向下滾動。
typewrite(message)鍵入給定消息字符串中的字符。
typewrite([key1,key2,key3])鍵入給定鍵字符串。
press(key)按下並釋放給定鍵。
keyDown(key)模擬按下給定鍵。
keyUp(key)模擬釋放給定鍵。
hotkey([key1,key2,key3])模擬按順序按下給定鍵字符串,然后以相反的順序釋放。
screenshot() 返回屏幕快照的 Image 對象(參見第 17 章關於 Image 對象的信息)。

使用pyperclip模塊控制剪切板

1.該模塊為第三方模塊,需安裝后使用pip install pyperclip
2.作用:向剪切板發送文本或讀取剪切板文本
3.用法:

  • pyperclip.copy('dsd')#向剪切板發送文本
  • pyperclip.paste()讀取剪切板文本


免責聲明!

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



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