"""WeChat 消息自动点击器 — 入口 自动点击微信桌面端未读消息中的图片和文件,触发原始文件下载。 """ import argparse import signal import sys from wechat_clicker.config import Config from wechat_clicker.automator import WeChatAutomator from wechat_clicker.logger_setup import setup_logging def main(): parser = argparse.ArgumentParser( description="微信消息自动点击器 — 自动点击图片和文件触发下载" ) parser.add_argument( "--config", default="config.yaml", help="配置文件路径 (默认: config.yaml)" ) parser.add_argument( "--dry-run", action="store_true", help="试运行模式:只扫描不点击" ) parser.add_argument( "--once", action="store_true", help="只执行一次扫描循环后退出" ) parser.add_argument( "--debug", action="store_true", help="开启详细日志 (DEBUG 级别)" ) parser.add_argument( "--dump-ui", action="store_true", help="输出微信 UI 元素树后退出 (调试用)" ) parser.add_argument( "--chat", help="配合 --dump-ui 使用:进入指定聊天并 dump 消息区域元素树" ) args = parser.parse_args() # 加载配置 config = Config(args.config) if args.debug: config.override("logging.level", "DEBUG") # 初始化日志 logger = setup_logging(config) logger.info("微信自动点击器启动") if args.dry_run: logger.info("*** 试运行模式:只扫描不点击 ***") # 优雅退出 def signal_handler(sig, frame): logger.info("收到退出信号,正在关闭...") sys.exit(0) signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler) # 创建自动化器 automator = WeChatAutomator(config, dry_run=args.dry_run) # 执行 if args.dump_ui: automator.dump_ui_tree(chat_name=args.chat) elif args.once: automator.run_once() else: automator.run() if __name__ == "__main__": main()