技術探索:利用Python庫wxauto實現Windows微信客戶端的全面自動化管理

項目地址:github-wxauto 點擊即可訪問

項目官網:wxauto 點擊即可訪問

😂什么是wxauto?

wxauto 是作者在2020年開發的一個基于 UIAutomation 的開源 Python 微信自動化庫,最初只是一個簡單的腳本,只能獲取消息和發送消息,經歷了2年多的停滯,期間很多網友留言說需要更多的功能,所以在2023年針對新版微信重新開發了 wxauto,增加了更多的功能,即使 Python 初學者也可以簡單上手自動化微信操作。目前已實現很多日常的微信操作的自動化,如自動發送消息、自動添加好友、自動回復、自動獲取聊天記錄、圖片、文件等功能,后續還會根據反饋更新更多功能。

📌wxauto 的主要功能

  • 消息發送:支持發送文字、圖片、文件、@群好友、引用消息等功能
  • 聊天記錄:可獲取好友的聊天記錄內容
  • 監聽消息:實時獲取指定監聽好友(群)的新消息
  • 其他定制功能:根據需求定制自動化流程,滿足各種特殊需求。

🎧為什么選擇 wxauto?

  • 開源免費:完全開源,你可以自由使用和修改,幫助更多人實現微信自動化。
  • 簡單易用:界面簡潔,操作簡單,編程小白也能快速上手。
  • 靈活強大:支持多種操作和定制,滿足各種自動化需求。

💡 未來展望

作者我們將持續優化 wxauto,增加更多實用功能,幫助更多用戶實現微信自動化。

一、環境配置

Windows版本微信客戶端自動化,可實現簡單的發送、接收微信消息、保存聊天圖片

3.9.11.17版本微信安裝包下載: 123云盤 提取碼:seqA

