GUI(图形用户界面)自动化

1

# GUI(图形用户界面自动化) pyautogui
# 安装:cmd: pip install pyautogui
import pyautogui, time

# 一、基本属性

pyautogui.PAUSE = 1  # 暂停1秒 每执行完一个动作,暂停1秒再执行下一个动作.便于用户观察执行情况

# 把鼠标移动到屏幕左上角会抛出下面的异常:用于终止程序,也可以按ctrl+F2
# pyautogui.FailSafeException

# pyautogui.FAILSAFE = False  # 禁用上面的异常,默认是启用


# 二、操作鼠标:
def mouse():
    # 1 获得鼠标位置
    p = pyautogui.position()
    print(p, p.x, p.y)  # Point(x=1282, y=781) 1282 781
    # 2 移动鼠标
    # 用2秒的时候移动鼠标到100,100
    pyautogui.moveTo(100, 100, duration=2)
    # 从当前位置用2秒时间移动200,300像素
    pyautogui.moveRel(200, 300, duration=2)
    # 3 点击鼠标
    # 左击:
    pyautogui.click(1800, 100)
    # 右击
    pyautogui.click(1800, 500, button='right')
    pyautogui.rightClick(1700, 400)  # 等价于上面
    # 双击
    pyautogui.click(1500, 400, clicks=2)
    pyautogui.doubleClick(1500, 300)  # 等价于上面
    # 按下鼠标
    pyautogui.mouseDown(1400, 500)
    # 鼠标释放
    pyautogui.mouseUp(1400, 300)
    # 拖动鼠标
    pyautogui.dragRel(-100, 200, duration=3)
    pyautogui.dragTo(1800, 300, duration=2)
    # 滚动鼠标
    pyautogui.scroll(1000)
    # pyautogui.hscroll()
    # pyautogui.vscroll


# 三、屏幕操作:
def screen():
    #  屏幕尺寸
    size = pyautogui.size()
    print(size, size.width, size.height)  # Size(width=1920, height=1080) 1920 1080

    # 屏幕快照
    img = pyautogui.screenshot()
    print(img)  # <PIL.Image.Image image mode=RGB size=1920x1080 at 0x15EDE3E6FA0>

    # 判断某个像素瓣颜色
    # 进一步可判断某一区域的颜色
    # 然后可以进行图像识别
    # 然后可以做很多很多的事,比如:自动精确点击
    # 比如:在传奇游戏自动打怪中,可以记录下某一按钮的区域颜色(按钮位置随时会改变),然后可以精确点击该按钮

    # 不稳定的方法:pyautogui.pixelMatchesColor(100, 100, (60, 63, 65)) # True
    # OSError: windll.user32.ReleaseDC failed : return 0 # 该方法不稳定,不规律的抛出这个错误,不建议使用
    # 可以改成:
    print(pyautogui.screenshot().getpixel((100, 100)) == (60, 63, 65))

    # 图像识别:最吊的方法
    box = pyautogui.locateOnScreen('QQ.png')  # QQ.png是要识别的图像
    # 如果匹配多个图像的话返回一个Generator对象
    print(box)  # Box(left=473, top=5, width=47, height=20)
    xy = pyautogui.center(box)
    print(xy)  # Point(x=496, y=15)
    pyautogui.click(xy)


# 四 操作键盘
def keyboard():
    time.sleep(3)  # 装备好要输入的文本文件
    pyautogui.click(100, 100)  # 把文本文件移动到屏幕左上角
    pyautogui.typewrite('hello,I love you,\n123\b456', 0.1)  # 自动输入,第二个参娄是输入的间隔时间,可以省略.
    # \n能换行,\b能退格
    # 注意,这是模拟键盘输入,键盘上没有中文,所下面是错误的
    # #pyautogui.typewrite('你好,我爱你'),这条代码无法执行,因为键盘上只有ASCII
    # 如果想输入中文怎么办?把输入法切换成五笔,然后试着运行下面的代码:
    # pyautogui.typewrite('wq vb ,q ep wq ', 0.1)  # 你好,我爱你
    pyautogui.typewrite(['a', 'b', 'left', 'left', 'X', 'Y'], 0.2)
    # 'esc' 表示 ESC键,'enter' 表示 Enter键 'right' 表示 Right键
    # print(pyautogui.KEYBOARD_KEYS)
    # pyautogui.typewrite(['volumeup','volumeup','volumeup','volumeup','volumeup'])  # 音量++++
    # 键盘键字符串 含义
    # 'a', 'b', 'c', 'A', 'B', 'C', '1', '2', '3','!', '@', '#',等等 单个字符的键
    # 'enter'(or 'return' or '\n') 回车键
    # 'esc' Esc 键
    # 'shiftleft', 'shiftright' 左右 Shift 键
    # 'altleft', 'altright' 左右 Alt 键
    # 'ctrlleft', 'ctrlright' 左右 Ctrl 键
    # 'tab'(or '\t') Tab 键
    # 'backspace', 'delete' Backspace 和 Delete 键
    # 'pageup', 'pagedown' Page Up 和 Page Down 键
    # 'home', 'end' Home 和 End 键
    # 'up', 'down', 'left', 'right' 上下左右箭头键
    # 'f1', 'f2', 'f3',等等 F1 至 F12 键
    # 'volumemute', 'volumedown', 'volumeup'
    # 静音、减小音量、放大音量键(有些键盘没有这些键,但你
    # 的操作系统仍能理解这些模拟的按键)
    # 'pause' Pause 键
    # 'capslock', 'numlock', 'scrolllock' Caps Lock,Num Lock 和 Scroll Lock 键
    # 'insert' Ins 或 Insert 键
    # 'printscreen' Prtsc 或 Print Screen 键
    # 'winleft', 'winright' 左右 Win 键(在 Windows 上)
    # 'command' Command 键(在 OS X 上)
    # 'option' Option 键(在 OS X 上

    # 组合键
    pyautogui.keyDown('shift')  # 按下不放
    pyautogui.press('4')  # 按下放开
    pyautogui.keyUp('shift')  # 放开

    # 热键
    pyautogui.hotkey('shift', '4')

# 五、复习
# 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 对象的信息)。
# locateOnScreen() 定位图像,没有匹配位置返回None

 

posted @ 2020-11-09 14:39  老谭爱blog  阅读(547)  评论(0)    收藏  举报