摘要
为了监控捣乱者、骚扰者、同行等人群加入微信群,我写了一个监控,实时监控这个人有没有偷偷混进群,如果检测到,就给你手机发送通知。
代码
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程序即可开始检测
接收到通知
请求资源或报告无效资源,请点击[反馈中心]