【pynput】鼠标行为追踪并模拟
文章目录
- 前言
- 基本思路
- 安装依赖包
- 实时鼠标捕获
- 捕获鼠标位置
- 捕获鼠标事件
- 记录点击内容
- 效果图
- 实时按键捕获
- 控制按键操作
- 捕获按键事件
- 组合键记录区间设置
- 用户操作记录与回溯
- 基本思路
- 完整代码
- 效果图
利用本文内容从事的任何犯法行为和开发与本人无关,请理性利用技术服务大家,创建美好和谐的社会,让人们生活从繁琐中变得更加具有创造性!
前言
这前面文章中,提到了【实时屏幕捕获】的内容,这篇文章则是为大家介绍在现代计算机环境中,鼠标行为追踪的有效的方法,并通过记录和分析用户的鼠标操作,可以减少重复性工作,提高工作效率。尤其是在一些固定且重复的任务中,如接口测试、参数测试等,鼠标行为追踪为自动化提供了可能。
类似于手机上面的语言助手,不是有一个特定语言执行特定动作的功能吗,这个就类似于它,目前之所以做鼠标行为追踪并模拟是为了后面开展更加高级的功能。
基本思路
- 利用按键或时间限制捕获时间段
- 利用 OpenCV 实现鼠标位置点的追踪
- 记录每次操作位置点并回溯
安装依赖包
首先,我们需要安装所需的库。在终端或命令提示符中执行以下命令:
pip install opencv-python pyautogui numpy pynput
opencv-python:用于提供了丰富的图像处理和计算机视觉算法
pyautogui:用于捕获屏幕画面
numpy:用于处理大型多维数组和矩阵,以及执行与数据结构相关的数学运算
pynput:用于捕获以及控制鼠标和键盘
实时鼠标捕获
捕获鼠标位置
通过 position 属性来获取鼠标的位置,可以清晰地判断用户操作的区域:
from pynput import mouse as mos# 鼠标控制器
mouse = mos.Controller()
# 获取当前鼠标位置
mouse.position

捕获鼠标事件
鼠标事件有三种分为:鼠标移动、点击以及滚轮滚动:
# 移动监听
def on_move(x, y):print(f'鼠标移动到了:{(x, y)}')# 点击监听
def on_click(x, y, button, pressed):print(f'鼠标按键:{button},在位置处 {(x, y)}, {"按下了" if pressed else "释放了"} ')if not pressed:# 停止监听return False# 滚动监听
def on_scroll(x, y, dx, dy):print(f'滚动中... {"向下:" if dy < 0 else "向上:"} 至 {(x, y)}')# 构造监听器对象
listener = mos.Listener(on_move=on_move,on_click=on_click,on_scroll=on_scroll)# 监听启动
listener.start()

记录点击内容
根据鼠标点击来记录用户点击内容,可以有效地分析用户的行为和爱好,更好地像学徒一样去理解用户的行为,从而达到掌握其技巧:
import pyautogui
import numpy as np
import cv2user_click_pos = {'event': None, 'position': None}# 获取屏幕画面并保存
def save_screen():# 获取屏幕截图screenshot = pyautogui.screenshot()# 将截图转换为 OpenCV 格式screen_img = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)# 保存截图cv2.imwrite("screen_img.png", screen_img)# 点击监听并记录用户点击事件
def on_click(x, y, button, pressed):save_screen()user_click_pos['event'] = buttonuser_click_pos['position'] = (x, y)if not pressed:# 停止监听return False# 构造监听器对象
listener = mos.Listener(on_click=on_click)# 监听启动
listener.start()

效果图

实时按键捕获
控制按键操作
通过控制按键的按下 press 和释放 release 来打开资源管理器:
from pynput import keyboard as kbd# 键盘控制器
keyboard = kbd.Controller()# 按下 Win + E 打开资源管理器
keyboard.press(kbd.Key.cmd)
keyboard.press('e')
keyboard.release(kbd.Key.cmd)
keyboard.release('e')
捕获按键事件
按键分为三种,一种是特殊键,另一种是字母键,还有一种是组合键,事件分为两种:按下以及释放:
# 键盘按下
def on_press(key):try:print(f'字母键: {key.char} 被按下')except AttributeError:print(f'特殊键: {key} 被按下')# 按键释放
def on_release(key):print('{} 释放了'.format(key))if key == kbd.Key.esc:# 释放了 esc 键,停止监听return False# 构造监听器对象
with kbd.Listener(on_press=on_press,on_release=on_release) as listener:# 监听启动listener.join()

