一、鼠标操作
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(100,100)
· 需要连续滑动时,使用 参数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整理编写,转载请注明出处。文中如有错误欢迎留言指正。文中出现的图片为互联网素材,如有侵权请联系删除。