💻

键鼠自动化

一、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")