组合键记录区间设置
根据不同的按键效果来指定不同的指令,例如利用 ctr + s 开始记录鼠标操作,Esc 则退出记录过程:
_KEY_Press = {'ctrl+s': False,
}# 键盘按下
def on_press(key):try:print(key)if key.char == "\x13":_KEY_Press["ctrl+s"] = Falseprint(f'按下组合键 ctrl + s')except AttributeError as e:if key == kbd.Key.esc:_KEY_Press["ctrl+s"] = Falsereturn False# 按键释放
def on_release(key):try:if key.char == "\x13":_KEY_Press["ctrl+s"] = Trueprint(f'释放组合键 ctrl + s')except AttributeError:if key == kbd.Key.esc:_KEY_Press["ctrl+s"] = Falsereturn False# 构造监听器对象
with kbd.Listener(on_press=on_press,on_release=on_release) as listener:# 监听启动listener.join()

用户操作记录与回溯
当熟练了解以后,就可以愉快地使用这些零零散散的知识并加以应用从而达到预想的效果。
基本思路
以微信给别人发短信为例:
- 记录鼠标点击位置
- 记录按键输入内容
- 回溯上面记录操作
完整代码
import time
from datetime import datetime
from pynput import keyboard as kbd
from pynput import mouse as mos_KEY_Press = {# 开始记录操作'ctrl+s': False,# 开始回溯操作'ctrl+r': False,# 结束捕获'esc': False
}# 用户行为操作记录:{type: mouse key, position: (), event: '', char: '', time: 0, }
User_Active_List = []# 开始记录时间
start_time = None
# 开始回溯时间
run_time = None
# 鼠标控制器
mouse = mos.Controller()
# 键盘控制器
keyboard = kbd.Controller()# 操作回溯
def run_active(list):pre_time = 0for item in list:time.sleep(item['time'] - pre_time)if item['type'] == 'mouse':mouse.position = item['position']mouse.click(item['event'], 1)if item['type'] == 'key':keyboard.press(item['char'])keyboard.release(item['char'])print(item)pre_time = item['time']print("回溯完成!")# 按键按下
def on_press(key):global User_Active_Listtry:if key.char == "\x13":_KEY_Press["ctrl+r"] = False_KEY_Press["ctrl+s"] = FalseUser_Active_List = []elif key.char == "\x12":_KEY_Press["ctrl+s"] = False_KEY_Press["ctrl+r"] = Falseelif _KEY_Press["ctrl+s"]:# 记录按键User_Active_List.append({'type': 'key','char': key,'time': (datetime.now() - start_time).total_seconds(),})except AttributeError:if key == kbd.Key.esc:print(f'按键捕获退出!')_KEY_Press["ctrl+s"] = False_KEY_Press["ctrl+r"] = False_KEY_Press["esc"] = Truereturn Falseelif _KEY_Press["ctrl+s"]:# 记录按键User_Active_List.append({'type': 'key','char': key,'time': (datetime.now() - start_time).total_seconds(),})# 按键释放
def on_release(key):global start_time, run_timetry:if key.char == "\x13":_KEY_Press["ctrl+s"] = Truestart_time = datetime.now()print(f'开始记录操作...')if key.char == "\x12":_KEY_Press["ctrl+r"] = Truerun_time = datetime.now()print(f'开始回溯操作...')run_active(User_Active_List)except AttributeError:if key == kbd.Key.esc:print(f'按键捕获退出!')_KEY_Press["ctrl+s"] = False_KEY_Press["ctrl+r"] = False_KEY_Press["esc"] = Truereturn False# 构造按键监听对象
key_listener = kbd.Listener(on_press=on_press,on_release=on_release)# 监听启动
key_listener.start()# 记录用户点击事件
def on_click(x, y, button, pressed):global User_Active_Listif _KEY_Press["esc"]:print(f'鼠标捕获退出!')return Falseelif _KEY_Press["ctrl+s"] and pressed:User_Active_List.append({'type': 'mouse','position': (x, y),'event': button,'time': (datetime.now() - start_time).total_seconds(),})# 构造监听器对象
mos_listener = mos.Listener(on_click=on_click)# 监听启动
mos_listener.start()

