PyAutoGUI 通过Python脚本控制鼠标和键盘来自动执行与其他应用程序的交互。 PyAutoGUI 可在Windows,macOS和Linux上运行,同时支持 Python 2和3。
Github: https://github.com/asweigart/pyautogui
文档: https://pyautogui.readthedocs.io/en/latest/
安装: pip install pyautogui
常用API
import pyautogui
#执行动作后暂停的秒数,建议使用 time.sleep
pyautogui.PAUSE = 2.5
#启用主动故障机制,将鼠标移动至屏幕左上角触发`pyautogui.FailSafeException` 异常,将中止脚本的执行
pyautogui.FAILSAFE = True
#屏幕的宽和高 多屏的话是主屏幕
w,h = pyautogui.size()
print(w,h)
#鼠标位置
x,y = pyautogui.position()
print(x,y)
#移动鼠标到(x,y),duration为空表示立即
pyautogui.moveTo(x,y,duration=0.25)
#按住鼠标拖动至(x,y); button可选值:left,middle,right;默认left
pyautogui.dragTo(x,y,duration=2,button='left')
#鼠标移动至(x,y),再单击 clicks:点击次数,duration: 移动耗时秒数
pyautogui.click(x,y,clicks=1,duration=2)
#移动到(x,y),再滚动鼠标滚轮,默认为当前位置;正数向上滚动,负数向下滚动
pyautogui.scroll(-100,x,y)
#输入字符 中文需通过剪贴板实现
pyautogui.typewrite('Python',interval=0.25)
#回车键 键名查看 `pyautogui.KEYBOARD_KEYS`
pyautogui.press('enter')
#组合键:Ctrl+v
#其中部分三个键的快捷键无效( win10 系统),如: `shift + win + left/right`
pyautogui.hotkey('ctrl','v')
#截图 多屏是为主屏
pyautogui.screenshot('foo.png')
#图片检测 返回 None 表示未找到
pyautogui.locateCenterOnScreen(image)
#alert
pyautogui.alert(text='', title='', button='OK')
#confirm
pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel'])
#prompt
pyautogui.prompt(text='', title='' , default='')
#password
pyautogiu.password(text='', title='', default='', mask='*')
示例1:获取鼠标位置,参考官方示例微调
import pyautogui
def get_mouse_position():
print('开始获取鼠标位置,按 Ctrl-C 退出')
try:
while True:
x, y = pyautogui.position()
positionStr = f'X:{str(x).rjust(4)} Y:{str(y).rjust(4)}'
print(positionStr, end='')
print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
print('\n已退出')
except:
print('获取失败')
if __name__ == "__main__":
get_mouse_position()
示例2: 打开网易云音乐
main.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from rpa import openApp,findImage,mouseClick,hotkey,alert
import time
def play_music():
openApp('网易云音乐')
#点击私人FM
pos = findImage(r'.\image\music_fm.png')
if pos is None:
print('打开失败')
else:
x,y = pos
mouseClick(x,y)
time.sleep(2)
#切换至 mini 模式
hotkey('ctrl','alt','m')
alert('网易云音乐已开启')
if __name__ == "__main__":
play_music()
rpa.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pyautogui
import win32clipboard as w
import time
def setText(text):
"""将 text 写入剪贴板
"""
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardText(text)
w.CloseClipboard()
def pasteText():
"""复制
"""
pyautogui.hotkey('ctrl','v')
def openApp(text):
"""打开应用
"""
pyautogui.hotkey('win','q')
time.sleep(1)
setText(text)
pasteText()
time.sleep(1)
pyautogui.hotkey('enter')
time.sleep(2)
def mouseClick(x,y,duration=1,clicks=1):
"""移动到指定位置点击鼠标
"""
pyautogui.click(x,y,duration=duration,clicks=clicks)
time.sleep(1)
def hotkey(*args):
"""hotkey
"""
pyautogui.hotkey(*args)
def findImage(image,search_time=30):
"""查找图像
"""
start = time.time()
while True:
pos = pyautogui.locateCenterOnScreen(image)
if pos or time.time() - start > search_time:
return pos
def alert(text,title='提示',button='OK'):
pyautogui.alert(text=text, title=title, button=button)
使用剪贴板需: pip install pywin32
运行: python main.py
网友评论