環境版本
OS`windows 10
微信`微信
Python`Python

獲取wxauto

CMD窗口:

pip install wxauto

Python窗口:

>>> import wxauto
>>> wxauto.VERSION
'3.9.11.17'
>>> wx = wxauto.WeChat()
初始化成功,獲取到已登錄窗口:xxx

二、快速入門

1. 獲取微信對象

# 導入
from wxauto import WeChat# 獲取微信窗口對象
wx = WeChat()
# 輸出 > 初始化成功,獲取到已登錄窗口:xxxx

🚨注意

請先登錄PC微信客戶端,再運行上述代碼

🚨注意

上面定義了wx變量,后續文檔不再重復定義和解釋wx變量

2. 一個簡單的收到機器人

首先設置一個監聽列表,列表元素為指定好友(或群聊)的昵稱

listen_list = ['張三','李四','工作群A','工作群B'
]

然后調用AddListenChat方法添加監聽對象,其中可選參數savepic為是否保存新消息圖片

for i in listen_list:wx.AddListenChat(who=i, savepic=True)

最后調用GetListenMessage方法,實現消息監聽,收到消息類型為friend的消息之后,調用SendMsg方法回復消息

# 持續監聽消息,并且收到消息后回復“收到”
wait = 1  # 設置1秒查看一次是否有新消息
while True:msgs = wx.GetListenMessage()for chat in msgs:who = chat.who              # 獲取聊天窗口名(人或群名)one_msgs = msgs.get(chat)   # 獲取消息內容# 回復收到for msg in one_msgs:msgtype = msg.type       # 獲取消息類型content = msg.content    # 獲取消息內容,字符串類型的消息內容print(f'【{who}】:{content}')# ===================================================# 處理消息邏輯(如果有)# # 處理消息內容的邏輯每個人都不同,按自己想法寫就好了,這里不寫了# # ===================================================# 如果是好友發來的消息(即非系統消息等),則回復收到if msgtype == 'friend':chat.SendMsg('收到')  # 回復收到time.sleep(wait)

👌SUCCESS

恭喜你,你已經實現了一個簡單的微信機器人,可以自動回復消息了!

完整代碼

# 導入
from wxauto import WeChat# 獲取微信窗口對象
wx = WeChat()
# 輸出 > 初始化成功,獲取到已登錄窗口:xxxx# 設置監聽列表
listen_list = ['張三','李四','工作群A','工作群B'
]
# 循環添加監聽對象
for i in listen_list:wx.AddListenChat(who=i, savepic=True)# 持續監聽消息,并且收到消息后回復“收到”
wait = 1  # 設置1秒查看一次是否有新消息
while True:msgs = wx.GetListenMessage()for chat in msgs:who = chat.who              # 獲取聊天窗口名(人或群名)one_msgs = msgs.get(chat)   # 獲取消息內容# 回復收到for msg in one_msgs:msgtype = msg.type       # 獲取消息類型content = msg.content    # 獲取消息內容,字符串類型的消息內容print(f'【{who}】:{content}')# ===================================================# 處理消息邏輯(如果有)# # 處理消息內容的邏輯每個人都不同,按自己想法寫就好了,這里不寫了# # ===================================================# 如果是好友發來的消息(即非系統消息等),則回復收到if msgtype == 'friend':chat.SendMsg('收到')  # 回復收到time.sleep(wait)

三、方法說明

發送消息

1. 發送文字消息SendMsg

參數說明:

參數類型默認值說明
msgstr/要發送的文字內容
whostrNone要發送給誰,默認則發送給當前打開的頁面
clearboolTrue是否清除原本聊天編輯框的內容
atlist,strNone要@的人,可以是一個人或多個人,格式為str或list,例如:"張三"或[“張三”, “李四”]
1.1簡單的發送文字信息
from wxauto import WeChatwx = WeChat()# 發送消息給文件傳輸助手
msg = 'hello, wxauto!'
who = '文件傳輸助手'
wx.SendMsg(msg=msg, who=who)
1.2 附帶@群好友的消息
from wxauto import WeChatwx = WeChat()msg = 'xxxxxxx,收到請回復!'
who = '工作群A'
at = ['張三', '李四']   # 要@的人
wx.SendMsg(msg=msg, who=who, at=at)
2. 發送圖片/視頻/文件消息 SendFiles參數說明:
參數名類型默認值說明
filepathstr | list/指定文件路徑,單個文件str,多個文件list
whostrNone要發送給誰,默認則發送給當前打開的頁面
2.1 發送圖片/視頻/文件消息
from wxauto import WeChatwx = WeChat()# 發送圖片
files = [r'C:\Users\user\Desktop\1.jpg',   # 圖片r'C:\Users\user\Desktop\2.txt',   # 文件r'C:\Users\user\Desktop\3.mp4'    # 視頻
]who = '文件傳輸助手'
wx.SendFiles(filepath=files, who=who)

獲取消息

1. 獲取當前聊天窗口消息

GetAllMessage方法用于獲取微信主窗口當前聊天窗口的所有消息,返回消息對象列表

參數說明:

參數名類型默認值說明
savepicboolFalse是否自動保存聊天圖片
savefileboolFalse是否自動保存聊天文件
savevoiceboolFalse是否自動保存聊天語音轉文字內容
1.1 僅獲取文字消息

無需參數,直接調用GetAllMessage方法即可獲取當前聊天窗口的所有消息

from wxauto import WeChatwx = WeChat()# 獲取當前聊天窗口消息
msgs = wx.GetAllMessage()# 輸出消息內容
for msg in msgs:if msg.type == 'sys':print(f'【系統消息】{msg.content}')elif msg.type == 'friend':sender = msg.sender # 這里可以將msg.sender改為msg.sender_remark,獲取備注名print(f'{sender.rjust(20)}{msg.content}')elif msg.type == 'self':print(f'{msg.sender.ljust(20)}{msg.content}')elif msg.type == 'time':print(f'\n【時間消息】{msg.time}')elif msg.type == 'recall':print(f'【撤回消息】{msg.content}')
1.2 獲取文字信息以及保存圖片、文件、語音轉文字內容

可使用以下三個參數自定義指定是否保存圖片、文件、語音轉文字內容

  • savepic:是否保存聊天圖片,默認為False
  • savefile:是否保存聊天文件,默認為False
  • savevoice:是否保存聊天語音轉文字內容,默認為False
from wxauto import WeChatwx = WeChat()# 獲取當前聊天窗口消息
msgs = wx.GetAllMessage(savepic   = True,   # 保存圖片savefile  = True,   # 保存文件savevoice = True    # 保存語音轉文字內容
)# 輸出消息內容
for msg in msgs:if msg.type == 'sys':print(f'【系統消息】{msg.content}')elif msg.type == 'friend':sender = msg.sender # 這里可以將msg.sender改為msg.sender_remark,獲取備注名print(f'{sender.rjust(20)}{msg.content}')elif msg.type == 'self':print(f'{msg.sender.ljust(20)}{msg.content}')elif msg.type == 'time':print(f'\n【時間消息】{msg.time}')elif msg.type == 'recall':print(f'【撤回消息】{msg.content}')
1.3 加載更多歷史消息

LoadMoreMessage方法用于加載更多歷史消息,配合GetAllMessage方法使用,實現獲取更多歷史消息

from wxauto import WeChatwx = WeChat()# 加載更多歷史消息
wx.LoadMoreMessage()# 獲取當前聊天窗口消息
msgs = wx.GetAllMessage()
... # 自行構建消息處理邏輯

💡提示

LoadMoreMessage方法加載更多歷史消息時,需要保證當前聊天窗口有歷史消息,否則沒有效果,即觸發一次“查看更多消息”

2. 獲取新消息
2.1 獲取主窗口新消息

GetAllNewMessageGetNextNewMessage方法用于獲取微信主窗口的新消息,返回消息對象列表

  • GetAllNewMessage方法獲取所有新消息

    from wxauto import WeChatwx = WeChat()# 獲取所有新消息
    msgs = wx.GetAllNewMessage()
    
  • GetNextNewMessage方法獲取下一條新消息

    from wxauto import WeChatwx = WeChat()# 獲取下一條新消息
    msgs = wx.GetNextNewMessage()
    

這兩種方法獲取到的msgs數據類型均為dict,結構如下:

消息格式

{'張三': [msg1, msg2, ...],'李四': [msg1, msg2, ...],...
}
2.2 監聽消息

GetListenMessage方法用于獲取監聽消息,調用該方法之前,需要先調用AddListenChat方法添加監聽對象,然后調用GetListenMessage方法實現消息監聽

from wxauto import WeChatwx = WeChat()# 首先設置一個監聽列表,列表元素為指定好友(或群聊)的昵稱
listen_list = ['張三','李四','工作群A','工作群B'
]# 然后調用`AddListenChat`方法添加監聽對象,其中可選參數`savepic`為是否保存新消息圖片
for i in listen_list:wx.AddListenChat(who=i)msgs = wx.GetListenMessage()
for chat in msgs:one_msgs = msgs.get(chat)   # 獲取消息內容# 回復收到for msg in one_msgs:if msg.type == 'sys':print(f'【系統消息】{msg.content}')elif msg.type == 'friend':`sender = msg.sender # 這里可以將msg.sender改為msg.sender_remark,獲取備注名print(f'{sender.rjust(20)}{msg.content}')# !!! 回復收到,此處為`chat`而不是`wx` !!!chat.SendMsg('收到')  # 此處將msg.content傳遞給大模型,再由大模型返回的消息回復即可實現ai聊天elif msg.type == 'self':print(f'{msg.sender.ljust(20)}{msg.content}')elif msg.type == 'time':print(f'\n【時間消息】{msg.time}')elif msg.type == 'recall':print(f'【撤回消息】{msg.content}')

