当前位置: 首页 > news >正文

用Python监听邻居家小姐姐的上网行为

关注公众号:「 Python专栏」,后台回复「小姐姐」,获取全套代码!!!

还记得曾经为了刷大话西游而下载了按键精灵,然后论坛上搜了各种分辨率的脚本么?

还记得春节为了刷回家的高铁票,自己写了按键精灵的脚本么?

现在python有一个神奇的库,我们不用再去模拟复杂的按键精灵了!监控鼠标、键盘,甚至是……

pynput这个库让你可以控制和监控输入设备。

对于每一种输入设备,它包含一个子包来控制和监控该种输入设备:

pynput.mouse:包含控制和监控鼠标或者触摸板的类。

pynput.keyboard:包含控制和监控键盘的类。

上面提到的子包都已被引入到pynput库中。要使用上面的子包,从pynput中引入即可。

from pynput import mouse, keyboard

接下来就跟着小胖一起来看下如何玩转鼠标和键盘吧。

1. 控制鼠标

使用pynput.mouse控制鼠标

from pynput.mouse import Controller, Button

mouse = Controller()

# 获取当前鼠标位置
print(f'当前小胖的鼠标位置是: {mouse.position}')

# 设置鼠标位置
mouse.position = (10, 20)
print(f'现在小胖把鼠标移动到 {mouse.position}')

# 使用相对距离,移动当前鼠标
mouse.move(5, -5)

# 按下鼠标左键,释放鼠标左键
mouse.press(Button.left)
mouse.release(Button.left)

# 向下滚动2格
mouse.scroll(0, 2)
复制代码

效果如图

2. 监控鼠标事件

使用pynput.mouse.Listener监控鼠标事件

from pynput import mouse

def on_move(x, y):
   print(f'鼠标移动到坐标 {(x, y)}')

def on_click(x, y, button, pressed):
   print(f"{'按下' if pressed else '释放'} ,当前位置是: {(x, y)}")
   if not pressed:
       # 停止监听
       return False

def on_scroll(x, y, dx, dy):
   print(f"滑动鼠标, {'向下' if dy < 0 else '向上'} at {(x, y)}")

# 一直监听事件,直到鼠标释放
with mouse.Listener(
       on_move=on_move,
       on_click=on_click,
       on_scroll=on_scroll) as listener:
   listener.join()
复制代码

效果如图

鼠标事件监听器是一个线程,所有的回调函数都会在独立的线程中运行。

调用pynput.mouse.Listener.stop,发起StopException异常,或者回调函数中返回False都会停止事件的监听。

3. 控制键盘

使用pynput.keyboard.Controller控制键盘

from pynput.keyboard import Key, Controller

keyboard = Controller()

# 按下并释放空格
keyboard.press(Key.space)
keyboard.release(Key.space)

# 按下并释放小写字母a
keyboard.press('a')
keyboard.release('a')

# 2种方式输入大写A
keyboard.press('A')
keyboard.release('A')
with keyboard.pressed(Key.shift):
   keyboard.press('a')
   keyboard.release('a')

# 直接操作键盘输入Hello World
keyboard.type('Hello World')
复制代码

4. 监控键盘事件

使用pynput.keyboard.Listener监听键盘事件

from pynput import keyboard

def on_press(key):
   try:
       print(f'字母 {key.char} 被按下了')
   except AttributeError:
       print(f'特殊的键 {key} 被按下了')

def on_release(key):
   print(f'{key} 被释放了')
   if key == keyboard.Key.esc:
       # 停止监听
       return False

# 一直监听键盘事件,直到停止
with keyboard.Listener(
       on_press=on_press,
       on_release=on_release) as listener:
   listener.join()
复制代码

键盘事件监听器是一个线程,所有的回调函数都会在独立的线程中运行。

调用pynput.keyboard.Listener.stop,发起StopException异常,或者回调函数中返回False都会停止事件的监听。

传递给回调函数的key参数是一个pynput.keyboard.Key类的实例。当特殊按键和普通按键一起按下时,数字字母按键的值会被放置在pynput.keyboard.KeyCode类的实例中,对于不知道的按键会返回None。

接下来就是发挥你们能力的时候了,说不定写个脚本,用exe包装一下,命名为种子收发器?哈哈哈哈,然后就可以监听起来了?

转载于:https://juejin.im/post/5c8a5f2ef265da2da77210d4

相关文章:

  • Git同步原始仓库到Fork仓库中
  • 如何将PDF图片旋转90度,盘点这个小方法
  • php 0613框架基础
  • debian手册摘要
  • jQuery EasyUI使用教程之添加节点到树形菜单
  • 万物有源_Appium框架原理浅析
  • PHPDoc/PHPDocumentor生成API文档
  • 面试必问Elasticsearch倒排索引原理
  • Linux screen 解决会话终止当前进程断开的问题
  • ArcSDE的版本管理机制
  • XDOC Office Server 开源了,Office文档完美转换为PDF
  • C++搜索与回溯算法之马走日(遍历问题)
  • 关于子类对象实例化是否会实例化父类对象的理解
  • QGis、Qt对话框上的OK、Open、Cancel、Help等英文翻译
  • Python 3.5.7 和 3.4.10 发布,3.4 分支的最后版本
  • 《深入 React 技术栈》
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Android Studio:GIT提交项目到远程仓库
  • FastReport在线报表设计器工作原理
  • Hexo+码云+git快速搭建免费的静态Blog
  • IndexedDB
  • k8s 面向应用开发者的基础命令
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • PHP变量
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端路由实现-history
  • 入门级的git使用指北
  • 设计模式走一遍---观察者模式
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • Python 之网络式编程
  • python最赚钱的4个方向,你最心动的是哪个?
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​【已解决】npm install​卡主不动的情况
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #{}和${}的区别?
  • (Forward) Music Player: From UI Proposal to Code
  • (pytorch进阶之路)扩散概率模型
  • (二)pulsar安装在独立的docker中,python测试
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (五)MySQL的备份及恢复
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)Sublime Text3配置Lua运行环境
  • .net core 依赖注入的基本用发
  • .Net IOC框架入门之一 Unity
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 设计一套高性能的弱事件机制
  • .NET 中创建支持集合初始化器的类型
  • .NET和.COM和.CN域名区别
  • .NET中统一的存储过程调用方法(收藏)
  • @Documented注解的作用