優化內容 這篇不聊技術點,說一下優化後的Python機器人代碼怎麼使用,優化內容如下: 將hook庫獨立成一個庫,發佈到pypi,可使用pip安裝 將微信相關的代碼發佈成另一個庫,也可以pip安裝 git倉庫統一,以後都在這個倉庫更新,不再一篇文章一個倉庫 開始建群,根據群里反饋增加功能和修複bug ...
優化內容
這篇不聊技術點,說一下優化後的Python機器人代碼怎麼使用,優化內容如下:
- 將hook庫獨立成一個庫,發佈到pypi,可使用pip安裝
- 將微信相關的代碼發佈成另一個庫,也可以pip安裝
- git倉庫統一,以後都在這個倉庫更新,不再一篇文章一個倉庫
- 開始建群,根據群里反饋增加功能和修複bug
使用教程
當前支持的微信版本
32位:
3.9.8.12
64位:
3.9.8.15
等這個系列教程結束再更新最新版本。其實hook庫和主動調用都已經說完了,也可以等群友提pr來更新。
當前支持功能
- 發送文本消息
- 發送圖片消息
- hook微信日誌輸出
- hook接收消息(下篇更新)
- 防撤回(下篇更新)
準備環境
- 安裝支持的版本微信 (下載鏈接:
https://www.123pan.com/s/ihEKVv-XcWx.html
提取碼:5WLu
) - 安裝32位或64位Python(取決於你安裝的微信是32位還是64位),版本大於等於3.7
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()
接收消息
待更新
防撤回
待更新