效果图
鼠标按键行为回溯
相关文章:
【pynput】鼠标行为追踪并模拟
文章目录 前言基本思路安装依赖包实时鼠标捕获捕获鼠标位置捕获鼠标事件记录点击内容效果图 实时按键捕获控制按键操作捕获按键事件组合键记录区间设置 用户操作记录与回溯基本思路完整代码效果图 利用本文内容从事的任何犯法行为和开发与本人无关,请理性利用技术服…...
docker小白第十天
redis集群主从容错切换案例 3主3从的redis集群,某个主机宕机了,需要对应的从机补位。 docker exec -it redis-node-1 /bin/bash # 进入容器1的命令行 redis-cli -p 6381 # 进入节点1的命令行 cluster nodes # 查看集群信息可以看到1号和6号对应是主从关…...
Apache SSI 远程命令执行漏洞
一、环境搭建 二、访问upload.php 三、写shell <!--#exec cmd"id" --> 四、访问 如图所示,即getshell成功!...
阿里云30个公共云地域、89个可用区、5个金融云和政务云地域
阿里云基础设施目前已面向全球四大洲,公共云地域开服运营30个公共云地域、89个可用区,此外还拥有5个金融云、政务云地域,并且致力于持续的新地域规划和建设,从而更好的满足用户多样化的业务和场景需求。伴随着基础设施的加速投入和…...
Linux驱动开发之杂项设备注册和Linux2.6设备注册
目录 一、杂项设备注册 杂项设备注册简介 杂项设备注册特点: 杂项设备注册相关API misc_register() misc_deregister() 杂项设备注册相关例程 例程简介 源码分享 二、Linux 2.6设备注册 Linux2.6设备注册简介 Linux 2.6设备注册特点 Linux2.6设备注册流程 Linu…...
javafx写一个文档编辑器
文本编辑器是一种用于编辑纯文本文件的工具。它具有基本的文本编辑功能,如插入、删除、复制、粘贴等。文本编辑器通常不具备格式化文本、排版和图形编辑等高级功能,专注于纯文本的编辑。常见的文本编辑器包括记事本(Notepad)、Sublime Text、Visual Studio Code、Atom、Emacs…...
PHP与Angular详细对比 帮助你选择合适的项目技术
开发可有效扩展并提供诺克斯堡级安全性的Web应用程序和网站是每个开发人员的梦想。而使用这样的产品是每个用户的愿望。因此,为您的项目选择最合适和可靠的技术非常关键。 虽然PHP和Angular是完全不同的技术——PHP与JavaScript是一个更恰当的比较——但它们都广泛…...
基于立锜RTQ7882,支持全协议及DP显示功能的PD快充方案
在上一篇文章【基于RTQ7882的车载PD快充方案 - 大大通 (wpgdadatong.com)】中,已经对立锜科技(Richtek)及主打产品RTQ7882的基本功能作了介绍。 本文将分享RTQ7882近期新增的功能,以及其Cost Down版本。 旨…...
2023-12-25 LeetCode每日一题(不浪费原料的汉堡制作方案)
2023-12-25每日一题 一、题目编号 1276. 不浪费原料的汉堡制作方案二、题目链接 点击跳转到题目位置 三、题目描述 圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。 给你两个整数 tomatoSlices …...
JavaScript 基础通关
快速熟悉 JavaScript 的基础语法,比较高级的比如事件放在后面的笔记中。 JavaScript 1. JavaScript 介绍 1.1 JavaScript 基本介绍 JavaScript 是一门运行在客户端(浏览器)的编程语言,实现人机交互的效果。实现网页特效、表单验…...
目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现
前言 损失函数是用来评价模型的预测值和真实值一致程度,损失函数越小,通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段,如果我们想让预测值无限接近于真实值,就需要将损失值降到最低…...
今年努力输出的嵌入式Linux视频
今年努力了一波,几个月周六日无休,自己在嵌入式linux工作有些年头,结合自己也是一直和SLAM工程师对接,所以输出了一波面向SLAM算法工程师Linux课程,当然嵌入式入门的同学也可以学习。下面是合作的官方前面发的宣传文章…...
python非常好用的文件系统监控库
如果你不想使用Watchdog库,而是自己编写代码来监视文件系统的变化,可以使用Python的内置模块os和time来实现。 下面是一个简单的示例代码,演示如何使用os和time模块来监视文件系统中文件的变化: pythonimport osimport timedef m…...
基于SpringBoot的电影购票系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的电影购票系统,java项目…...
Spring系列:Spring如何解决循环依赖
❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...
netty源码:(40)ReplayingDecoder
ReplayingDecoder是ByteToMessageDecoder的子类,我们继承这个类时,也要实现decode方法,示例如下: package cn.edu.tju;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handle…...
Apache Doris (五十五): Doris Join类型 - Colocation Join
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Colocation Join原理...
计算机组成原理复习7
内存管理 文章目录 内存管理存储器概述存储器的分类按在计算机中的作用(层次)分类按存储介质分类按存取方式分类按信息的可保存性分类 存储器的性能指标存储容量单位成本存储速度:数据传输率数据的宽度/存储周期 存储器的层次化结构多级存储系…...
python使用openpyxl操作excel
文章目录 前提读取已有excel创建一个excel工作簿对象创建excel工作簿中的工作表获取工作表第一种:.active 方法第二种:通过工作表名获取指定工作表第三种:.get_sheet_name() 修改工作表的名称数据操作写入数据按单元格写入通过指…...
使用keepalived时虚拟IP漂移注意事项
什么是Keepalived服务 keepalived是一个开源的软件项目,用于实现高可用性(HA)的网络服务器负载均衡和故障转移。它允许将多台服务器组合在一起,形成一个虚拟服务器集群,实现负载均衡和故障转移。 keepalived的核心功…...
基于MCP协议构建AI助手业务工具适配器:从原理到实践
1. 项目概述:用MCP协议为AI助手装上“业务之眼”如果你和我一样,日常开发中需要频繁地在Stripe看支付数据、在Sentry查线上错误、在Notion里翻文档、在Linear跟进任务状态,那你一定懂那种在十几个浏览器标签页和不同SaaS平台间反复横跳的疲惫…...
VTOL无人机微多普勒特征分析与6G感知技术
1. VTOL无人机微多普勒特征分析的技术背景垂直起降(VTOL)无人机因其独特的飞行能力在军事和民用领域获得广泛应用,但同时也带来了空域管理的新挑战。传统雷达识别方法主要依赖目标的宏观运动特征,难以精确区分VTOL的不同飞行阶段。…...
《QGIS空间数据处理与高级制图》008:OGR2OGR命令行工具核心优势
作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...
基于Rust的飞书多智能体协作平台:中文联网搜索与智能交接实战
1. 项目概述:一个面向飞书深度集成的智能体协作平台 如果你正在寻找一个能无缝接入飞书、支持中文联网搜索、并且能让多个AI智能体协同工作的本地化开源项目,那么 hongyuatcufe/moltis-feishu 这个分支绝对值得你花时间研究。它不是一个简单的聊天机器…...
终极指南:如何用ChatLaw构建你的免费中文法律AI助手
终极指南:如何用ChatLaw构建你的免费中文法律AI助手 【免费下载链接】ChatLaw ChatLaw:A Powerful LLM Tailored for Chinese Legal. 中文法律大模型 项目地址: https://gitcode.com/gh_mirrors/ch/ChatLaw 面对复杂的法律问题,你是否…...
基于Helm与Kubernetes的以太坊节点自动化部署与运维实战
1. 项目概述:当以太坊遇见Kubernetes如果你和我一样,在区块链基础设施领域摸爬滚打多年,从早期手动编译客户端、配置systemd服务,到后来用Docker Compose编排节点,每一步都伴随着大量的重复劳动和运维痛点。当节点数量…...
企业微信消息发送踩坑实录:.NET Core下处理AccessToken过期与消息安全的最佳实践
企业微信消息发送实战:.NET Core中的AccessToken管理与消息安全策略 当企业微信API集成到生产环境时,开发者常会遇到两个看似简单却暗藏玄机的问题:AccessToken突然失效导致消息发送失败,以及敏感信息传输时的安全风险。本文将分享…...
Encounter/Innovus GIFT TCL 脚本流程索引清单
目录 一、 布局阶段 (Placement) 二、 布线阶段 (Routing) 三、 时序阶段 (Timing) 四、 电源阶段 (Power) 五、 IO 与端口处理 六、 调试与辅助工具 一、 布局阶段 (Placement) 脚本名称 核心用途 调用场景 userAddAllHInsts.tcl 为源模块中的每个扇出添加缓冲器 解决高扇…...
企业级长文档AI落地避坑指南,从PDF解析失真到语义断裂修复——Claude 2026六大隐性能力详解
更多请点击: https://intelliparadigm.com 第一章:PDF解析失真问题的根源与本质诊断 PDF 文件虽为“便携式文档格式”,但其内部结构高度异构——文本可能嵌入在图形路径中、字体被子集化或完全缺失、字符编码映射断裂,甚至存在跨…...
终极实时窗口分辨率调整工具SRWE:打破屏幕限制的完整指南
终极实时窗口分辨率调整工具SRWE:打破屏幕限制的完整指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾为游戏截图分辨率太低而烦恼?是否需要在不同设备上测试UI布局却要反复重…...
