python的pyautogui模块介绍
Welcome to PyAutoGUI’s documentation! — PyAutoGUI documentation 是pyautogui的官方文档
首先,pyautogui是什么?
他是一个可以控制鼠标,键盘,截图,甚至是识图以及模拟消息框的第三方模块。而且使用起来简单,方便。
为什么会有pyautogui这类模块出现?
在使用电脑进行各种操作时,有可能会出现一些重复性的操作,如果只靠人操作,其实是非常浪费时间的,这类可以帮助人们减少重复性操作的模块,我称他为自动化模块
pyautogui这类模块能用在什么地方?
需要重复性操作的地方,都可以尝试使用pyautogui,就我而言,pyautogui模块最常用的地方是游戏,但有很大一部分游戏,pyautogui是无法使用的(被屏蔽了)。
pyautogui模块怎么用?
pyautogui模块是一个第三方模块,所以需要先下载安装模块,才能在python上使用。
安装:
方法1:终端中输入pip install pyautogui 安装模块。 目前而言,我在很多不同windows电脑上都试了,安装pyautogui模块还没报错过
方法2(pycharm软件):在设置中,python解释器里搜索pyautogui模块安装也可以
导入模块:
import pyautogui
使用此模块之前的基本概念:
坐标系:
文档解释
说白了,就是把电脑屏幕左上角当成原点,建立一个坐标系,横为x,竖为y。往右x增加,往下y增加。x和y都不存在负数的值,最小就是原点(0
,0)。(x,y)最大值取决于电脑的分辨率。
可以用size函数获取屏幕的分辨率,它会返回一个元组来呈现(x,y)。我电脑就是1920*1080
模块具体内容介绍(介绍我认为最常用的):
一.鼠标相关:
1.获取当前鼠标坐标 。使用position() 函数
2.移动鼠标。moveTo(x,y),该函数需要传入x和y,运行之后鼠标会移动(x,y)处。此函数无返回值
3.鼠标左键单击。click(),调用该函数鼠标左键会单击当前鼠标位置一次
4.鼠标左键双击。doubleClick()
4.2doubleClick(x=坐标,y=坐标)里面也可指定坐标位置,这样会先移动到指定位置,再双击。
5.鼠标右键单击。click(button="right"),跟上关键词参数button,click()就是鼠标右击一下
6.鼠标右键双击。通过doubleClick(button="right"),增加button参数,来进行右键的双击,interval参数控制时间间隔。(时间间隔不要太短,可能导致双击失效)
7.鼠标中键单击。middleClick(),用的也少。
其实,还有鼠标拖拽等一些功能,但是我日常几乎没有用到,所以这里就不介绍了,感兴趣的,可以去网上查找资料。
二.键盘相关:
1.typewrite()。键盘控制输入,括号里传字符串内容,会立刻在光标处打出指定内容。这里我是通过time等待了2秒。
1.2 typewrite(interval=0.5),通过interval参数控制打出每个字符的间隔时间
2.press("键盘值"),用来模拟按下某一个指定的键,的这里键入enter,就代表按下回车。
3.keyDown()和keyUp(),keyDown一直按着一个键不松开,keyUp则是松开键。
键分别有这些,
Keyboard Control Functions — PyAutoGUI documentation,这是地址。
三.屏幕,截图相关:
1.screenshot(),获取当前屏幕内容,()里字符串表示保存的图片名字。
会在使用的py文件同一目录下生成截图
1.1 screenshot(region=(左,顶,与左边的距离,与顶部的距离))。下图就表示只获取屏幕以原点开始,长为100的正方形区域。
效果图:
2.locateOnScreen(),传入图片名字,在屏幕中识别图片位置,并返回坐标。
如果传入的图片,并不在屏幕中,会返回None。
重要,confidence参数,可以影响图像匹配的准确性,强烈建议加上,一般情况值设置为0.9最好。
四.消息框相关:
1.alert(text="内容",title="标题名字",button="按钮名字"),这个消息框无法获取用户输入。返回值是button的值
2.confirm(text='内容',title='标题名字',buttons=['按钮名字','按钮名字2']),这消息框,可以做出两种选择,点击哪个,就返回哪个。
相当于做个判断
3.prompt(text='请输入内容', title='标题名字' , default=输入框中预先存在的值),这个用的还是比较多的。
3.2 prompt(text='请输入内容', title='标题名字' , default=''哈哈''),如果预先输入哈哈,那么消息框中就会有哈哈。
4 还有一个password(text="文本内容",title="标题名字",default="预先值",mask="需要显示的加密字符")
password函数和prompt差不多,只是多了个mask参数,用于加密正在输入的内容,这里设置为a,输入框打出字后就成了a
小案例:
效果如下。通过上面所说的内容来完成自动点击,关闭操作。
制作过程:
1.把系统提示的图片事先准备好![](https://img-blog.csdnimg.cn/direct/f51c2fc00faa4515a8675055d7ddbbb5.png)
2.上代码
from pyautogui import * import time time.sleep(1) """界面位置不一样,所以下面的位置仅供参考。根据自己的电脑和界面实际情况判断。 下面的坐标仅供参考""" # 获取牌的位置 #print(position())#坐标 x=1051, y=390 #获取系统提示界面的关闭位置 #print(position())#坐标 x=1338, y=440 #获取放弃的位置 #print(position())#x=1133, y=828 #建一个函数,用来调用图像匹配 def use_locateonscreen(): #图像匹配.强烈建议加上confidence参数,能够提高匹配精确率 result = locateOnScreen("img.png",confidence=0.9) #返回值,如果没有匹配到会返回空,匹配到了则会返回一个元组类型 return result def fan_pai(): n = 0 #循环操作5次,也就是翻牌5次 while n<3: n +=1 #等待1秒 time.sleep(1) # 移动鼠标到牌的位置 moveTo(x=1051, y=390) # 等待一些时间,避免移动的同时点击 time.sleep(1) # 点击翻牌 click() time.sleep(1) #匹配到了图像,就会返回元组,没匹配到就返回None if use_locateonscreen() != None: #进入到if里,就代表有放弃界面 #移动到系统提示界面的x位置 moveTo(x=1338, y=440) #等待1秒 time.sleep(1) #点击x关闭 click() # 等待1秒 time.sleep(1) #移动到放弃 moveTo(x=1133, y=828) # 等待0.5秒 time.sleep(1) # 点击放弃 click() #入口 if __name__ == '__main__': #调用函数 fan_pai() print("运行结束!")
部分游戏无法控制鼠标解决方法:
在有些游戏中,pyautogui模块会失效,可以尝试使用pydirectinput第三方模块。
pydirectinput模块的内容和pyautogui差不多,pydirectinput使用moveTo(坐标x,坐标y,relative=True),设置relative参数为True并让程序获得管理员权限,可以几乎在所有游戏中实现鼠标移动。
结尾:
对于pyautogui模块的介绍,就到这了。强调一下,这并非pyautogui的全部内容,但是我觉得对于日常来说已经够用了。
pyautogui模块简单,易用。我认为它是非常优秀的第三方模块,这也正是python好用的原因。