💣提示

  1. GetListenMessage方法獲取到的msgs是一個字典,鍵為監聽對象,值為消息對象列表;值的列表與GetAllMessage方法獲取到的消息對象列表一樣

添加好友

1. 發起好友申請

ddNewFriend方法用于發起好友申請

參數說明:

參數類型默認值說明
keywordsstr/微信號、手機號、QQ號
addmsgstr‘你好,我是xxxx’添加好友的消息
remarkstrNone備注名

??注意

注:微信有一定的限制,如果頻繁添加好友,可能會被限制添加好友的權限,請謹慎使用,切勿濫用!!!

from wxauto import WeChatwx = WeChat()keywords = '13800000000'      # 微信號、手機號、QQ號
addmsg = '你好,我是xxxx'      # 添加好友的消息
remark = '備注名字'            # 備注名,沒有則不用設置
tags = ['朋友', '同事']        # 標簽列表# 發起好友申請
wx.AddNewFriend(keywords, addmsg=addmsg, remark=remark, tags=tags)
2. 接受好友請求
2.1 獲取新的好友申請對象列表

GetNewFriends方法用于獲取新的好友申請對象列表

Python – 獲取新的好友申請對象列表示例代碼

from wxauto import WeChatwx = WeChat()new = wx.GetNewFriends()
# [<wxauto New Friends Element at 0x1e95fced080 (張三: 你好,我是xxx群的張三)>,
# <wxauto New Friends Element at 0x1e95fced081 (李四: 你好,我是xxx群的李四)>]
2.2 通過好友申請對象接受好友請求
...  # 接2.1代碼# 獲取第一個可接受的新好友對象
new_friend1 = new[0]print(new_friend1.name)  # 獲取好友申請昵稱
# 張三print(new_friend1.msg)  # 獲取好友申請信息
# 你好,我是xxx群的張三# 接受好友請求,并且添加備注“備注張三”、添加標簽wxauto
new_friend1.Accept(remark='備注張三', tags=['wxauto'])# 切換回聊天頁面
wx.SwitchToChat()

