使用pip命令安装
pip install pyautogui
#该库详细文档 https://pypi.org/project/PyAutoGUI/
#汉化文档 https://github.com/asweigart/pyautogui/blob/master/docs/simplified-chinese.ipynb
# 导入模块
import pyautogui
# 获取当前鼠标的位置
x, y = pyautogui.position()
# 将鼠标移动到(x, y)的位置,花费t秒时间,(t留空默认0.1秒)
pyautogui.moveTo(x, y, t)
# moveRel() 将鼠标当前所在坐标视为(0,0)
# 将鼠标用左键拖动到(x, y)的位置,花费t秒时间,(t留空默认0.1秒)
pyauto.dragTo(x, y, t, button = 'left')
# 在(100, 100)的位置左键单击
pyautogui.click(100, 100)
# 在(100, 100)的位置右键单击
pyautogui.click(100, 100, button='right')
# 在(100, 100)的位置左键双击
pyautogui . doubleClick(100,100)
· 需要连续滑动时,使用 参数mouseDownUp=False
(需要先使用按下操作)
pyautogui.mouseDown(button='left')#按下鼠标左键
pyautogui.dragTo(200, 200, duration=0.5, button='left', mouseDownUp=False
pyautogui.dragTo(200, 200, duration=0.5, button='left', mouseDownUp=False)
# 一系列操作 都需要mouseDownUp = False
pyautogui.mouseUp(button='left') #松开
注:实际使用中,最后一条drag操作使用mouseDownUp = True的实际体验更好,原因未知,同样使用moveTo() 操作也是可以的。
#键鼠操作
import pyautogui, sys
#实时监测
print("Press Ctrl-C to exit.")
try:
while True:
x, y = pyautogui.position() #获取鼠标位置
positionStr = 'X: '+str(x).rjust(4) + 'Y: ' + str(y).rjust(4) #右对齐,长度为4
print(positionStr, end = '')
print('\b' * len(positionStr) , end = '' ,flush = True) #\b为退格符 flush刷新防止延迟显示
except KeyboardInterrupt:
print( '\n' )
#绘制五角星
import pyautogui as pg
import math
import time
# 计算五角星的外接圆半径
R = 250 / (2 * math.sin(36 * math.pi / 180))
# 计算五角星的中心点坐标
x_c,y_c = pg.size()# 当前屏幕的分辨率(宽度和高度)
x_c /= 2
y_c /= 2
# 计算五角星的五个顶点的坐标
A_x = x_c
A_y = y_c - R
B_x = x_c + R * math.sin(72 * math.pi / 180)
B_y = y_c - R * math.cos(72 * math.pi / 180)
C_x = x_c + R * math.sin(36 * math.pi / 180)
C_y = y_c + R * math.cos(36 * math.pi / 180)
D_x = x_c - R * math.sin(36 * math.pi / 180)
D_y = y_c + R * math.cos(36 * math.pi / 180)
E_x = x_c - R * math.sin(72 * math.pi / 180)
E_y = y_c - R * math.cos(72 * math.pi / 180)
# 移动到顶点E进行按下操作
pg.moveTo(E_x, E_y)
pg.mouseDown(button = 'left')
# 依次拖动到顶点B, D, A, C, E
pg.dragTo(B_x, B_y, 1, button='left',mouseDownUp=False)
pg.dragTo(D_x, D_y, 1, button='left',mouseDownUp=False)
pg.dragTo(A_x, A_y, 1, button='left',mouseDownUp=False)
pg.dragTo(C_x, C_y, 1, button='left',mouseDownUp=False)
pg.dragTo(E_x, E_y, 1, button='left',mouseDownUp=True) #抬起鼠标按钮
·本函数用于模拟键盘输入英文字符串,interval 为两次键入之间的时间间隔
import pyautogui
pyautogui.typewrite('Hello world!', interval = 0.1)
注:中文非在键盘上的字符,无法使用typewrite()输出
· 本函数用于键盘热键,即同时按下几个按键
可以调用的键有:
pyautogui.KEYBOARD_KEYS #查看哪些键是可以调用的
[‘\t’, ‘\n’, ‘\r’, ’ ‘, ‘!’, ‘"’, ‘#’, ‘$’, ‘%’, ‘&’, "’", ‘(’, ‘)’, ‘*’, ‘+’, ‘,’, ‘-’, ‘.’, ‘/’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘:’, ‘;’, ‘<’, ‘=’, ‘>’, ‘?’, ‘@’, ‘[’, ‘\’, ‘]’, ‘^’, ‘_’, ‘`’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’, ‘{’, ‘|’, ‘}’, ‘~’, ‘accept’, ‘add’, ‘alt’, ‘altleft’, ‘altright’, ‘apps’, ‘backspace’, ‘browserback’, ‘browserfavorites’, ‘browserforward’, ‘browserhome’, ‘browserrefresh’, ‘browsersearch’, ‘browserstop’, ‘capslock’, ‘clear’, ‘convert’, ‘ctrl’, ‘ctrlleft’, ‘ctrlright’, ‘decimal’, ‘del’, ‘delete’, ‘divide’, ‘down’, ‘end’, ‘enter’, ‘esc’, ‘escape’, ‘execute’, ‘f1’, ‘f10’, ‘f11’, ‘f12’, ‘f13’, ‘f14’, ‘f15’, ‘f16’, ‘f17’, ‘f18’, ‘f19’, ‘f2’, ‘f20’, ‘f21’, ‘f22’, ‘f23’, ‘f24’, ‘f3’, ‘f4’, ‘f5’, ‘f6’, ‘f7’, ‘f8’, ‘f9’, ‘final’, ‘fn’, ‘hanguel’, ‘hangul’, ‘hanja’, ‘help’, ‘home’, ‘insert’, ‘junja’, ‘kana’, ‘kanji’, ‘launchapp1’, ‘launchapp2’, ‘launchmail’, ‘launchmediaselect’, ‘left’, ‘modechange’, ‘multiply’, ‘nexttrack’, ‘nonconvert’, ‘num0’, ‘num1’, ‘num2’, ‘num3’, ‘num4’, ‘num5’, ‘num6’, ‘num7’, ‘num8’, ‘num9’, ‘numlock’, ‘pagedown’, ‘pageup’, ‘pause’, ‘pgdn’, ‘pgup’, ‘playpause’, ‘prevtrack’, ‘print’, ‘printscreen’, ‘prntscrn’, ‘prtsc’, ‘prtscr’, ‘return’, ‘right’, ‘scrolllock’, ‘select’, ‘separator’, ‘shift’, ‘shiftleft’, ‘shiftright’, ‘sleep’, ‘space’, ‘stop’, ‘subtract’, ‘tab’, ‘up’, ‘volumedown’, ‘volumemute’, ‘volumeup’, ‘win’, ‘winleft’, ‘winright’, ‘yen’, ‘command’, ‘option’, ‘optionleft’, ‘optionright’
import pyautogui
pyautogui.hotkey('ctrl', 'a') #全选
#可以为上述的任意数量的任意键的组合
import pyautogui
pyautogui.keyDown(key_name) #按下按键
pyautogui.keyUp(key_name) #松开按键
import pyautogui as pg
s = R'''text'''
pg.typewrite(s,interval=0.08)
import pyautogui as pg
import pyperclip #需要使用pip安装pyperclip模块
import time,random
def cprint(t):
for i in t:
pyperclip.copy(i) #将字符串t单独迭代出来
pg.hotkey('ctrl', 'v') #使用粘贴指令将一个个字粘贴到想要的地方
time.sleep(random.random()*0.25) # 休眠一段时间,模拟人打字
虽然看着有趣但是没有什么卵用,可以直接省略循环,复制粘贴即可
#显示消息框
import pyautogui
pyautogui.alert('这是一个通知。')
pyautogui.confirm('是否继续?')
pyautogui.confirm('选择一个选项:', buttons=['A', 'B', 'C'])
pyautogui.prompt('你是谁?')
pyautogui.password('请输入密码 (文本会被隐去)')
#用户选择的提取:
choice = pyautogui.confirm('选择一个选项:', buttons=['A', 'B', 'C']
print(choice)
#截图
import pyautogui
#两种保存截图的方式 截图保存在工作目录下
im1 = pyautogui.screenshot()
im1.save('my_screenshot.png')
im2 = pyautogui.screenshot('my_screenshot2.png')
import pyautogui
#参数为需要匹配的图形文件路径
button7location = pyautogui.locateOnScreen('button.png')
print(button7location)
#返回一个四元元组,分别为图形左上顶点坐标,宽度,高度
(*宽度高度返回的是用来匹配的图形的宽高,就是被匹配图形有缩放 返回的宽高依然不变。。。不明白)
locateOnScreen()函数可以把grayscale参数设置为True来加速定位(大约提升30%),默认为False。这种去色(desaturate)方法可以加速定位,但是也可能导致假阳性(false-positive)匹配。
参数grayscale是一个布尔值,表示是否使用灰度匹配。如果设置为True,那么pyautogui会将屏幕截图和匹配图片都转换为灰度,从而忽略颜色的差异,提高匹配的速度和准确度。如果设置为False,那么pyautogui会保留原始的颜色,但可能导致匹grayscale是一个布尔值,表示是否使用灰度匹配。如果设置为True,那么pyautogui会将屏幕截图和匹配图片都转换为灰度,从而忽略颜色的差异,提高匹配的速度和准确度。如果设置为False,那么pyautogui会保留原始的颜色,但可能导致匹配失败或误匹配。
import pyautogui
button7location = pyautogui.locateOnScreen('button.png', grayscale=True)
print(button7location)
需要安装库:
pip install opencv-python
用于图片有缩放时的匹配
confidence是一个浮点数,表示匹配的相似度阈值,范围是0到1。如果设置为1,那么pyautogui只会返回完全相同的匹配结果。如果设置为0,那么pyautogui会返回任何匹配结果。如果设置为0.9,那么pyautogui会返回至少90%相似的匹配结果。confidence参数可以用来处理一些微小的像素差异,或者匹配缩放后的图片。
图形中心可以由如下语句直接得出
#button7location为四元元组
buttonx, buttony = pyautogui.center(button7location)
pyautogui.click(buttonx, buttony)
#点击发现的按钮中心(妈妈再也不用担心我误触广告啦)
# 静态方法
import pyautogui
im = pyautogui.screenshot() #先获取屏幕截图
a = im.getpixel((100, 200)) #获取坐标点(100,200)处的像素RGB颜色
print(a)
#返回 (247, 247, 247)
# 动态方法
import pyautogui as pg
print('按ctrl-c退出~')
try:
while True:
x,y = pg.position() #获取鼠标位置
color = str(pg.pixel(x,y)).rjust(15) #用pixel()获取点x,y处的像素RGB颜色
print(color,end = '')
print('\b'*len(color),end = '',flush = True)
except KeyboardInterrupt:
print("fine\n")
#会实时获取鼠标处的颜色
import pyautogui
# 检验坐标(100,200)处的RGB颜色是否等于(255,255,255)
# 传入三个参数,前两个为坐标,第三个为RGB颜色的三元组
pyautogui.pixelMatchesColor(100, 200, (255, 255, 255))
# 返回布尔值
#可选参数tolerance 为RGB颜色容差
pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10)
import pyautogui
import os
os.chdir('E:/Python') #切换工作路径
while True:
try:
while True:
buttonx, buttony = pyautogui.locateCenterOnScreen('target.png',grayscale = True,confidence = 0.7)
pyautogui.click(buttonx, buttony) #返回匹配图像的中心坐标,点击
except pyautogui.ImageNotFoundException: #无匹配图像
print("没有匹配的图像!")
except IOError: #路径错误
print("文件路径有误,请检查!")
为了保证一定的安全,可以使用一些方法让程序运行可控
下面是一些措施:
#开启时,鼠标移动到屏幕边缘便会抛出异常
pyautogui.FAILSAFE = True
将鼠标快速滑动到角落,便会抛出该错误。
pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.
#在执行前加入检查时间
import pyautogui
pyautogui.PAUSE = 2.5
本文由Failur整理编写,转载请注明出处。文中如有错误欢迎留言指正。文中出现的图片为互联网素材,如有侵权请联系删除。