一提到自动化,想必很多人都有需求。对于一些重复的,批量的工作,我们总是感到头疼。这种时候,就不如把工作交给计算机来做了。电脑虽然很蠢,没有人的逻辑思维,你需要明确告诉它每一步需要执行的东西,但是电脑有一个人永远无法超过的优点,就是在保证正确率的情况下,以飞快的速度解决问题。简单来说就是,你让他往东,他绝不往西而且反应很快。下面我们就用python的pyautogui模块实现一些基本的自动化控制。
————————————————————————————————————————
〇、安装pyautogui模块
这很简单,在安装完python的计算机上,打开终端或命令提示符,输入pip install pyautogui 即可
一、控制鼠标
要想控制鼠标,最基本的要求是我们应该能找到鼠标现在所处的坐标
·····我们要用到position()方法,代码和运行效果如下。
import pyautogui #调用pyautogui模块
x,y=pyautogui.position() #获取鼠标光标位置
print(x,y) #将坐标值输出在屏幕上
———————————————————————————————————————
import pyautogui #调用pyautogui库
pyautogui.moveTo(100,100,1) #将鼠标用一秒时间移动到(100,100)这个坐标点上
·······第二个函数pyautogui.moveRel()是将光标移动一段距离,代码如下:
import pyautogui #调用pyautogui库
pyautogui.moveRel(100,100,1) #将光标沿右下移动,其在X,Y两轴方向上的分量均为100,共用1秒时间
pyautogui.moveRel(-100,-100,1) #将光标沿左上方移动,其余同上
另外,pyautogui.move() 和 pyautogui.moveRel() 效果是相同的
———————————————————————————————————————
3. click() 方法
·······要想真正实现自动化控制,只知道鼠标在哪里和如何移动鼠标是远远不够的,我们必须知道怎么点击鼠标。这就用到了click()方法。
这个方法可以传进去三个参数,即 pyautogui.click(x,y,button) 。x,y是需要点击的坐标,button是需要点击的按键。它有三个取值,分别是‘left’(左键),‘right’(右键),‘middle’(滑轮)如果你不告诉程序 x 和 y ,而只让它去点击,那么程序会在当前鼠标所在的位置点击鼠标。示例代码如下:
import pyautogui #调用pyautogui库
pyautogui.click(100,100,button='left') #用鼠标左键点击坐标点(100,100)
当然,click() 这个方法只能单击鼠标,并且你每次点击鼠标都要设置用哪一个键,这就比较麻烦,所以click() 方法被二次封装,形成了以下一些常用方法:
① pyautogui.doubleClick(100,100,button=‘right’) //右键双击鼠标。
② pyautogui.rightClick(x,y) //右键单击鼠标
③pyautogui.middleClick(x,y)//单机中间(滑轮)
注:一次鼠标点击事件其实是由两个子方法mouseDown() 和 mouseUp()还有moveTo()等封装形成的。
———————————————————————————————————————
4.dragTo() 和 dragRel()方法
有时候我们需要对一个窗口进行拖拽,或者画一个对角矩形,这时候dragTo() 和 dragRel()是不错的选择。
·······这两个方法可以类比前面的moveTo() 和 moveRel() 使用,用法完全一样,但是时间一定不要设置的太短,否则程序可能会崩溃或错乱。
———————————————————————————————————————
5.scroll()方法
·······对于鼠标的操作基本上功能都有了,但我们还少一个最基本的操作,就是滚滑轮。
滚滑轮我们需要用到pyautogui.scroll()这个方法。这个方法只接受一个参数,就是向上或者向下滚动,正值屏幕向下滚动(相当于向上滚滑轮),负值屏幕向上滚动(相当于向下滚滑轮)。实例代码如下:
import pyautogui#调用pyautogui库
pyautogui.scroll(-500)#向上卷动屏幕500单位,话说这单位到底是什么我还真没有仔细研究过,用的时候再说吧
最后,需要注意的是,如果我们点击鼠标,或者拖拽,滚动等操作太快的话,电脑可能处理不好,造成程序瘫痪,所以我们在调用了库之后,可以紧跟着在下一行打上pyautogui.PAUSE = 1。
这一行的作用是每一个pyautogui操作中间间隔1秒时间。其间隔可以自行设定,单位是秒。
到这里,所有鼠标操作已基本可以完成。
———————————————————————————————————————
·····················································································································———————————————————————————————————————
二、控制键盘
import pyautogui
pyautogui.keyDown('A') #按下键盘上的‘A’
pyautogui.keyUp('A') #松开'A'
pyautogui.keyDown('a') #按下键盘上的‘a’
pyautogui.keyUp('a') #松开'a'
pyautogui.keyDown('enter') #按下键盘上的‘enter’回车键
pyautogui.keyUp('enter') #松开'enter'回车键
———————————————————————————————————————
2.press()方法
通过前两个方法,其实我们已经可以去操作键盘了,但是我们会感觉这样按下松开的,特别麻烦,所以我们就将他们封装成了press()方法。这个方法表示把某个键按一下(即按下之后松开)。这个呢就像是之前介绍鼠标操作的时候,我们提了一下,click()函数是由mouseDown() 和 moseUp()等进行的二次封装。示例如下:
import pyautogui
pyautogui.press('4') #按一下键盘上的‘4’
pyautogui.press('shift')#按一下shift键
———————————————————————————————————————
3.hotkey()方法
还有一些情况下,我们需要同时按下多个键,看到这个方法的名字就知道这是热键而已
hotkey()接受一个字符串列表,其中,每一个元素都是一个数据键名。实列程序如下:
import pyautogui
pyautogui.hotkey('ctrl','c')#同时按下‘CTRL’和‘C’(复制快捷键)
———————————————————————————————————————
4.typewrite()方法
我们为了更简单的实现想文本框输入字符串的操作,这个方法真是必不可少。typewrite()方法接收两个参数,str 和 delay,即 typewrite(str,delay) 。str是要向文本框中输入的字符串,delay是每一个字符之间的时间间隔。其用法如下:
import pyautogui
pyautogui.typewrite('1234567890',1)#向文本框输入1234567890,每个字符间隔1秒,共用10秒
以下是在使用pyautogui的键盘操作时可以输入的数据键名:
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’]
至此,关于键盘的一切操作基本上都可以完成了。
———————————————————————————————————————
·····················································································································
———————————————————————————————————————
整体来讲,我们到这里已经可以实现一些自动化操作了,不过我们很快就发现,还有一个非常不方便的问题,阻止了我们迈向全自动的脚步。如果你要用鼠标点击一个图标(比如QQ),首先你得历尽艰辛找到QQ图标的位置,然后你才能点的准。当你千辛万苦的设置完之后,你发现你QQ的图标被人移动了位置,你又忘记了具体在什么地方。。。。┗|`O′|┛ 嗷~~这可如何是好?于是我们就想:如果能让程序自己找到QQ,那该有多好啊。莫急,下面我们来了解一下pyautogui模块中的屏幕操作,来赋予你的程序识别屏幕的能力,实现真正的自动化。(其实我主要是想写一个游戏脚本,有了这个真的是上能挂机刷宝箱,下能自动写文档。拳打南山敬老院,脚踢北海幼儿园。噢,扯远了·······)
———————————————————————————————————————
·····················································································································
———————————————————————————————————————
三、识别屏幕
这个板块我们那一个实例来说,我们的目的是将一个图标不管放到屏幕上的什么位置,都要自动化的找到并点击它。下面走一个详细流程。
import pyautogui
x,y=pyautogui.locateCenterOnScreen('E:/hehe.png')
print(x,y)
执行效果如下,可以看到,桌面上有一个qq.ico的图标文件,我在终端执行了代码后,程序输出的返回值就是qq.ico图标在桌面上的位置。
如果我用终端的窗口将qq.ico图标遮住呢?那么就变成了下图的情况,可见由于程序未在当前屏幕中找到相同的图标而异常出错。
那么想必大家对 locateCenterOnScreen() 这个方法的作用应该很明了了b吧。没``它就是现将当前屏幕截图,再于截的图中找出和你预设的目标图一样的部分,最后再返回这个部分的中点坐标而已。然后有了目标的位置,再加上之前鼠标和键盘的操作,不就行了吗?实话说,确实差不多了,但还有好多方便的方法我们需要了解一下:
①a = pyautogui.screenshot(r’C:\Users\ZDH\Desktop\PY\my_screenshot.png’) #截全屏,并且设置保存路径。
②a = pyautogui.screenshot(r’C:\Users\ZDH\Desktop\PY\region_screenshot.png’, region=(0, 0, 300, 400))#根据region给的范围截取区域屏幕
③x, y = pyautogui.center(a) # 获得文件图片在现在的屏幕上面的中心坐标
④pyautogui.locateAllOnScreen(r’C:\Users\ZDH\Desktop\PY\region_screenshot.png’)
for pos in pyautogui.locateAllOnScreen(r’C:\Users\ZDH\Desktop\PY\region_screenshot.png’):
···print(pos)#匹配图中所有与目标图像,返回列表,可用循环打印坐标。
⑤pix = pyautogui.screenshot().getpixel((220, 200)) # 获取坐标(220,200)所在屏幕点的RGB颜色
⑥pyautogui.pixelMatchesColor(100, 200, (255, 255, 255))#检查(100,200)的rgb是否为(255,255,255)返回布尔值。
那么到这里就要结束了,一切问题的答案,取之于互联网,反馈与互联网。
All done , enjoy and thank you for reading!!!