技术探索:利用Python库wxauto实现Windows微信客户端的全面自动化管理

news2024/11/23 18:31:23

项目地址: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 WeChat

wx = WeChat()

# 发送消息给文件传输助手
msg = 'hello, wxauto!'
who = '文件传输助手'
wx.SendMsg(msg=msg, who=who)
1.2 附带@群好友的消息
from wxauto import WeChat

wx = 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 WeChat

wx = 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 WeChat

wx = 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 WeChat

wx = 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 WeChat

wx = WeChat()

# 加载更多历史消息
wx.LoadMoreMessage()

# 获取当前聊天窗口消息
msgs = wx.GetAllMessage()
... # 自行构建消息处理逻辑

💡提示

LoadMoreMessage方法加载更多历史消息时,需要保证当前聊天窗口有历史消息,否则没有效果,即触发一次“查看更多消息”

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

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

  • GetAllNewMessage方法获取所有新消息

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

    from wxauto import WeChat
    
    wx = WeChat()
    
    # 获取下一条新消息
    msgs = wx.GetNextNewMessage()
    

这两种方法获取到的msgs数据类型均为dict,结构如下:

消息格式

{
    '张三': [msg1, msg2, ...],
    '李四': [msg1, msg2, ...],
    ...
}
2.2 监听消息

GetListenMessage方法用于获取监听消息,调用该方法之前,需要先调用AddListenChat方法添加监听对象,然后调用GetListenMessage方法实现消息监听

from wxauto import WeChat

wx = 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 WeChat

wx = 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 WeChat

wx = 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 WeChat

wx = WeChat()

# 切换到指定好友聊天框
who = '张三'
wx.ChatWith(who=who)
2. 切换微信主页面

此部分原理为点击微信左侧黑色侧边栏的相应图标按钮,切换至相应的页面。

2.1 切换到聊天页面
from wxauto import WeChat

wx = WeChat()

# 切换到聊天页面
wx.SwitchToChat()
2.2 切换到通讯录页面
from wxauto import WeChat

wx = WeChat()

# 切换到通讯录页面
wx.SwitchToContact()

获取好友信息

1. 获取粗略信息

参数说明:

参数名类型默认值说明
keywordsstrNone搜索关键词
from wxauto import WeChat

wx = 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 WeChat

wx = 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 WeChat

wx = 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.coloradmin.cn/o/1894114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同方威视受邀盛装亮相2024长三角快递物流展(杭州)助力行业物畅其流

同方威视技术股份有限公司携安全检测产品和综合解决方案&#xff0c;盛装亮相2024长三角快递物流展&#xff08;杭州&#xff09; 展位号&#xff1a;3C馆A07-1 时间&#xff1a;2024年7月8-10日 地址&#xff1a;杭州国际博览中心&#xff08;浙江省杭州市萧山区奔竞大道35…

【路由交换技术】Cisco Packet Tracer基础入门教程(五)

这一期我们来学习端口聚合&#xff0c;这是针对交换机的技术 前言 不知道大家有没有注意到&#xff0c;我们之前的实验在交换机与交换机之间只用一条线连接&#xff0c;像这样 通过今天的学习&#xff0c;我们要用两条线来连接交换机&#xff0c;就像这样&#xff08;为了能…

球形气膜:现代娱乐场馆的最佳选择—轻空间

随着科技的发展和人们对高品质生活的追求&#xff0c;娱乐场馆的建设迎来了新的变革。球形气膜结构凭借其独特的优势&#xff0c;逐渐成为现代娱乐场馆建设的最佳选择。轻空间将介绍球形气膜的优势&#xff0c;并探讨其在不同应用场景中的广泛应用。 球形气膜的优势 1. 独特的建…

Kotlin和Java的一些不同点

1.Kotlin 的变量是没有默认值的&#xff08;因此要求初始化&#xff09;&#xff0c;Java的成员变量是有默认值的 Java的成员变量&#xff1a; String name; // 默认值是 null int count; // 默认值是 0不过其实 Java 也只是成员变量有默认值&#xff0c;局部变量也是没有默…

以品质为初心,以创新为驱动,光明乳业闪耀第十五届中国奶业大会

2024年7月3日&#xff0c;以“数智赋能引领产业发展增长点&#xff0c;科技创新驱动奶业新质生产力”为主题的中国奶业协会第十五届奶业大会奶业20强&#xff08;D20&#xff09;论坛暨2024中国奶业展览会隆重召开&#xff0c;光明乳业党委书记、董事长黄黎明受邀出席会议&…

Linux 压测工具---ab

安装 yum -y install httpd-tools 本文用于压测k8s集群内pod&#xff0c;k8s集群master可直接测试pod ip 命令&#xff1a; ab -n 10000 -c 100 http://10.42.8.212/ 其中&#xff0c;-n表示请求数&#xff0c;-c表示并发数&#xff0c;ip必须有”/“&#xff0c;表示此目录…

