網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
繼打游戲、看視頻等摸魚(yú)行為被監(jiān)控后,現(xiàn)在打工人離職的傾向也會(huì)被監(jiān)控。
有網(wǎng)友爆料稱(chēng)知乎正在低調(diào)裁員,視頻相關(guān)部門(mén)幾乎要裁掉一半。而在知乎裁員的討論區(qū),有網(wǎng)友表示企業(yè)安裝了行為感知系統(tǒng),該系統(tǒng)可以提前獲知員工跳槽念頭。
而知乎在否認(rèn)了裁員計(jì)劃的同時(shí),也聲明從未安裝使用過(guò)網(wǎng)上所說(shuō)的行為感知系統(tǒng),今后也不會(huì)啟用類(lèi)似軟件工具。
因?yàn)榇耸拢钚欧煌粕巷L(fēng)口浪尖,輿論關(guān)注度越來(lái)越高。
一時(shí)間,“打工人太難了”“毫無(wú)隱私可言”的討論層出不窮。
今天就帶大家領(lǐng)略一下怎么寫(xiě)幾行 Python 代碼,就能監(jiān)控電腦。
監(jiān)控鍵盤(pán)
如果公司偷偷在我們的電腦上運(yùn)行了一個(gè)后臺(tái)進(jìn)程,來(lái)監(jiān)控我們的鍵盤(pán)事件,最簡(jiǎn)單的 python 寫(xiě)法大致是這樣的:
from pynput import keyboard def on_press(key): print(f'{key} :pushed') def on_release(key): if key == keyboard.Key.esc: return False with keyboard.Listener(on_press=on_press, on_release=on_release) as lsn: lsn.join()
隨意敲擊鍵盤(pán),你就會(huì)從控制臺(tái)看到這樣的輸出:
代碼內(nèi)容就是兩個(gè)方法,一個(gè)是監(jiān)聽(tīng)按鍵事件,另一個(gè)是監(jiān)聽(tīng)退出事件——敲擊 ESC 按鍵后釋放就退出了。
監(jiān)控鼠標(biāo)
如果還要監(jiān)聽(tīng)鼠標(biāo)事件,那么上這段代碼就行了:
from pynput import mouse def on_click(x, y, button, pressed): if button == mouse.Button.left: print('left was pressed!') elif button == mouse.Button.right: print('right was pressed!') return False else: print('mid was pressed!') # 定義鼠標(biāo)監(jiān)聽(tīng)線程 with mouse.Listener(on_click=on_click) as listener: listener.join()
這段代碼主要是監(jiān)聽(tīng)鼠標(biāo)的左右鍵點(diǎn)擊操作,運(yùn)行之后操作鼠標(biāo),就可以看到控制臺(tái)打印如下結(jié)果:
細(xì)心的你一定會(huì)發(fā)現(xiàn),每次點(diǎn)擊事件,都打印了兩次。這是因?yàn)榘聪潞退砷_(kāi)都會(huì)觸發(fā)鼠標(biāo)事件。
記錄監(jiān)控日志
鍵盤(pán)事件和鼠標(biāo)事件都有了,是時(shí)候?qū)⒍呓Y(jié)合起來(lái),把用戶(hù)的操作記錄到日志了。這里我們用 loguru 來(lái)記錄日志,這個(gè) python 模塊我們之前的文章也講過(guò)。
整個(gè)代碼如下:
from pynput import keyboard, mouse from loguru import logger from threading import Thread # 定義日志文件 logger.add('moyu.log') def on_press(key): logger.debug(f'{key} :pushed') def on_release(key): if key == keyboard.Key.esc: return False # 定義鍵盤(pán)監(jiān)聽(tīng)線程 def press_thread(): with keyboard.Listener(on_press=on_press, on_release=on_release) as lsn: lsn.join() def on_click(x, y, button, pressed): if button == mouse.Button.left: logger.debug('left was pressed!') elif button == mouse.Button.right: logger.debug('right was pressed!') else: return False # 定義鼠標(biāo)監(jiān)聽(tīng)線程 def click_thread(): with mouse.Listener(on_click=on_click) as listener: listener.join() if __name__ == '__main__': # 起兩個(gè)線程分別監(jiān)控鍵盤(pán)和鼠標(biāo) t1 = Thread(target=press_thread()) t2 = Thread(target=click_thread()) t1.start() t2.start()
運(yùn)行之后,你就可以在同級(jí)目錄下的日志文件中,看到這樣的內(nèi)容了:
完整代碼
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @author: 閑歡 """ from pynput import keyboard, mouse from loguru import logger from threading import Thread # 定義日志文件 logger.add('moyu.log') def on_press(key): logger.debug(f'{key} :pushed') def on_release(key): if key == keyboard.Key.esc: return False # 定義鍵盤(pán)監(jiān)聽(tīng)線程 def press_thread(): with keyboard.Listener(on_press=on_press, on_release=on_release) as lsn: lsn.join() def on_click(x, y, button, pressed): if button == mouse.Button.left: logger.debug('left was pressed!') elif button == mouse.Button.right: logger.debug('right was pressed!') return False else: logger.debug('mid was pressed!') # 定義鼠標(biāo)監(jiān)聽(tīng)線程 def click_thread(): with mouse.Listener(on_click=on_click) as listener: listener.join() if __name__ == '__main__': # 起兩個(gè)線程分別監(jiān)控鍵盤(pán)和鼠標(biāo) t1 = Thread(target=press_thread()) t2 = Thread(target=click_thread()) t1.start() t2.start()
總結(jié)
本文主要通過(guò) pynput 這個(gè) python 模塊講解一下怎么記錄鍵盤(pán)和鼠標(biāo)的操作。這幾行簡(jiǎn)單的代碼對(duì)于監(jiān)控輸入密碼之類(lèi)的簡(jiǎn)單操作可以使用,但是對(duì)于聊天記錄之類(lèi)的復(fù)雜語(yǔ)句,你還需要針對(duì)日志用 NLTK 語(yǔ)言處理,才能復(fù)原你的聊天記錄。
原文鏈接:https://blog.csdn.net/weixin_48923393/article/details/123038998
相關(guān)推薦
- 2022-07-09 python如何獲取Prometheus監(jiān)控?cái)?shù)據(jù)_python
- 2022-07-19 Python數(shù)據(jù)分析之?Pandas?Dataframe應(yīng)用自定義_python
- 2022-11-25 Python利用memory_profiler實(shí)現(xiàn)內(nèi)存分析_python
- 2022-04-09 給原生html中添加水印遮罩層
- 2022-04-20 C++中的函數(shù)你真的理解了嗎_C 語(yǔ)言
- 2021-12-06 Android?CameraX?打開(kāi)攝像頭預(yù)覽功能_Android
- 2022-04-09 使用docker-compose一鍵部署開(kāi)源博客wordpress
- 2023-10-09 instanceof` 的基本工作原理
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支