pyautogui 並不需要去解析各平台的控制項結構,他的元素定位都是基於座標的。所以不論你是通過手工截圖測量,還是通過自動化工具獲取,只要你能拿到座標,你就能進行元素操作。
一,滑鼠操作
1,獲取座標
import pyautogui as ui
# 獲取螢幕大小
size = ui.size()
# 獲取現在滑鼠位置
p = ui.position()
# 座標是否超出螢幕範圍
if_on = ui.onscreen(*p)
2, 滑鼠移動
ui.moveto(x/2, y/2, duration=2, tween=easeincirc)
引數說明:
3, 滑鼠拖拽, 移動到指定的座標
ui.dragto(500, 500)
4, 百發百中的射箭遊戲
import random
import time
import pyautogui as ui
x, y = ui.position()
target = (800, 800)
for i in range(10):
rand_x = random.randint(0, x)
rand_y = random.randint(0, y)
# 隨機生成位置
print(rand_x, rand_y)
ui.moveto(rand_x, rand_y)
# 移動到目標位置
ui.dragto(target, duration=0.2)
time.sleep(1)
效果:
5, 相對移動
ui.move(-500, duration=1)
ui.move(yoffset=-400, duration=1)
ui.move(500, duration=1)
ui.move(yoffset=400, duration=1)
相對移動的小遊戲:
start = 20
add_point = 10
duration = 0.5
for i in range(10):
if i % 2 == 0:
ui.drag(start, duration=duration)
ui.drag(yoffset=start, duration=duration)
else:
ui.drag(-start, duration=duration)
ui.drag(yoffset=-start, duration=duration)
start += add_point
效果:
6,點選
ui.click(x=none,
y=none,
clicks=1, # 點選次數
interval=0.0, # 間隔時間
button='right', # 右鍵
duration=0.0) # 持續時間
通過 click 進一步封裝了 leftclick, rightclick, middleclick, doubleclick, tripleclick
7, scroll
視窗滾動,但是封裝的滾動感覺比較雞肋,他是以滑鼠點選次數為單位的,所以不知道會滾動到什麼位置。
pyautogui.scroll(10) # 向上滾動 10 個 clicks
>>> pyautogui.scroll(-10) # # 向下滾動 10 個 clicks
>>> pyautogui.scroll(10, x=100, y=100) # 移動到位置再滾動
使用 drag 和 dragto 會更加方便一點,還是以座標為依據,通過操作滑鼠中鍵來實現視窗滾動,比如這個例子是 scroll 和 drag 的對比:
x, y = ui.size()
ui.scroll(-100)
time.sleep(1)
ui.scroll(100)
time.sleep(1)
ui.dragto(y=y, button='middle') # 滾動到視窗底部
效果:
二,鍵盤操作
1, 輸入框輸入
# 輸入yuz, 每個字母時間間隔 0.2 s
pyautogui.write("yuz",interval=0.2)
注意:pyautogui 並不支援輸入框自動聚焦,所有輸入之前先要點選輸入框位置。2,按下鍵盤 press
press('enter', presses=1, interval=0.0)
相當於滑鼠操作的 click, 可以輸入鍵盤上的按鍵, 比如 shift 鍵,enter 鍵。所有的按鍵可以檢視原始碼當中的 keyboard_keys 或者 key_names。
引數:所有按鍵列表:
3, 熱鍵 hotkey
ui.hotkey('ctrl', 'shift', 'esc')
4, keyup, keydown
這是 press 的分解動作,相當於滑鼠的 mouseup 和 mousedown。上面熱鍵的操作方式可以分解成:
ui.keydown('ctrl') # 按下 ctrl
ui.keydown('shift') # 按下 shift
ui.keydown('esc') # 按下 esc
ui.keyup('esc') # 釋放 ctrl
ui.keyup('shift') # 釋放 shift
ui.keyup('ctrl') # 釋放 esc
三,影象識別
座標定位這種方式為通用性打下了基礎,讓 pyautogui 可以輕鬆做到跨平台。但是實際操作過程中很難清除的知道某個要操作的控制項的確切位置,因為每次開啟相同的頁面都有可能是變動的。pyautogui 給出的解決方案非常簡單粗暴,使用影象識別,返回在螢幕中的座標位置,在通過座標進行處理。
1,locatecenteronscreen
返回被識別影象的中心座標。引數說明:
locatecenteronscreen('img/seven.png', confidence=0.7, grayscale=true)
現階段影象識別的結果並不理想,基於影象識別的使用還存在以下問題:
所以 uiautogui 適合的場景是跨平台的少量原生控制項互動,如果要對原生應用控制項大量操作,還是換用其他工具比較合適。
基於影象識別的具體例子:
import time
import pyautogui as ui
time.sleep(3)
seven = ui.locatecenteronscreen('img/seven.png', confidence=0.7, grayscale=true)
mult = ui.locatecenteronscreen('img/multipy.png', confidence=0.7, grayscale=true)
two = ui.locatecenteronscreen('img/two.png', confidence=0.7, grayscale=true)
equal = ui.locatecenteronscreen('img/equal.png', confidence=0.7, grayscale=true)
ui.click(*seven)
ui.click(*mult)
ui.click(*two)
ui.click(*equal)
效果: pywinauto桌面應用自動化
pywinauto是一組用於自動化microsoft windows gui的python模組。最簡單的是,它允許您將滑鼠和鍵盤操作傳送到視窗對話方塊和控制項,來完成我們自動化操作。官方文件 通過pip進行安裝 pip install pywinauto 直接開啟python,進行匯入對應的庫 通過...
Atitit 自動化gui 與 發帖機 技術
atitit 自動化 gui 與 發帖機 技術 1.1.gui tech 11.2.自動化軟體測試 11.3.selenium attilax 11.4.圖形指令碼語言 sikuli 11.5.dom1 1.6.jsbridge 11.7.browser tech 1atitit.木馬病毒的免殺原理...
Atitit 自動化gui 與 發帖機 技術
atitit 自動化 gui與 發帖機 技術 1.1.gui tech 11.2.自動化軟體測試 11.3.selenium attilax 11.4.圖形指令碼語言 sikuli 11.5.dom1 1.6.jsbridge 11.7.browser tech 1atitit.木馬病毒的免殺原理 ...