🚧提示

該方法接受好友請求后,并不會自動切換回聊天頁面,需要配合調用SwitchToChat方法切換至聊天頁面,否則其他有關聊天頁面的方法不可使用

切換聊天窗口

1. 切換到指定好友聊天框

ChatWith方法用于切換到指定好友聊天框

參數說明:

參數名類型默認值說明
whostr/要打開的聊天框好友名或群名
from wxauto import WeChatwx = WeChat()# 切換到指定好友聊天框
who = '張三'
wx.ChatWith(who=who)
2. 切換微信主頁面

此部分原理為點擊微信左側黑色側邊欄的相應圖標按鈕,切換至相應的頁面。

2.1 切換到聊天頁面
from wxauto import WeChatwx = WeChat()# 切換到聊天頁面
wx.SwitchToChat()
2.2 切換到通訊錄頁面
from wxauto import WeChatwx = WeChat()# 切換到通訊錄頁面
wx.SwitchToContact()

獲取好友信息

1. 獲取粗略信息

參數說明:

參數名類型默認值說明
keywordsstrNone搜索關鍵詞
from wxauto import WeChatwx = WeChat()friend_infos = wx.GetAllFriends()
# [{'nickname': '張三', 'remark': '張總', 'tags': None},
#  {'nickname': '李四', 'remark': None, 'tags': ['同事', '初中同學']},
#  {'nickname': '王五', 'remark': None, 'tags': None},
# ...]

🚨注意

  1. 該方法運行時間取決于好友數量,約每秒6~8個好友的速度
2. 獲取詳細信息

參數說明:

參數名類型默認值說明
nintNone獲取前n個好友詳情信息, 默認為None,獲取所有好友詳情信息
timeoutint0xFFFFF獲取好友詳情信息的超時時間,單位為秒
from wxauto import WeChatwx = WeChat()friend_details = wx.GetAllFriendsDetail()
# [{'微信號:': 'abc123456',
#   '地區:': '上海 浦東新區',
#   '備注': '',
#   '標簽': 'wxauto',
#   '共同群聊': '1個',
#   '來源': '通過掃一掃添加',
#   '昵稱': '張三'},
# {'備注': '',
#  '企業': '廣州融創文旅城',
#  '實名': '***',
#  '官方商城': '🎫購滑雪票入口🎫',
#  '通知': '回復時間為工作日9點-18點',
#  '會員商城': '🏂熱雪值兌換雪票🏂',
#  '冰箱贊滑': '👬申請冰箱主理人👭',
#  '全民滑雪': '購票贏黃金會籍',
#  '共同群聊': '1個',
#  '昵稱': '廣州大冰箱'},...]

🚡注意

  1. 該方法運行時間較長,約0.5~1秒一個好友的速度,好友多的話可將n或者timeout參數設置為一個較小的值,先測試一下
  2. 如果遇到企業微信的好友且為已離職狀態,可能導致微信卡死,需重啟(此為微信客戶端BUG)

四、對象說明

消息對象

消息對象指的是調用GetAllMessage、GetListenMessage等方法后返回的消息對象,分為物種消息類型,分別是系統消息 時間消息 撤回消息 好友消息 自己的消息,消息對象包含了消息的所有信息,包括消息類型、消息內容、消息發送者等。

1. 系統消息

支持屬性:

屬性名類型說明
typestr消息類型,固定為sys
contentstr消息內容
senderstr發送者,固定為SYS
infolist原始消息信息,包含了消息的所有信息
controluiautomation.Control該消息的uiautomation控件
idstr消息id
...  # 此處省略wx對象的初始化
msgs = wx.GetAllMessage()
for msg in msgs:if msg.type == 'sys':print(f'【系統消息】{msg.content}')
2. 時間消息

支持屬性:

