首页 > 编程语言 >【Python微信机器人】第六篇:优化使用方式,可pip安装

【Python微信机器人】第六篇:优化使用方式,可pip安装

时间:2023-12-20 09:46:04浏览次数:34  
标签:hook Python 微信 timer msg pip import hooker

优化内容

这篇不聊技术点,说一下优化后的Python机器人代码怎么使用,优化内容如下:

  1. 将hook库独立成一个库,发布到pypi,可使用pip安装
  2. 将微信相关的代码发布成另一个库,也可以pip安装
  3. git仓库统一,以后都在这个仓库更新,不再一篇文章一个仓库
  4. 开始建群,根据群里反馈增加功能和修复bug

使用教程

当前支持的微信版本

32位:

  • 3.9.8.12

64位:

  • 3.9.8.15

等这个系列教程结束再更新最新版本。其实hook库和主动调用都已经说完了,也可以等群友提pr来更新。

当前支持功能

  • 发送文本消息
  • 发送图片消息
  • hook微信日志输出
  • hook接收消息(下篇更新)
  • 防撤回(下篇更新)

准备环境

  1. 安装支持的版本微信 (下载链接: https://www.123pan.com/s/ihEKVv-XcWx.html 提取码: 5WLu)
  2. 安装32位或64位Python(取决于你安装的微信是32位还是64位),版本大于等于3.7
  3. pip install --upgrade wechat_pyrobot

后续如果要更新代码都需要执行一遍: pip install --upgrade wechat_pyrobot

使用

首先创建一个目录,例如robot_code,再创建一个main.py(名称随意)写入以下代码:

from py_process_hooker import inject_python_and_monitor_dir


if __name__ == "__main__":
    process_name = "WeChat.exe"
    open_console = True
    inject_python_and_monitor_dir(process_name, __file__, open_console=open_console)

启动并登录微信,执行这个main.py就会把Python注入到微信并且打开控制台,你也可以将open_console设置成False,就不会打开控制台,不过这样就不方便调试了

接着你在当前目录创建的任何代码保存后,都会被自动加载到微信并执行(注意创建的带代码文件名不能以数字开头)

发送消息

例如 创建一个sendmsg.py,写入以下代码后保存:

import time
from module import SendMsg


st = SendMsg()
st.send_text("filehelper", "测试消息!")
# 注意发送消息之间要间隔时间
time.sleep(1)
st.send_image("filehelper", r"D:\a.png")

第一个参数是wxid,获取方式后面再讲,或者下篇接收消息也能获取到好友的wxid,第二个参数是消息内容

发送消息时不要使用死循环,会阻塞Python进程,如果想定时发送消息,可以使用Python的定时器threading.Timer或者多线程threading.Thread

定时发消息

import time
from threading import Timer
from module import SendMsg


st = SendMsg()

def send_timer(n: int):
    global msg_timer
    t = time.strftime("%Y-%m-%d")
    msg_text = f"{t}: {n}"
    st.send_text("filehelper", msg_text)
    # 10秒后再执行一次
    msg_timer = Timer(10, send_timer, (n+1, ))
    msg_timer.start()
 
# 2秒后执行send_timer
msg_timer = Timer(2, send_timer, (1, ))
msg_timer.start()
# timer.cancel()#取消执行

如果想定点发消息,可以每隔一秒开启一个定时器,判断时间是否是符合要求,符合就发送,不符合就继续。

取消定时器(解释见下面的骚操作):

import sys

sendmsg_timer = sys.modules["sendmsg_timer"]
msg_timer = sendmsg_timer.msg_timer
msg_timer.cancel()

hook日志

例如创建一个hooklog.py,写入以下代码后保存:

from module import HookLog

hooker = HookLog()
hooker.hook() 

日志就会打印在控制台。hook不会阻塞进程,因为回调函数是在微信内部被调用,所以不需要使用多线程

骚操作

之前说了加载模块都会被保存在sys.modules这个字典里,而这个热加载就是以模块形式加载代码

所以你可以在新文件里引用之前文件的变量和方法,例如我新建一个unhooklog.py, 写入如下代码:

import sys

# 获取robot.py模块
robot = sys.modules["robot"]
# 获取robot模块中的hooker变量
hooker = robot.hooker
# 取消hook
hooker.unhook()

这在使用定时器和多线程时很有用,hook类已经被定义成了单例模式,不需要这样操作,你新建一个文件在实例化一个也是一样的效果

from module import HookLog

hooker = HookLog()
hooker.unhook() 

接收消息

待更新

防撤回

待更新

标签:hook,Python,微信,timer,msg,pip,import,hooker
From: https://www.cnblogs.com/kanadeblisst/p/17915515.html

相关文章

  • linux中部署python项目
    参考这篇博客:https://blog.csdn.net/smilehappiness/article/details/1173379431.首先查看python的版本:python-V2.安装python:3.安装虚拟环境报错1: 解决办法:export CURL_CA_BUNDLE="/etc/pki/tls/certs/ca-bundle.crt"https://3ms.huawei.com/km/blogs/details/14442367htt......
  • Python学习的相关资源
    Python是一门强大而且多用途的编程语言,在数据科学、机器学习、Web开发和软件工程等多个行业中都得到了广泛应用。 如果老师们和同学们对学习Python感兴趣,网上有很多免费Python资源可供使用,包括许多免费网站,提供教程、练习和交互式编程环境。 编程语言的学习不同于一般的......
  • Python(requests.post()、requests.get())
    目录1.requests.post()2.requests.get()3.requests.post()与requests.get()区别1.requests.post()requests.post是Python中requests库提供的一个函数,用于发送HTTPPOST请求。这个函数的基本语法如下:importrequestsresponse=requests.post(url,data=None,j......
  • 关联分析思想及其Python实现
    关联规则分析算法是一种用于挖掘数据集中项之间关系的技术,它可以揭示数据中的潜在模式和趋势。这种算法的核心思想是寻找数据集中频繁出现的组合,从而推断它们之间的关联关系。其中,Apriori算法是关联规则分析的代表之一。Apriori算法的基本原理是利用"先验原理",即如果一个项集是频......
  • python网站创建012:DOM、BOM、jQuery的使用
    DOM:标签操作模块。这个模块里面的方法专门用来操作HTML的标签的。比如说获取HTML标签的文本、或者给HTML标签加上样式<body><!--1、比如这里定义了一个div,然后你想获取div里面文本,该如何操作--><divid="txt">你好</div><script>//定义一个自执行函......
  • Prometheus Python client library.
    PrometheusPythonclientlibrary.http://prometheus.github.io/client_python/ Examplehttps://pbrissaud.github.io/suivi-bourse/用户场景没有价值,此项目以全栈的视角实现了自定义exporter的实现,可以直接参考。watchesyourstockshareonPrometheus/Grafana ......
  • Python 使用getopt解析命令行参数
    ​ 1、getopt模块此模块可协助脚本解析sys.argv中的命令行参数。它支持与Unixgetopt()函数相同的惯例(包括形式如'-'与'--'的参数的特殊含义)。也能通过可选的第三个参数来使用与GNU软件所支持形式相类似的长选项。1)getopt.getopt(args,shortopts,longopts=[])......
  • Python 调用 FFmpeg 处理合并视频文件
    ​ FFmpeg是一个开源的多媒体框架,它包含了用于处理音频、视频、字幕等多媒体数据的一系列工具、库和软件包。FFmpeg可以执行多种多媒体处理任务,包括转码、剪辑、合并、分离、编解码、流媒体传输等。它被广泛用于多媒体应用程序和流媒体平台中,是一个功能强大且高度可定制的工......
  • Python中强大的动态类型特性,以方法调用为例
    在研究大佬的项目时,从一行行代码溯源,拨茧抽丝的过程中,发现了方法调用的“神奇之处”具体情况如下:1.在类Trainer中名为run等方法中有加载预训练好的模型的load方法2.load()方法依旧是类方法中的一个,在load方法中有具体的load_self()方法3. load_self()定义在另一个py文件mod......
  • python - 批量压缩word图片
    主要分为3个步骤,提取图片,压缩图片,替换图片,需要用到python-docx和pillow1.提取图片importdocxdocName="test.docx"imageIndex=0document=docx.Document(docName)forrelindocument.part.rels.values():if"image"inrel.reltypeandhasattr(rel,"ta......