Python自动化操作库PyAutoGui
在Python编程的世界里,自动化操作是一个非常实用的技能。pyautogui
库为我们提供了强大的功能,能够模拟鼠标和键盘的操作,实现自动化任务。在学习过程中,我进行了一系列的代码实操,下面将详细记录我的学习过程和心得【tips:文章末尾有彩蛋】。
文章目录
1. 环境准备
首先,我们需要安装 pyautogui
和 pyperclip
库。可以使用以下命令进行安装:
pip install pyautogui pyperclip
2. 导入必要的库
在代码中,我们需要导入 time
、pyautogui
和 pyperclip
库:
import time
import pyautogui as pag
import pyperclip
3. 鼠标操作
3.1 鼠标移动
pyautogui
提供了两种鼠标移动的方法:moveTo()
和 move()
。
- 移动鼠标到指定位置,语法:
moveTo(x坐标,y坐标)
pag.moveTo(1, 1)
- 移动鼠标到指定位置,并设置移动时间,语法:
moveTo(x坐标,y坐标,移动时间)
pag.moveTo(20, 20, 1)
- 鼠标偏移和移动时间,语法:
move(x坐标,y坐标,移动时间)
pag.move(300, 300, 1)
3.2 获取屏幕分辨率和鼠标位置
- 获取屏幕分辨率,语法:
size()
x, y = pag.size() # 使用x和y来接收所获取到的结果
print(x, y)
- 获取鼠标位置,语法:
position()
x, y = pag.position() # 使用x和y来接收所获取到的结果
print(x, y)
- 实时获取鼠标位置,使用循环的思想可以实现
while 1:
x1, y1 = pag.position()
if x1 != x or y1 != y:
x, y = x1, y1
print(x, y)
3.3 鼠标点击
- 移动到指定位置并点击
pag.moveTo(335, 432)
time.sleep(1) # 这里表示休眠1s
pag.click()
- 点击多次,语法:
click(clicks=次数)
[关键字传参]
pag.click(clicks=2)
- 组合移动和点击,语法:
click(x坐标,y坐标,点击次数)
pag.click(335, 432, 2)
click()
函数参数说明:语法:pag.click(x位置,y位置,次数,点击间隔,点击方式,移动时长)
x
:x坐标
y
:y坐标
clicks
:点击次数
interval
:点击间隔时间
button
:left
(默认) /right
/middle
duration
:鼠标移动时间
pag.click(335,432,3,0.5,'right',2)
3.4 鼠标按下和抬起
- 鼠标右键按下,语法:
pag.mouseDown(x位置,y位置,按下方式)
pag.mouseDown(335, 432, 'right')
time.sleep(1)
- 鼠标右键抬起,语法:
pag.mouseUp(x位置,y位置,抬起方式)
pag.mouseUp(button='right')
3.5 鼠标滑轮滚动
语法:pag.scroll(整数)
正数向上滑动,负数向下滑动
for i in range(5):
pag.moveTo(200, 450)
pag.scroll(-200) # 负数向下滑动
time.sleep(2)
4. 键盘操作
4.1 键盘输入(不支持中文)
语法:pag.write(非中文字符串,输入字符时间间隔)
pag.write("shitong ", 0.2)
4.2 按键输入
语法:pag.press(按键,按键次数,时间间隔)
pag.press('enter', 2, 1)
4.3 热键操作
语法:pag.hotkey(组合按键1,组合按键2,...)
pag.hotkey('ctrl', 'v')
pag.press('enter')
4.4 更便捷的输出中文
因为pyautogui
无法直接输入中文,但可以借助pyperclip
处理剪贴板内容结合组合按键完成中文的输入!
a1 = '童童'
pyperclip.copy(a1)
pag.hotkey('ctrl', 'v')
pag.press('enter')
4.5 按键的按住和抬起
语法:pag.keyDown(按键,按下方式)
语法:pag.keyUp(按键,抬起方式)
pag.keyDown('shift')
pag.press('w')
pag.keyUp('shift')
pag.press('w')
5. 屏幕截图
pag.screenshot('1.png', (700, 700, 1199, 1199))
6. 消息框和输入框
- 显示消息框,语法:
alert(内容,标题,按钮)
# 消息框
pag.alert("success", 'title', 'click')
- 显示输入框,语法:
prompt(显示内容, 标题, 默认输入值)
# 输入框
a1 = pag.prompt('显示内容', '标题', '默认输入值')
print(a1)
7. 总结
通过学习和实操 pyautogui
库,我深刻体会到了它在自动化操作方面的强大功能。无论是模拟鼠标点击、键盘输入,还是进行屏幕截图和消息框交互,pyautogui
都能轻松应对。同时,结合 pyperclip
库,我们还能方便地处理中文输入。在实际应用中,我们可以利用这些功能来实现自动化测试、批量文件处理等任务,提高工作效率。
8. 彩蛋部分
8.1 实时获取鼠标位置源码
上面我们涉及到实时获取鼠标位置的知识点,这里写者为读者们准备了一份源码,读者们可以在自己的IDE中运行使用。在此之前一定要正确安装所需的运行环境及模块库,以确保正确执行!!!
import tkinter as tk
import pyautogui as pag
from pynput.mouse import Listener
def update_position():
global x, y, update_enabled
if update_enabled:
# 获取当前鼠标位置
x1, y1 = pag.position()
# 判断鼠标是否移动
if x1 != x or y1 != y:
# 拼接位置信息
s = str(x1) + ',' + str(y1)
# 更新 Label 的文本
label.config(text=s)
# 更新上一次的鼠标位置
x, y = x1, y1
# 每隔 100 毫秒调用一次 update_position 函数
root.after(100, update_position)
def on_click(x, y, button, pressed):
global update_enabled
if pressed:
# 当检测到鼠标点击时,停止更新位置
update_enabled = False
return False
def start_listening():
global mouse_listener
mouse_listener = Listener(on_click=on_click)
mouse_listener.start()
def restart_update():
global update_enabled
# 点击按钮后,将标志位设置为 True,继续更新位置
update_enabled = True
# 重新启动鼠标监听
start_listening()
root = tk.Tk()
root.title('屏幕位置查找')
root.geometry("300x230+700+304")
root.attributes('-alpha', 0.9, '-topmost', True)
root.resizable(False, False)
# 提示词
tk.Label(text="屏幕位置查找", font=("隶书", 16)).place(x=60, y=20)
tk.Label(text="鼠标位置:", font=("隶书", 16), fg='blue').place(x=20, y=70)
# 创建一个 Label 用于显示鼠标位置
label = tk.Label(text="0,0", font=("隶书", 16), fg='red', width=9)
label.place(x=150, y=70)
# 重置按钮
button = tk.Button(text='重新查找', font=("隶书", 14), width=8)
button.place(x=95, y=135)
# 初始化鼠标位置
x, y = pag.position()
# 标志位,用于判断是否继续更新位置
update_enabled = True
# 鼠标监听器对象
mouse_listener = None
# 为按钮绑定点击事件
button.config(command=restart_update)
# 启动更新函数
update_position()
# 启动第一次鼠标监听
start_listening()
root.mainloop()
8.2 消息轰炸脚本
接下来就是使用本章内容做一个超实用的消息轰炸脚本,写者想象有限,只充抛砖引玉。
import pyautogui,time,random,pyperclip
messages = ["在干嘛呀,怎么不回消息?","看到消息了回一下嘛~","理理我嘛,别装消失啦。","你是不是把我忘了?","快回我消息,不然我要生气咯!","怎么不理人呀,好难过。","我在等你的消息,看到了说一声。","别无视我嘛,回个消息不难吧。","你那边出什么事了吗?怎么不回消息。","回个消息呀,我有重要的事和你说。","我一直盯着手机等你回复呢。","能不能给点回应呀,我都快急死了。","拜托拜托,回我一下下啦。","你再不回我,我就要一直发消息咯。","为啥不回我呀,我很想和你聊天呢。","在忙什么这么专注,都不理我了。","我发的消息你看到了没呀?","别让我一直等呀,回个话嘛。","快出现,我有好玩的事情想告诉你。","不理我可不行哦,快给我点反应。","你是不是睡着了,要是睡着了就怪你哦。","我都等得不耐烦了,快回消息。","回个消息吧,我真的很需要你回应。","不回我消息,我会一直发的哟。","你是不是在故意躲着我呀?","给我个消息吧,不然我会一直惦记着。","怎么能这样,看到消息也不理我。","我已经等了好久了,快回复我。","你在做什么呢,回个消息分享一下嘛。","快回我,我已经准备好和你畅聊啦。","不理人可不好哦,快出现吧。","我的消息你什么时候能看到呀?","我在等你的消息等到花儿都谢了。","别让我一直发消息轰炸你哦。","回我消息,我保证不会打扰你太久。","你那边是不是信号不好收不到消息呀?","我有个超级搞笑的段子想讲给你听,快回我。","再不理我,我可要生气到冒烟啦。","快给我点回应,不然我要怀疑你是不是不爱我了。","看到消息了就说一声嘛,别让我瞎猜。","我有个秘密想和你说,快回我呀。","你怎么突然就不说话了呢,快回我消息。","别晾着我呀,我会很难过的。","我在期待着你的回复呢,快出现。","回个消息嘛,就简单说几个字也好呀。","你是不是被外星人抓走了,怎么不回我。","快回我消息,不然我要开始想各种不好的事情了。","我已经给你发了好多消息了,该回我了吧。","不理我的话,我可会一直缠着你的哦。","你到底在不在呀,给我点动静吧。","我真的很想和你聊聊天,快回我。","回个消息,别让我一直等下去啦。","你是不是在忙什么重要的事情呀?","我发的这些消息你真的都没看到吗?","快回我消息,我都不知道该干嘛了。","别无视我的消息呀,我会很失落的。","你再不回我,我就去找你啦。","我在等你回消息的时间里,感觉时间都变慢了。","回个消息嘛,让我知道你还在。","你是不是把手机丢一边了呀?","我有好多话想和你说,快给我个机会。","不理我可太伤我心了,快回我。","快出现呀,我有个惊喜想告诉你。","我的消息都快堆成小山啦,快处理一下。","你到底什么时候能回我消息呀?","别让我一直盼着你的回复呀,快回我。","我都开始担心你啦,回个消息报个平安吧。","回个消息嘛,不然我晚上都睡不好觉。","你是不是在和我玩躲猫猫呀,别躲啦。","我发的消息你就不能看一眼嘛?","快回我,我有个问题想和你讨论一下。","不理我可不行,我会一直发直到你回我。","你那边情况怎么样呀,回个消息说说呗。","我在等你的消息,等得望眼欲穿了。","回个消息吧,我不想一直发个不停。","你是不是在忙得不可开交呀?","给我点回应吧,我真的很需要。","快回我消息,我已经等得很着急了。","别让我一直干等呀,回个消息吧。","我有个计划想和你商量,快回我呀。","不理我我会很无聊的,快陪我说说话。","你到底有没有看到我的消息呀?","快回我,我有个好主意想和你分享。","再不理我,我要自己玩啦,哼。","回个消息嘛,不然我要一直缠着你。","你是不是在忙别的有趣的事情呀?","我发的消息你快看看呀,很重要的。","别让我一直猜你在干嘛,回个消息吧。","快回我消息,我已经等得有点不耐烦了。","不理我可不好玩哦,快回我。","你那边现在是什么情况呀,回个消息呗。","我在等你的消息,等到地老天荒了。","回个消息嘛,就当是可怜可怜我。","你是不是在忙着做什么好吃的呀?","快回我消息,我有个笑话想讲给你听。","不理我我会很孤单的,快陪陪我。","你到底什么时候有空回我消息呀?","别让我一直发这些消息呀,快回我。","我有个想法想听听你的意见,快回我。","不理我可太不友好了,快回我消息啦。","你是不是在忙工作忙得焦头烂额呀?","我发的消息你要是看到了就回一下嘛。","快回我,我有个好玩的视频想发给你。","再不理我,我可要哭啦,呜呜。","回个消息嘛,让我知道你一切都好。","你是不是在外面玩得太开心把我忘了?","我发的这些消息希望你能看到并回复我。","快回我消息,我已经等得迫不及待了。","不理我可不行哦,我会一直等下去的。"]
pyautogui.alert("请确保聊天框处于电脑右分屏模式且已经打开好友对话框!!!","警告!","已准备完毕")
num = pyautogui.prompt('请输入你要发送的消息数量','准备发送',20)
x, y = pyautogui.size()
try:
for i in range(int(num)):
a = random.randint(0,99)
pyperclip.copy(messages[a])
pyautogui.click(x*0.915,y*0.85,1)
pyautogui.hotkey('ctrl', 'v')
time.sleep(0.2)
pyautogui.press('enter')
except:
pyautogui.alert("执行错误!!!","警告!","退出程序")
以上就是我在学习 pyautogui
库过程中的详细笔记,希望对大家有所帮助。在后续的学习中,我将继续探索更多的功能和应用场景。