美文网首页
pyautogui 实现平民版RPA的利器

pyautogui 实现平民版RPA的利器

作者: 星塵子 | 来源:发表于2020-09-26 11:40 被阅读0次

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

相关文章

网友评论

      本文标题:pyautogui 实现平民版RPA的利器

      本文链接:https://www.haomeiwen.com/subject/quccuktx.html