日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

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

發(fā)布時間:2023/12/24 python 45 coder
生活随笔 收集整理的這篇文章主要介紹了 【Python微信机器人】第六篇:优化使用方式,可pip安装 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

優(yōu)化內(nèi)容

這篇不聊技術(shù)點,說一下優(yōu)化后的Python機器人代碼怎么使用,優(yōu)化內(nèi)容如下:

  1. 將hook庫獨立成一個庫,發(fā)布到pypi,可使用pip安裝
  2. 將微信相關(guān)的代碼發(fā)布成另一個庫,也可以pip安裝
  3. git倉庫統(tǒng)一,以后都在這個倉庫更新,不再一篇文章一個倉庫
  4. 開始建群,根據(jù)群里反饋增加功能和修復(fù)bug

使用教程

當(dāng)前支持的微信版本

32位:

  • 3.9.8.12

64位:

  • 3.9.8.15

等這個系列教程結(jié)束再更新最新版本。其實hook庫和主動調(diào)用都已經(jīng)說完了,也可以等群友提pr來更新。

當(dāng)前支持功能

  • 發(fā)送文本消息
  • 發(fā)送圖片消息
  • hook微信日志輸出
  • hook接收消息(下篇更新)
  • 防撤回(下篇更新)

準(zhǔn)備環(huán)境

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

后續(xù)如果要更新代碼都需要執(zhí)行一遍: pip install --upgrade wechat_pyrobot

使用

首先創(chuàng)建一個目錄,例如robot_code,再創(chuàng)建一個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)

啟動并登錄微信,執(zhí)行這個main.py就會把Python注入到微信并且打開控制臺,你也可以將open_console設(shè)置成False,就不會打開控制臺,不過這樣就不方便調(diào)試了

接著你在當(dāng)前目錄創(chuàng)建的任何代碼保存后,都會被自動加載到微信并執(zhí)行(注意創(chuàng)建的帶代碼文件名不能以數(shù)字開頭)

發(fā)送消息

例如 創(chuàng)建一個sendmsg.py,寫入以下代碼后保存:

import time
from module import SendMsg


st = SendMsg()
st.send_text("filehelper", "測試消息!")
# 注意發(fā)送消息之間要間隔時間
time.sleep(1)
st.send_image("filehelper", r"D:\a.png")

第一個參數(shù)是wxid,獲取方式后面再講,或者下篇接收消息也能獲取到好友的wxid,第二個參數(shù)是消息內(nèi)容

發(fā)送消息時不要使用死循環(huán),會阻塞Python進程,如果想定時發(fā)送消息,可以使用Python的定時器threading.Timer或者多線程threading.Thread

定時發(fā)消息

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秒后再執(zhí)行一次
    msg_timer = Timer(10, send_timer, (n+1, ))
    msg_timer.start()
 
# 2秒后執(zhí)行send_timer
msg_timer = Timer(2, send_timer, (1, ))
msg_timer.start()
# timer.cancel()#取消執(zhí)行

如果想定點發(fā)消息,可以每隔一秒開啟一個定時器,判斷時間是否是符合要求,符合就發(fā)送,不符合就繼續(xù)。

取消定時器(解釋見下面的騷操作):

import sys

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

hook日志

例如創(chuàng)建一個hooklog.py,寫入以下代碼后保存:

from module import HookLog

hooker = HookLog()
hooker.hook() 

日志就會打印在控制臺。hook不會阻塞進程,因為回調(diào)函數(shù)是在微信內(nèi)部被調(diào)用,所以不需要使用多線程

騷操作

之前說了加載模塊都會被保存在sys.modules這個字典里,而這個熱加載就是以模塊形式加載代碼

所以你可以在新文件里引用之前文件的變量和方法,例如我新建一個unhooklog.py, 寫入如下代碼:

import sys

# 獲取robot.py模塊
robot = sys.modules["robot"]
# 獲取robot模塊中的hooker變量
hooker = robot.hooker
# 取消hook
hooker.unhook()

這在使用定時器和多線程時很有用,hook類已經(jīng)被定義成了單例模式,不需要這樣操作,你新建一個文件在實例化一個也是一樣的效果

from module import HookLog

hooker = HookLog()
hooker.unhook() 

接收消息

待更新

防撤回

待更新

總結(jié)

以上是生活随笔為你收集整理的【Python微信机器人】第六篇:优化使用方式,可pip安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。