【pynput】鼠标行为追踪并模拟

这篇具有很好参考价值的文章主要介绍了【pynput】鼠标行为追踪并模拟。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

利用本文内容从事的任何犯法行为和开发与本人无关,请理性利用技术服务大家,创建美好和谐的社会,让人们生活从繁琐中变得更加具有创造性!

前言

这前面文章中,提到了【实时屏幕捕获】的内容,这篇文章则是为大家介绍在现代计算机环境中,鼠标行为追踪的有效的方法,并通过记录和分析用户的鼠标操作,可以减少重复性工作,提高工作效率。尤其是在一些固定且重复的任务中,如接口测试、参数测试等,鼠标行为追踪为自动化提供了可能。

类似于手机上面的语言助手,不是有一个特定语言执行特定动作的功能吗,这个就类似于它,目前之所以做鼠标行为追踪并模拟是为了后面开展更加高级的功能。

基本思路

  1. 利用按键或时间限制捕获时间段
  2. 利用 OpenCV 实现鼠标位置点的追踪
  3. 记录每次操作位置点并回溯

安装依赖包

首先,我们需要安装所需的库。在终端或命令提示符中执行以下命令:

pip install opencv-python pyautogui numpy pynput

opencv-python:用于提供了丰富的图像处理和计算机视觉算法

pyautogui:用于捕获屏幕画面

numpy:用于处理大型多维数组和矩阵,以及执行与数据结构相关的数学运算

pynput:用于捕获以及控制鼠标和键盘

实时鼠标捕获

捕获鼠标位置

通过 position 属性来获取鼠标的位置,可以清晰地判断用户操作的区域:

from pynput import mouse as mos

# 鼠标控制器
mouse = mos.Controller()
# 获取当前鼠标位置
mouse.position

【pynput】鼠标行为追踪并模拟,Py高级玩法,opencv,python

捕获鼠标事件

鼠标事件有三种分为:鼠标移动、点击以及滚轮滚动:

# 移动监听
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()

【pynput】鼠标行为追踪并模拟,Py高级玩法,opencv,python

记录点击内容

根据鼠标点击来记录用户点击内容,可以有效地分析用户的行为和爱好,更好地像学徒一样去理解用户的行为,从而达到掌握其技巧:

import pyautogui
import numpy as np
import cv2

user_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'] = button
	user_click_pos['position'] = (x, y)
	if not pressed:
	    # 停止监听
	    return False

# 构造监听器对象
listener = mos.Listener(on_click=on_click)

# 监听启动
listener.start()

【pynput】鼠标行为追踪并模拟,Py高级玩法,opencv,python

效果图

【pynput】鼠标行为追踪并模拟,Py高级玩法,opencv,python

实时按键捕获

控制按键操作

通过控制按键的按下 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()

【pynput】鼠标行为追踪并模拟,Py高级玩法,opencv,python

组合键记录区间设置

根据不同的按键效果来指定不同的指令,例如利用 ctr + s 开始记录鼠标操作,Esc 则退出记录过程:

_KEY_Press = {
    'ctrl+s': False,
}

# 键盘按下
def on_press(key):
    try:
        print(key)
        if key.char == "\x13":
            _KEY_Press["ctrl+s"] = False
            print(f'按下组合键 ctrl + s')
    except AttributeError as e:
        if key == kbd.Key.esc:
            _KEY_Press["ctrl+s"] = False
            return False

# 按键释放
def on_release(key):
    try:
        if key.char == "\x13":
            _KEY_Press["ctrl+s"] = True
            print(f'释放组合键 ctrl + s')
    except AttributeError:
        if key == kbd.Key.esc:
            _KEY_Press["ctrl+s"] = False
            return False

# 构造监听器对象
with kbd.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    # 监听启动
    listener.join()

【pynput】鼠标行为追踪并模拟,Py高级玩法,opencv,python

用户操作记录与回溯

当熟练了解以后,就可以愉快地使用这些零零散散的知识并加以应用从而达到预想的效果。

基本思路

以微信给别人发短信为例:

  1. 记录鼠标点击位置
  2. 记录按键输入内容
  3. 回溯上面记录操作

完整代码

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 = 0
    for 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_List
    try:
        if key.char == "\x13":
            _KEY_Press["ctrl+r"] = False
            _KEY_Press["ctrl+s"] = False
            User_Active_List = []
        elif key.char == "\x12":
            _KEY_Press["ctrl+s"] = False
            _KEY_Press["ctrl+r"] = False
        elif _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"] = True
            return False
        elif _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_time
    try:
        if key.char == "\x13":
            _KEY_Press["ctrl+s"] = True
            start_time = datetime.now()
            print(f'开始记录操作...')
        if key.char == "\x12":
            _KEY_Press["ctrl+r"] = True
            run_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"] = True
            return 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_List
    if _KEY_Press["esc"]:
        print(f'鼠标捕获退出!')
        return False
    elif _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】鼠标行为追踪并模拟,Py高级玩法,opencv,python