屬性名類型說明
typestr消息類型,固定為time
contentstr消息內容
senderstr發送者,固定為Time
timestr時間消息內容,格式為%Y-%m-%d %H:%M
infolist原始消息信息,包含了消息的所有信息
controluiautomation.Control該消息的uiautomation控件
idstr消息id
...  # 此處省略wx對象的初始化
msgs = wx.GetAllMessage()
for msg in msgs:if msg.type == 'time':print(f'【時間消息】{msg.time}')
3. 撤回消息

支持屬性:

屬性名類型說明
typestr消息類型,固定為recall
contentstr消息內容
senderstr發送者,固定為Recall
infolist原始消息信息,包含了消息的所有信息
controluiautomation.Control該消息的uiautomation控件
idstr消息id
...  # 此處省略wx對象的初始化
msgs = wx.GetAllMessage()
for msg in msgs:if msg.type == 'recall':print(f'【撤回消息】{msg.content}')
4. 好友消息

支持屬性:

屬性名類型說明
typestr消息類型,固定為friend
contentstr消息內容
senderstr發送者
sender_remarkstr發送者備注名
infolist原始消息信息,包含了消息的所有信息
controluiautomation.Control該消息的uiautomation控件
idstr消息id
...  # 此處省略wx對象的初始化
msgs = wx.GetAllMessage()
for msg in msgs:if msg.type == 'friend':sender = msg.sender # 這里可以將msg.sender改為msg.sender_remark,獲取備注名print(f'{sender}{msg.content}')

支持方法

方法名說明
quote引用消息進行回復,唯一參數msg,str類型
...  # 此處省略wx對象的初始化
msgs = wx.GetAllMessage()
for msg in msgs:if msg.type == 'friend':msg.quote('回復消息')  # 引用消息進行回復break
5. 自己的消息

支持屬性:

屬性名類型說明
typestr消息類型,固定為self
contentstr消息內容
senderstr發送者
infolist原始消息信息,包含了消息的所有信息
controluiautomation.Control該消息的uiautomation控件
idstr消息id
...  # 此處省略wx對象的初始化
msgs = wx.GetAllMessage()
for msg in msgs:if msg.type == 'self':print(f'{msg.sender}{msg.content}')

支持方法

方法名說明
quote引用消息進行回復,唯一參數msg,str類型
...  # 此處省略wx對象的初始化
msgs = wx.GetAllMessage()
for msg in msgs:if msg.type == 'self':msg.quote('回復消息')  # 引用消息進行回復break

聊天窗口對象

聊天窗口對象指的是監聽消息模式下打開的獨立聊天窗口,這個對象用于對該獨立窗口的管理,包括獲取聊天窗口的消息、發送消息等。

支持屬性:

屬性名類型說明
whostr當前聊天窗口的對象名
UiaAPIuiautomation.Control當前聊天窗口的uiautomation控件
editboxuiautomation.Control當前聊天窗口輸入框的uiautomation控件

支持方法:

方法名說明
AtAll@所有人
SendMsg發送消息
SendFiles發送文件
GetAllMessage獲取消息
GetNewMessage獲取新消息
LoadMoreMessage加載更多消息
GetGroupMembers獲取群成員

會話列表對象

會話列表對象即微信左側的會話列表,可利用該對象獲取看到的信息

支持屬性:

屬性名類型說明
namestr會話對象名
timestr最后一條消息的時間
contentstr最后一條消息的內容
isnewbool是否有新消息
from wxauto import WeChatwx = WeChat()sessions = wx.GetSession()for session in sessions:print(f"============== 【{session.name}】 ==============")print(f"最后一條消息時間: {session.time}")print(f"最后一條消息內容: {session.content}")print(f"是否有新消息: {session.isnew}")

示例:

請先登錄PC微信客戶端

from wxauto import *# 獲取當前微信客戶端
wx = WeChat()# 獲取會話列表
wx.GetSessionList()# 向某人發送消息(以`文件傳輸助手`為例)
msg = '你好~'
who = '文件傳輸助手'
wx.SendMsg(msg, who)  # 向`文件傳輸助手`發送消息:你好~# 向某人發送文件(以`文件傳輸助手`為例,發送三個不同類型文件)
files = ['D:/Desktop/Tests/wxauto.py','D:/Desktop/Tests/wxauto.png','D:/Desktop/Tests/files.zip'
]
who = '文件傳輸助手'
wx.SendFiles(filepath=files, who=who)  # 向`文件傳輸助手`發送上述三個文件# 下載當前聊天窗口的聊天記錄及圖片
msgs = wx.GetAllMessage(savepic=True)   # 獲取聊天記錄,及自動下載圖片