如何清理电脑内存?让电脑运行如飞!

电脑内存&#xff08;RAM&#xff09;的清理对于维持系统的流畅运行至关重要。随着使用时间的增加&#xff0c;系统内存会被各种应用程序和后台进程占用&#xff0c;导致系统响应变慢&#xff0c;甚至出现卡顿现象。通过有效地清理内存&#xff0c;可以提升电脑的性能&#xff…

5.基于SpringBoot的SSMP整合案例-数据层开发

目录 1.新建项目 2.实体类开发&#xff1a; 2.1在pom.xml中增加Lombok坐标&#xff1a; 2.2添加Book实体类 3.数据层开发&#xff1a; 3.1 配置MyBatisPlus与Druid 3.2创建数据层接口 3.3写测试类 3.4点击运行&#xff1a; 4.数据层快速开发&#xff1a; 4.1配置MyB…

【数据结构】02.顺序表

一、顺序表的概念与结构 1.1线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0…

HighConcurrencyCommFramework c++通讯服务器框架 :简介-信号处理

项目是4月份左右做的现在整理到博客上&#xff0c;顺便加深一下印象 介绍 项目描述:该项目是使用 C 实现的高并发服务器脚手架&#xff0c;包含线程池和连接池等技术&#xff0c;支持开发者进行二次开发复用&#xff0c;只需 要添加对应业务逻辑即可完成通信服务器、网络交易…

【Termius】详细说明MacOS中的SSH的客户端利器Termius

希望文章能给到你启发和灵感~ 如果觉得有帮助的话,点赞+关注+收藏支持一下博主哦~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境二、软件的安装2.1 Termius界面介绍2.1.1 Hosts 主机列表2.1.2 SFTP 文件传输2.1.3 Port ForWarding 端口转发2.1.4 Snippets 片…

afrog-漏洞扫描(挖洞)工具【了解安装使用详细】

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、afrog介绍 afrog 是一款性能卓越、快速稳定、PoC可定…

全面教程:在Ubuntu上快速部署ZeroTier,实现Windows与VSCode的局域网无缝访问

文章目录 1 背景介绍2 Windows上的操作3 Ubuntu上的操作4 连接 1 背景介绍 在现代工作环境中&#xff0c;远程访问公司内网的Ubuntu主机对于开发者来说是一项基本需求。然而&#xff0c;由于内网的限制&#xff0c;传统的远程控制软件如向日葵和todesk往往无法满足这一需求。作…

【后端面试题】【中间件】【NoSQL】MongoDB查询过程、ESR规则、覆盖索引的优化

任何中间件的面试说到底都是以高可用、高性能和高并发为主&#xff0c;而高性能和高并发基本是同时存在的。 性能优化一直被看作一个高级面试点&#xff0c;因为只有对原理了解得很透彻的人&#xff0c;在实践中才能找准性能优化的关键点&#xff0c;从而通过各种优化手段解决性…

YOLOv5改进 | 损失函数 | EIoU、SIoU、WIoU、DIoU、FocuSIoU等多种损失函数

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 …

VsCode允许JSON文件注释

打开设置 配置 输入&#xff1a;文件关联或者Files: Associations

Qt实现检测软件是否多开

Qt实现检测软件是否多开 在桌面软件开发中&#xff0c;软件通常要设置只允许存在一个进程&#xff0c;像一些熟知的音乐软件&#xff0c;QQ音乐这种。而这些软件在限制只有一个进程的同时&#xff0c;通常还会有双击桌面图标唤醒已运行的后台进程的功能。关于双击桌面唤醒已运…

Android广播机制

简介 某个网络的IP范围是192.168.0.XXX&#xff0c;子网 掩码是255.255.255.0&#xff0c;那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一 网络上的所有端口&#xff0c;这样在该网络中的每台主机都将会收到这条广播。为了便于进行系统级别的消息通知&…

Android使用http加载自建服务器静态网页

最终效果如下图&#xff0c;成功加载了电脑端的静态网页内容&#xff0c;这是一个xml文件。 电脑端搭建http服务器 使用“Apache Http Server”&#xff0c;下载地址是&#xff1a;https://httpd.apache.org/download.cgi。具体操作步骤&#xff0c;参考&#xff1a;Apache …

使用 urllib OpenSSL 时遇到的问题及解决

题意&#xff1a; ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ssl module is compiled with LibreSSL 2.8.3 当前使用的 urllib3 版本&#xff08;v2.0&#xff09;仅支持 OpenSSL 1.1.1 或更高版本&#xff0c;但你的 Python 环境中的 ssl 模块…