效果图

鼠标按键行为回溯文章来源地址https://www.toymoban.com/news/detail-762176.html

到了这里,关于【pynput】鼠标行为追踪并模拟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python pyautogui+pynput鼠标键盘自动控制与监听

    参考https://blog.csdn.net/hfy1237/article/details/127960423 官方文档 https://pyautogui.readthedocs.io/en/latest/ 1、基本函数 常用函数列表 函数名 功能 基本 pyautogui.size() 返回包含分辨率的元组 pyautogui.PAUSE 每个函数的停顿时间,默认0.1s pyautogui.FAILSAFE 是否开启防故障功能,默认True 键盘 pyautogui

    2024年02月11日
    浏览(53)
  • Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘

    🚀🚀🚀学会控制鼠标和键盘是实现自动化的捷径!🚀🚀🚀 pynput是第三方库,所以在使用pynput之前需要下载pynput包。 下载方式1: 在终端输入 pip install pynput 下载包 下载方式2: 进入pypi官网:https://pypi.org➡️搜索 pynput ➡️选择版本➡️点击pip install pynput 下载方式3: 点击

    2023年04月09日
    浏览(44)
  • SpringBoot+自定义注解+AOP高级玩法打造通用开关

    1.项目结构 2.引入依赖 3.yml配置 4.自定义注解 5.定义常量 6.AOP核心实现 7.使用注解 8.工具类 9.测试接口 10.Redis中把开关加上 11.启动服务 将redis中开关置为1 欢迎大家积极留言交流学习心得,点赞的人最美丽!

    2024年02月07日
    浏览(36)
  • 基于Yolov5+Deepsort+SlowFast算法实现视频目标识别、追踪与行为实时检测

    前段时间打算做一个目标行为检测的项目,翻阅了大量资料,也借鉴了不少项目,最终感觉Yolov5+Deepsort+Slowfast实现实时动作检测这个项目不错,因此进行了实现。 总的来说,我们需要能够实现实时检测视频中的人物,并且能够识别目标的动作,所以我们拆解需求后,整理核心

    2024年01月20日
    浏览(68)
  • (保姆教程及高级玩法及坑)微信同声传译插件-语音识别

    目录 一、背景 二、效果  ​编辑 三、保姆级教程 3.1 小程序后台添加插件:微信同声传译 3.1.1 设置 - 第三方设置 - 添加插件  3.1.2 搜索插件  3.1.3 成功添加后,点击详情  3.1.4 复制它的AppID和最新版本号(后序有用)  3.2 配置项目 3.2.1 微信原生小程序  3.2.2 uniapp配置 3.

    2024年02月08日
    浏览(64)
  • Qt 关于mouseTracking鼠标追踪和tabletTracking平板追踪的几点官方说明

    mouseTracking属性用于保存是否启用鼠标跟踪,缺省情况是不启用的。 没启用的情况下,对应部件只接收在鼠标移动同时至少一个鼠标按键按下时的鼠标移动事件。 启用鼠标跟踪的情况下,任何鼠标移动事件部件都会接收。 部件方法hasMouseTracking()用于返回当前是否启用鼠标跟踪

    2024年02月07日
    浏览(43)
  • SpringCloud Alibaba - Sentinel 高级玩法,修改 Sentinel-dashboard 源码,实现 push 模式

    目录 一、规则持久化 1.1、什么是规则持久化 1.1.1、使用背景 1.1.2、规则管理的三种模式 a)原始模式 b)pull 模式 c)push 模式 1.2、实现 push 模式 1.2.1、修改 order-service 服务,使其监听 Nacos 配置中心 1.2.2、修改 Sentinel-dashboard 源码,配置 nacos 数据源 1.2.3、修改 Sentinel-dashboard

    2024年02月07日
    浏览(42)
  • 快速操控鼠标行为!Vue鼠标按键修饰符让你事半功倍

        🎬 江城开朗的豌豆 :个人主页  🔥 个人专栏  :《 VUE 》 《 javaScript 》  📝  个人网站  :《 江城开朗的豌豆🫛 》  ⛺️ 生活的理想,就是为了理想的生活 !         欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造

    2024年02月05日
    浏览(45)
  • three.js OrbitControls.js 修改配置鼠标行为mouse和手势行为touch

    1. 引入three.js和OrbitControls.js 可以看一下OrbitControls.js源码,方便理解:https://threejs.org/examples/jsm/controls/OrbitControls.js 2. 重新配置鼠标和手势

    2024年02月16日
    浏览(49)
  • c语言捕获Windows鼠标点击、移动行为

    对于鼠标的移动,通过GetCursorPos得到鼠标的当前位置,他会保存在一个POINT结构体中

    2024年02月11日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包