他會打開你的微信窗口,然后搜索文件傳輸助手,將你好發送出去,也會將文件發送出去,同時將本窗口聊天記錄里的圖片下載下來。
你會在你項目列表里發現新建了一個名為wxauto文件的文件夾,里面就保存了下載下來的圖片。。

免責聲明

代碼僅供交流學習使用,請勿用于非法用途和商業用途!如因此產生任何法律糾紛,均與作者無關!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39910.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39910.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39910.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kpatch Patch Author Guide

kpatch Patch Author Guide Because kpatch-build is relatively easy to use, it can be easy to assume that a successful patch module build means that the patch is safe to apply. But in fact that’s a very dangerous assumption. 由于 kpatch-build 比較容易使用…

精通Spring Cloud: Spring Cloud Config面試題詳解及參考答案(3萬字長文)

解釋Spring Cloud Config的基本功能和它在微服務架構中的作用 Spring Cloud Config是一個用于集中管理和外部化配置的工具。其核心功能在于允許開發者將配置從代碼中分離出來,放置于一個中央存儲庫中,從而簡化了配置管理,提高了應用程序的可維護性和靈活性。在微服務架構中…

論文的3個創新點方向

1、數據分析創新 通過對現有數據的分析&#xff0c;發現新的模式或趨勢&#xff0c;提出新的假設或理論的方法。隨著大數據和人工智能技術的發展&#xff0c;數據分析在科學研究中也有很多的創新。 可以通過實驗、調查、模擬、現場等方式收集相關數據。數據的質量和數量是數據…

掌握MySQL基礎命令:數據更新操作詳細操作(數據的增刪改)

MySQL數據修改是指使用SQL語句&#xff08;如UPDATE、INSERT、DELETE&#xff09;對數據庫表中的數據進行更改、添加或刪除的操作&#xff0c;常見的操作包括更新表中的記錄、插入新記錄以及刪除現有記錄 。 一、數據插入 1插入完整的數據記錄 2插入非完整的數據記錄 3插入多…

探討SpringMVC的工作原理

SpringMVC是Spring框架的一部分&#xff0c;是用于構建Web應用程序的一個模塊。SpringMVC遵循Model-View-Controller&#xff08;MVC&#xff09;設計模式&#xff0c;幫助開發者將應用程序的業務邏輯、控制邏輯和表示層分離。以下是SpringMVC的工作原理及其核心組件的詳細介紹…

Oracle數據庫導入導出詳解

在數據庫管理和維護過程中&#xff0c;數據的導入與導出是常見的需求&#xff0c;特別是在數據遷移、備份或數據分析等場景下尤為重要。Oracle數據庫作為企業級的數據庫管理系統&#xff0c;提供了強大的數據導入導出工具。本文將詳細介紹Oracle數據庫中數據導入和導出的常用方…

macOS使用Karabiner-Elements解決羅技鼠標G304連擊、單擊變雙擊的故障

記錄一下羅技鼠標G304單擊變雙擊的軟件解決過程和方案&#xff08;適用于macOS&#xff0c; 如果是Windows&#xff0c;使用AutoHotKey也有類似解決辦法、方案&#xff0c;改日提供&#xff09;&#xff1a; 背景&#xff1a;通過羅技Logitech G HUB軟件對羅技的游戲鼠標側鍵b…

攝像機反求跟蹤軟件/插件 Mocha Pro 2024 v11.0.2 CE Win

AE/PR/OFX/達芬奇/AVX插件 | 攝像機反求跟蹤軟件Mocha Pro 2024 v11.0.2 CE Win-PR模板網 Mocha Pro 軟件(插件)&#xff0c;用于平面運動跟蹤、3D跟蹤、動態觀察、對象移除、圖像穩定和PowerMesh有機扭曲跟蹤等功能。整合了SynthEyes核心的3D跟蹤算法&#xff0c;能夠快速自動…

k8s-第四節-Service

Service Service 通過 label 關聯對應的 PodServcie 生命周期不跟 Pod 綁定&#xff0c;不會因為 Pod 重創改變 IP提供了負載均衡功能&#xff0c;自動轉發流量到不同 Pod可對集群外部提供訪問端口集群內部可通過服務名字訪問 創建 Service kubectl apply -f service.yamlkub…

math.round和math.floor相互轉化

