摘要
为了监控捣乱者、骚扰者、同行等人群加入微信群,我写了一个监控,实时监控这个人有没有偷偷混进群,如果检测到,就给你手机发送通知。
代码
import uiautomation as automation
import requests
import time
def send_results(results, url):
payload = {"results": results}
try:
response = requests.post(url, json=payload)
if response.status_code == 200:
print("---检测结果已发送至服务器---")
else:
print(f"发送失败,状态码: {response.status_code}")
except requests.RequestException as e:
print(f"发送请求时发生错误: {e}")
def get_filtered_controls_at_depth(control, target_depth, filter_strings, bypass_strings, current_depth=0, detected_controls=None):
if detected_controls is None:
detected_controls = set()
results = []
try:
if current_depth == target_depth:
# 如果控件名称包含任何绕过字符串,则跳过该控件
if any(bypass_string in control.Name for bypass_string in bypass_strings):
return results
# 如果控件名称包含任何过滤字符串且该控件未被检测过,则添加到结果中
if any(filter_string in control.Name for filter_string in filter_strings) and control.Name not in detected_controls:
# 只返回控件内容
results.append(control.Name)
detected_controls.add(control.Name)
except Exception as e:
print(f"处理控件信息时发生错误: {e}")
try:
children = control.GetChildren()
for child in children:
results.extend(get_filtered_controls_at_depth(child, target_depth, filter_strings, bypass_strings, current_depth + 1, detected_controls))
except Exception as e:
print(f"获取子控件时发生错误: {e}")
return results
def monitor_chat_window(target_depth, filter_strings, bypass_strings, interval, url):
detected_controls = set()
while True:
try:
# 获取名为 "ChatWnd" 的窗口
window = automation.WindowControl(ClassName="ChatWnd")
if window.Exists(0, 0):
results = get_filtered_controls_at_depth(window, target_depth, filter_strings, bypass_strings, detected_controls=detected_controls)
# 打印结果
if results:
for result in results:
print(result)
send_results(result, url)
else:
# 移除每次循环中输出的 "持续为您监控中..."
pass
except Exception as e:
print(f"主循环中发生错误: {e}")
send_results(f"主循环中发生错误: {e}", url)
# 等待指定的时间间隔
time.sleep(interval)
if __name__ == "__main__":
# 配置参数
target_depth = 12 # 检测的控件的深度(这里是固定的检测进群记录就是深度12别修改)
filter_strings = ["蔡徐坤"] # 要检测的字符串
bypass_strings = ["移出了群聊"] # 要绕过检测的字符串
interval = 1 # 检测的频率(秒)
url = "https://xxxxxxxxx" # 接收监控结果的URL
try:
print("持续为您监控中...") # 只输出一次
# 开始监控
monitor_chat_window(target_depth, filter_strings, bypass_strings, interval, url)
except KeyboardInterrupt:
print("检测程序被中断,正在退出...")
# 发送中断信息到服务器
send_results("检测程序被中断", url)
print("程序已退出")
这段代码的主要功能是通过监控名为 “ChatWnd”
的窗口,检查控件的名称是否包含特定的过滤字符串,并将检测结果通过 HTTP POST
请求发送到指定的URL,其背后的原理是通过 Python uiautomation
这个库去读取微信电脑版界面的控件去解析到具体的信息。
如何使用
- 打开微信电脑版你要监控的群单独拉出来
- 在代码中的【要检测的字符串】中配置你要检测的微信用户昵称
- 配置接收通知的URL
- CMD运行python程序即可开始检测
- 整个过程请保持你要监控的群是不关闭的状态(最小化是可以的)
👇打开微信电脑版你要监控的群单独拉出来
👇CMD运行python程序即可开始检测
👇接收到通知
本文作者
TANKING
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。