一、PyAutoGui键鼠操作
1、坐标判断
(1)获取鼠标当前坐标
import pyautogui as pg import pyperclip as cp # 获取鼠标当前位置 pg.position() # 持续跟进位置 while True: print(pg.position()) time.sleep(1)
(2)获取屏幕尺寸
pyautogui.size()
(3)判断指定坐标是否在屏幕内
pyautogui.onScreen(x, y)
2、模拟鼠标
(1)鼠标点击
# 单击 pyautogui.click() # 模拟鼠标左键点击 pyautogui.click(100, 150) # 左击坐标(100,150) pyautogui.click(100, 150, button='left') # 左击坐标(100,150) pyautogui.click(100, 150, button='middle') # 中击坐标(100,150) pyautogui.click(100, 150, button='right') # 右击坐标(100,150) # 双击 pyautogui.doubleClick(100, 150) # 双击鼠标左键 pyautogui.rightClick(100, 150) # 双击鼠标右键 pyautogui.middleClick(100, 150) # 双击鼠标中键 pyautogui.tripleClick() # 鼠标当前位置左击三下 # 模糊拖动 pyautogui.mouseDown(button='right') # 鼠标右键按下 pyautogui.mouseUp(button='right') # 鼠标右键再松开 pyautogui.mouseUp(button='right', x=100, y=200) # 移动到(100, 200)位置,然后松开鼠标右键
(2)鼠标移动
pyautogui.moveTo(x, y, duration=num_seconds) # 在 num_Second 秒内将鼠标移动到指定坐标 pyautogui.moveRel(xOffset, yOffset, duration=num_seconds) # 相对于鼠标当前位置移动 pyautogui.dragTo(x, y, duration=0, button='left', tween=pyautogui.linear) # 按住鼠标左键并移动到屏幕上的绝对位置。 # 'left'(左键)'middle'(中键)'right'(右键) # pyautogui.easeInOutQuad(先慢后快再慢) # pyautogui.easeInQuad(加速移动) # pyautogui.easeOutQuad(减速移动) # pyautogui.linear(直线轨迹) pyautogui.dragRel(x, y, duration=0, button='left', tween=pyautogui.linear) # 相对于鼠标当前位置为基准,移动相对的距离
(3)鼠标滚轮
pyautogui.scroll(clicks, x=moveToX, y=moveToY) # 在(x,y)坐标滚动clicks次 # 正值表示向上滚动,负值表示向下滚动 # 如果不指定 x 和 y,则默认从当前鼠标位置开始
3、故障保险
(1)pyautogui.PAUSE = 2.5
设置每个 PyAutoGUI 操作之间的全局延迟时间,以秒为单位。
(2)pyautogui.FAILSAFE = True
启用或禁用故障保护机制。如果鼠标移动到屏幕左上角
(0, 0)
,程序会抛出 pyautogui.FailSafeException
异常并停止运行。4、键盘控制
(1)文本输入
pyautogui.typewrite()
/ pyautogui.write()
pyautogui.write("Hello, World!", interval=0.2) # 每个字符之间延迟 0.2 秒
(2)单键点击
pyautogui.press("enter")
(3)按钮按下和释放
pyautogui.keyDown("shift")
pyautogui.keyUp("shift")
(4)快捷键
pyautogui.hotkey("ctrl", "s")
按键列表:
字母和数字
"a"
,"b"
,"1"
,"2"
, 等等。
特殊按键
- 回车:
"enter"
- 空格:
"space"
- 退格:
"backspace"
- Tab:
"tab"
- Shift:
"shift"
- Ctrl:
"ctrl"
- Alt:
"alt"
- 功能键:
"f1"
,"f2"
, 等。
方向键
- 上:
"up"
- 下:
"down"
- 左:
"left"
- 右:
"right"
符号
","
,"."
,"+"
,"-"
, 等等。
5、消息框
pyautogui.alert('这将显示带有确定按钮的文本。') pyautogui.confirm('这将显示带有确定和取消按钮的文本。') pyautogui.prompt('这样用户就可以输入一个字符串,然后按确定。')
6、截图功能
(1)截图当前窗口
p
imageFilename
:- 可选,字符串类型,指定保存截图的文件名。
- 如果提供,截图将保存到该文件;如果省略,返回的是截图的
Pillow
图像对象。
region
:- 可选,元组类型
(x, y, width, height)
。 - 指定屏幕上的截图区域:
x, y
:起始点的屏幕坐标(左上角)。width, height
:截图区域的宽度和高度。
【1】 pyautogui.screenshot("screenshot.png") 【2】 # 截取屏幕左上角区域 (0, 0) 到宽 300、高 200 的区域 region = (0, 0, 300, 200) screenshot = pyautogui.screenshot(region=region) # 保存截图 screenshot.save("region_screenshot.png")
(2)查找图像
获取图标位置
image
:- 字符串或图像对象,指定需要匹配的模板图像。
- 路径需要为英文路径
region
:- 可选,指定屏幕的搜索区域
(x, y, width, height)
。
confidence
(可用 OpenCV 时):- 浮点数,匹配的置信度(0~1)。
- 默认是
1.0
,即要求完全匹配。
获取图标中心位置
返回所有图标位置
屏幕颜色检查
pyautogui.pixel()
和 pyautogui.pixelMatchesColor()
# 查找屏幕上 "button.png" 的位置 button_location = pyautogui.locateOnScreen("button.png") print(button_location) # 查找图像中心的位置 button_center = pyautogui.locateCenterOnScreen("button.png") print(button_center) # 找到所有匹配 "button.png" 的位置 for pos in pyautogui.locateAllOnScreen("button.png"): print(pos) # 获取屏幕 (100, 200) 像素的颜色 color = pyautogui.pixel(100, 200) print(color) # 输出为 RGB 值,例如 (255, 255, 255) # 检查像素颜色是否匹配 is_match = pyautogui.pixelMatchesColor(100, 200, (255, 255, 255)) print(is_match) # True 或 False
二、pyperclip文本复制
仅处理文本数据
1、复制文本
pyperclip.copy("Hello")
2、读取粘贴板
text = pyperclip.paste() print(f"剪贴板中的内容是: {text}")
三、pynput监听
(1)鼠标监听
from pynput import mouse # 移动监听 def on_move(x, y): print('鼠标移动到了:{}'.format((x, y))) # 点击监听 def on_click(x, y, button, pressed): print('鼠标按键:{},在位置处 {}, {} '.format(button, (x, y), '按下了' if pressed else '释放了')) # 滚动监听 def on_scroll(x, y, dx, dy): print('滚动中... {} 至 {}'.format('向下:' if dy < 0 else '向上:', (x, y))) # 构造监听器对象,方式【1】: (监听哪几种类型事件) with mouse.Listener( on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener: # 构造监听器对象,方式【2】(可替换上面with)(监听哪几种类型事件) listener = mouse.Listener( on_move=on_move, on_click=on_click, on_scroll=on_scroll) # 监听启动方式【1】:阻断式 listener.join() # 监听启动方式【2】:非阻断式 listener.start() # 停止监听: # 【1】任何位置调用 pynput.mouse.Listener.stop # 【2】在上面3个回调方法中,只要有return False即可停止监听。
(2)键盘监听
方式一
from pynput import keyboard def on_press(key): try: print('字母键: {} 被按下'.format(key.char)) except AttributeError: print('特殊键: {} 被按下'.format(key)) def on_release(key): print('{} 释放了'.format(key)) if key == keyboard.Key.esc: # 释放了esc 键,停止监听 return False
方式二
from pynput import keyboard # 监听键盘键入 with keyboard.Events() as events: for event in events: # 监听esc键,释放esc键,停止监听。 if event.key == keyboard.Key.esc: print('接收到事件 {}, 停止监听'.format(event)) break else: if isinstance(event, keyboard.Events.Press): print('按下按键 {} '.format(event)) elif isinstance(event, keyboard.Events.Release): print('松开按键 {}'.format(event))
四、实例
(1)复制并粘贴
# 关闭pycharm,暂时写成延时 time.sleep(2) cp.copy("叼毛") pg.click() # 点击文本框聚焦 for _ in range(20): pg.hotkey('Ctrl', 'V') pg.hotkey("enter")