在Python中&#xff0c;math.round() 函數用于對浮點數進行四舍五入到最接近的整數&#xff0c;而 math.floor() 函數則是直接取浮點數的整數部分&#xff0c;即向下取整。如果你需要在 math.round() 和 math.floor() 之間進行某種“相互轉化”&#xff0c;實際上&#xff0c;你…

003-基于Sklearn的機器學習入門:回歸分析(上)

本節及后續章節將介紹機器學習中的幾種經典回歸算法&#xff0c;所選方法都在Sklearn庫中聚類模塊有具體實現。本節為上篇&#xff0c;將介紹基礎的線性回歸方法&#xff0c;包括線性回歸、邏輯回歸、多項式回歸和嶺回歸等。 2.1 回歸分析概述 回歸&#xff08;Regression&…

11 - matlab m_map地學繪圖工具基礎函數 - 繪制航跡、橢圓、風向玫瑰圖和特定的圓形區域的有關函數及其用法

11 - matlab m_map地學繪圖工具基礎函數 - 繪制航跡、橢圓、風向玫瑰圖和特定的圓形區域的有關函數及其用法 0. 引言1. 關于m_track2. 關于m_range_ring3. 關于m_ellipse4. 關于m_windrose5. 結語 0. 引言 本篇介紹下m_map中繪制航跡圖函數&#xff08;m_track&#xff09;、繪…

python 發布應用程序包

文章目錄 發布python包toml配置文件構建發布python包 官方文檔參考 將自己的python項目發布成源碼包或者wheel二進制包,供其他開發者使用。 方式: 使用py工具; distutils,該工具的使用已過時;setuptools,常用方式;wheel,在setuptools的基礎上添加了 bdist_wheel, …

【BUUCTF-PWN】4-ciscn_2019_n_1

參考&#xff1a;BUUCTF-ciscn_2019_n_1 - 紙鳶asahi - 博客園 (cnblogs.com) buuctf 刷題記錄_PWN ciscn_2019_n_1 - MuRKuo - 博客園 (cnblogs.com) 從題海中入門&#xff08;四&#xff09;ciscn_2019_n_1 - FreeBuf網絡安全行業門戶 ciscn_2019_n_1 ——兩種解法_0x4134800…

Generative Modeling by Estimating Gradients of the Data Distribution

Generative Modeling by Estimating Gradients of the Data Distribution 本文介紹宋飏提出的帶噪聲擾動的基于得分的生成模型。首先介紹基本的基于得分的生成模型的訓練方法&#xff08;得分匹配&#xff09;和采樣方法&#xff08;朗之萬動力學&#xff09;。然后基于流形假…

快速了解-注解Annotation

描述 Annotation定義&#xff1a;注解是Java語言從JDK 5.0版本開始引入的一種技術。 Annotation作用&#xff1a; 注解不是程序本身&#xff0c;但可以對程序作出解釋。這與注釋&#xff08;comment&#xff09;類似&#xff0c;但注解可以被其他程序&#xff08;如編譯器&…

react apollo hooks

1、創建ApolloProvider來包裝整個程序 <ApolloProvider client{client}><App /> <ApolloProvider> 2、useQuery查詢 工作方式usequery將返回一個數組 const {要返回的對象} useQuery(傳入參數) 實例 const query gqlquery name {whatever {field}} e…

信號量——Linux并發之魂

歡迎來到 破曉的歷程的 博客 引言 今天&#xff0c;我們繼續學習Linux線程本分&#xff0c;在Linux條件變量中&#xff0c;我們對條件變量的做了詳細的說明&#xff0c;今天我們要利用條件變量來引出我們的另一個話題——信號量內容的學習。 1.復習條件變量 在上一期博客中&…

天潤融通分析AI技術助力客戶服務,實現滿意度三倍增長

如今&#xff0c;客戶體驗越來越成為影響客戶決策的核心要素。 對于企業來講&#xff0c;客戶在不同觸點的每一次互動體驗&#xff0c;都成為塑造品牌聲譽的“Aha時刻”。但同時&#xff0c;隨著社會的發展的加速&#xff0c;客戶的需求也在日新月異&#xff0c;給企業帶來挑戰…

刷代碼隨想錄有感(125):動態規劃——最長公共子序列

題干&#xff1a; 代碼&#xff1a; class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>>dp(text1.size() 1, vector<int>(text2.size() 1, 0));for(int i 1; i < text1.size(); i){for(int j …