From cb6ddbb76db170b3da734663937b2ce0e5eb2547 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Sat, 31 Jan 2026 07:54:15 +0800 Subject: [PATCH] 'commit' --- WeiXin/T5_SendText_ActionTest.py | 29 ++++++++++++++++------ WeiXin/WxUtil.py | 14 ++++++++++- WeiXin/__pycache__/WxUtil.cpython-310.pyc | Bin 33609 -> 34178 bytes 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/WeiXin/T5_SendText_ActionTest.py b/WeiXin/T5_SendText_ActionTest.py index 2ccba7d..13634e5 100644 --- a/WeiXin/T5_SendText_ActionTest.py +++ b/WeiXin/T5_SendText_ActionTest.py @@ -74,18 +74,33 @@ def main(): # - Input text # - Find and click Send button - logger.info("Step 1 & 2: Finding input box and writing text...") + logger.info("Step 1: Finding input box and writing text...") - # We can get a rough position first for logging, though perform_input_action is more robust - screenshot_path = os.path.join(WxUtil.OUTPUT_DIR, "T5_Initial_Check.jpg") - d.screenshot(screenshot_path) - input_pos, _ = WxUtil.find_input_box_center(screenshot_path) - logger.info(f"Initial target input position: {input_pos}") + # We pass debug_prefix="T5" to perform_input_action to get intermediate screenshots + # The function will save: + # - T5_1_check_mode.jpg + # - T5_2_after_mode.jpg + # - T5_3_input_box_found.jpg (if template matched) + # - T5_4_after_input.jpg + # - T5_5_after_send.jpg + + # Initial state screenshot + initial_path = os.path.join(WxUtil.OUTPUT_DIR, "T5_0_Initial.jpg") + d.screenshot(initial_path) + logger.info(f"Initial state screenshot saved: {initial_path}") - success = WxUtil.perform_input_action(d, input_pos, test_text, auto_send=True) + # Use a more robust way to find input_pos for logging + input_pos, _ = WxUtil.find_input_box_center(initial_path) + logger.info(f"Target input position (estimated): {input_pos}") + + success = WxUtil.perform_input_action(d, input_pos, test_text, auto_send=True, debug_prefix="T5") if success: logger.info("✅ Step 3: Send action completed successfully.") + # Final state screenshot + final_path = os.path.join(WxUtil.OUTPUT_DIR, "T5_6_Final.jpg") + d.screenshot(final_path) + logger.info(f"Final state screenshot saved: {final_path}") else: logger.error("❌ Send action failed.") diff --git a/WeiXin/WxUtil.py b/WeiXin/WxUtil.py index 8554c07..bdd3da9 100644 --- a/WeiXin/WxUtil.py +++ b/WeiXin/WxUtil.py @@ -1186,13 +1186,21 @@ def find_all_template_matches(screen_path, template_path, threshold=0.8): logger.error(f"find_all_template_matches failed: {e}") return [] -def perform_input_action(d, center_point, text, auto_send=True): +def perform_input_action(d, center_point, text, auto_send=True, debug_prefix=None): """ 执行输入操作 + :param debug_prefix: 如果提供,将在关键步骤保存截图,如 {debug_prefix}_before_mode.jpg """ try: + def save_debug_shot(name): + if debug_prefix: + shot_path = os.path.join(OUTPUT_DIR, f"{debug_prefix}_{name}.jpg") + d.screenshot(shot_path) + logger.info(f"保存中间过程截图: {shot_path}") + # --- 新增逻辑:确保处于文字输入模式 --- logger.info("正在检查输入模式...") + save_debug_shot("1_check_mode") # 优先使用 uiautomator2 的属性检测(比图像识别更稳) # 1. 检查是否有 "切换到键盘" 按钮(说明当前是语音模式) @@ -1230,6 +1238,7 @@ def perform_input_action(d, center_point, text, auto_send=True): except: pass # --- 新增逻辑结束 --- + save_debug_shot("2_after_mode") # 1. 尝试找到原生输入框并输入 # 增加多种查找方式 @@ -1252,6 +1261,7 @@ def perform_input_action(d, center_point, text, auto_send=True): if input_pos: logger.info(f"✅ [Template] 通过 input_text.jpg 找到输入框: {input_pos}") + save_debug_shot("3_input_box_found") # 绘制调试图 (蓝框) try: @@ -1335,6 +1345,7 @@ def perform_input_action(d, center_point, text, auto_send=True): # 尝试粘贴 d.press("paste") + save_debug_shot("4_after_input") time.sleep(1.0) # 3. 发送 @@ -1360,6 +1371,7 @@ def perform_input_action(d, center_point, text, auto_send=True): d.press("enter") logger.info("Pressed Enter") + save_debug_shot("5_after_send") # 清理临时文件 if os.path.exists(tmp_screen): try: diff --git a/WeiXin/__pycache__/WxUtil.cpython-310.pyc b/WeiXin/__pycache__/WxUtil.cpython-310.pyc index c71beb838bcdbc8867ccf12ceeedaec6b29278f7..be5d10b91f21f526b983a337773eb32b85136f72 100644 GIT binary patch delta 7055 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 Up#D_|Q)e{ZYG&`9h>(u|2X<+up8x;= delta 6423 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 XyA-WKS{=et8u3<_z{(#`$oBsSP}tv3