今天来聊聊python中非常酷炫的功能,
控制滑鼠与键盘,
理论上,如果你程序功力非常强的话,
甚至可以用这个模组写出一个「游戏插件」,
让程序操控你的滑鼠与键盘帮你玩游戏
本文测试环境: anaconda, spyder, python3.7
安装
pyautogui并非内建模组,
需要用pip install pyautogui安装
注意事项
由于你把滑鼠与键盘交给电脑控制,
程序逻辑需小心撰写,
避免自己不小心就无法控制自己的滑鼠
安全措施:
在程序内加上
pyautogui.PAUSE = 3
使程序每次使用pyautogui的函数前暂停三秒再执行,
在暂停三秒的期间快速移动滑鼠关掉程序
一、滑鼠篇
取得滑鼠座标
import pyautogui
import time
width, height = pyautogui.size() # 取得萤幕宽度、高度
print(width, height)
#每隔一段时间取得滑鼠座标
for i in range(20):
time.sleep(1) # 暂停一秒
xloc, yloc = pyautogui.position() # 获得滑鼠游标
print(xloc,yloc, end='\r', flush= True)
程序的意思是先取得自己电脑的萤幕宽度、高度,
然后在for迴圈中,
每隔一秒钟印出你现在的滑鼠座标
移动滑鼠
要移动滑鼠有moveTo和moveRel两种方法,
分别指定滑鼠是以「绝对位置」还是「相对位置」
两个实例(duration参数设置移动的时间):
绝对位置
"""
程序功能: 让滑鼠移到指定位置
"""
import pyautogui
x,y = 300,300
for i in range(3):
pyautogui.moveTo(x,y,duration=0.5)
pyautogui.moveTo(x+1200,y,duration=0.5)
pyautogui.moveTo(x+1200,y+400,duration=0.5)
pyautogui.moveTo(x,y+400,duration=0.5)
相对位置
"""
程序功能: 让滑鼠移动某个位移
"""
import pyautogui
for i in range(3):
pyautogui.moveRel(300,0,duration=0.5)
pyautogui.moveRel(0,300,duration=0.5)
pyautogui.moveRel(-300,0,duration=0.5)
pyautogui.moveRel(0,-300,duration=0.5)
按下滑鼠
用click()可以让滑鼠按下再放开,
基础语法为:click(x, y, button='xxx')(xxx可以是left, middle, 或right,若不指定预设按滑鼠左键)
举例来说:
import pyautogui
pyautogui.click(300, 400, button='right', duration=1)
这个指令可以让滑鼠花一秒钟移动到座标(300, 400)的位置,
然后按下滑鼠右键
click()可以让滑鼠按下再放开的动作,
如果要拆解成「按下」和「放开」两个动作,
可以用mouseDown()和mouseUp()
拖曳滑鼠
若是想要「拖曳滑鼠」(按住滑鼠左键不放,移动滑鼠直到目的地再放开),
可以用dragTo/dragToRel指令,
概念与moveTo/moveRel差不多
二、键盘篇
基础输入的指令为typewrite()(注意不能输出中文),
首先执行程序:
import pyautogui
import time
print("请在5秒内打开记事本并设为焦点视窗")
time.sleep(5) #程序暂停五秒,让你有时间打开记事本
pyautogui.typewrite(['H','e','l','l','o'],0.1) #每隔0.1秒输出一个字
然后打开你电脑上的记事本,
便可以用每隔0.1秒输出一个字的速度打出Hello了
就先简介到这边啦,读者如有兴趣深究,首推参考资料的这本书,
相信应该写的比小马更详细
参考资料
(书本) Python入门迈向高手之路王者归来/ 出版社:深石/ 作者: 洪锦魁
推荐:
okteto终极玩法-改造为"VPS"教程
qqq409640976大佬: 继上一帖子,的初级玩法:https://www.hostloc.com/thread-666705-1-1.html 此教程,可以在okteto上搭建一个接近VPS的c…
【心得】无瑕的程序码
大师说的 BjarneStroustrup 我喜欢我的程序优雅又有效率。 逻辑直截了当,使的错误无处可躲。 尽量降低程序的相依性,以减轻维护上的功夫。 Booch Clean Code是简单又直接明了…