一、鼠标操作

1.安装环境

使用pip命令安装

pip install pyautogui#该库详细文档 https://pypi.org/project/PyAutoGUI/#汉化文档 https://github.com/asweigart/pyautogui/blob/master/docs/simplified-chinese.ipynb

2.基础操作

# 导入模块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(100100)

· 需要连续滑动时,使用 参数mouseDownUp=False
(需要先使用按下操作)

pyautogui.mouseDown(button='left')#按下鼠标左键pyautogui.dragTo(200, 200, duration=0.5, button='left', mouseDownUp=Falsepyautogui.dragTo(200, 200, duration=0.5, button='left', mouseDownUp=False)# 一系列操作 都需要mouseDownUp = Falsepyautogui.mouseUp(button='left') #松开

注:实际使用中,最后一条drag操作使用mouseDownUp = True的实际体验更好,原因未知,同样使用moveTo() 操作也是可以的。

3.一些小应用

(1)实时获取鼠标位置

#键鼠操作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) #右对齐,长度为4print(positionStr, end = '') print('\b' * len(positionStr) , end = '' ,flush = True) #\b为退格符 flush刷新防止延迟显示except KeyboardInterrupt:print( '\n' )

(2)全自动画画

#绘制五角星import pyautogui as pgimport mathimport time# 计算五角星的外接圆半径R = 250 / (2 * math.sin(36 * math.pi / 180))# 计算五角星的中心点坐标x_c,y_c = pg.size()#当前屏幕的分辨率(宽度和高度)x_c /= 2y_c /= 2# 计算五角星的五个顶点的坐标A_x = x_cA_y = y_c - RB_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, Epg.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) #抬起鼠标按钮

画好是这样的~

二,键盘操作

1.主要函数

(1)typewrite()

·本函数用于模拟键盘输入英文字符串,interval 为两次键入之间的时间间隔

import pyautoguipyautogui.typewrite('Hello world!', interval = 0.1)

注:中文非在键盘上的字符,无法使用typewrite()输出

(2)hotkey()

· 本函数用于键盘热键,即同时按下几个按键

可以调用的键有:

 pyautogui.KEYBOARD_KEYS#查看哪些键是可以调用的

[‘\t’, ‘\n’, ‘\r’, ’ ‘, ‘!’, ‘”’, ‘#’, ‘$’, ‘%’, ‘&’, “’”, ‘(’, ‘)’, ‘*’, ‘+’, ‘,’, ‘-’, ‘.’, ‘/’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘:’, ‘;’, ‘’, ‘” />import pyautoguipyautogui.hotkey(‘ctrl’, ‘a’) #全选#可以为上述的任意数量的任意键的组合

(3)keyDown() keyUp()

import pyautoguipyautogui.keyDown(key_name) #按下按键pyautogui.keyUp(key_name)#松开按键
  • hotkey相当于调用keyDown和KeyUp来按下和松开选定的键

2.一些应用

(1)模拟打字

import pyautogui as pgs = R'''text'''pg.typewrite(s,interval=0.08)
  • 利用模拟打字,即可在一些打字网站中获得不属于你的打字速度!

(2)输入中文

  • 由于typewrite()不支持中文,我们可以使用调用剪切板的方式模拟中文输入
import pyautogui as pgimport pyperclip #需要使用pip安装pyperclip模块import time,randomdef cprint(t):for i in t:pyperclip.copy(i) #将字符串t单独迭代出来pg.hotkey('ctrl', 'v')#使用粘贴指令将一个个字粘贴到想要的地方time.sleep(random.random()*0.25) # 休眠一段时间,模拟人打字

虽然看着有趣但是没有什么卵用,可以直接省略循环,复制粘贴即可

三、其他

1.交互框

#显示消息框import pyautoguipyautogui.alert('这是一个通知。') pyautogui.confirm('是否继续?') pyautogui.confirm('选择一个选项:', buttons=['A', 'B', 'C'])pyautogui.prompt('你是谁?') pyautogui.password('请输入密码 (文本会被隐去)')#用户选择的提取:choice = pyautogui.confirm('选择一个选项:', buttons=['A', 'B', 'C']print(choice)

2.图像相关

(1)屏幕截图

#截图import pyautogui#两种保存截图的方式 截图保存在工作目录下im1 = pyautogui.screenshot()im1.save('my_screenshot.png')im2 = pyautogui.screenshot('my_screenshot2.png')

(2)图形匹配

import pyautogui#参数为需要匹配的图形文件路径button7location = pyautogui.locateOnScreen('button.png')print(button7location)#返回一个四元元组,分别为图形左上顶点坐标,宽度,高度

(*宽度高度返回的是用来匹配的图形的宽高,就是被匹配图形有缩放 返回的宽高依然不变。。。不明白)

(3)灰度值匹配

locateOnScreen()函数可以把grayscale参数设置为True来加速定位(大约提升30%),默认为False。这种去色(desaturate)方法可以加速定位,但是也可能导致假阳性(false-positive)匹配。
参数grayscale是一个布尔值,表示是否使用灰度匹配。如果设置为True,那么pyautogui会将屏幕截图和匹配图片都转换为灰度,从而忽略颜色的差异,提高匹配的速度和准确度。如果设置为False,那么pyautogui会保留原始的颜色,但可能导致匹grayscale是一个布尔值,表示是否使用灰度匹配。如果设置为True,那么pyautogui会将屏幕截图和匹配图片都转换为灰度,从而忽略颜色的差异,提高匹配的速度和准确度。如果设置为False,那么pyautogui会保留原始的颜色,但可能导致匹配失败或误匹配。

import pyautoguibutton7location = pyautogui.locateOnScreen('button.png', grayscale=True)print(button7location)

经过色调转换后的图片,由于其灰度不变,仍然会被成功匹配

(4)模糊匹配

需要安装库:

pip install opencv-python

用于图片有缩放时的匹配

confidence是一个浮点数,表示匹配的相似度阈值,范围是0到1。如果设置为1,那么pyautogui只会返回完全相同的匹配结果。如果设置为0,那么pyautogui会返回任何匹配结果。如果设置为0.9,那么pyautogui会返回至少90%相似的匹配结果。confidence参数可以用来处理一些微小的像素差异,或者匹配缩放后的图片。

(5)图形中心

图形中心可以由如下语句直接得出

#button7location为四元元组buttonx, buttony = pyautogui.center(button7location)pyautogui.click(buttonx, buttony)#点击发现的按钮中心(妈妈再也不用担心我误触广告啦)

(6)获取某处像素颜色

  • 静态获取
# 静态方法import pyautoguiim = pyautogui.screenshot()#先获取屏幕截图a = im.getpixel((100, 200)) #获取坐标点(100,200)处的像素RGB颜色print(a)#返回 (247, 247, 247)
  • 动态获取
# 动态方法import pyautogui as pgprint('按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)

(7)应用-打靶

  • 使用图像识别来点击屏幕中出现的目标
import pyautoguiimport osos.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("文件路径有误,请检查!")

3.安全性

为了保证一定的安全,可以使用一些方法让程序运行可控

下面是一些措施:

(1)鼠标滑动取消

#开启时,鼠标移动到屏幕边缘便会抛出异常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.

(2)运行前审查

#在执行前加入检查时间import pyautoguipyautogui.PAUSE = 2.5

本文由Failur整理编写,转载请注明出处。文中如有错误欢迎留言指正。文中出现的图片为互联网素材,如有侵权请联系删除。