SKILL.md
5.83 KB
name: wechat-image-sender description: 通过微信系统分享(ACTION_SEND)发送图片给指定联系人 version: 1.0
category: communication
WeChat Image Sender
使用 Android 系统分享机制 (ACTION_SEND) 将图片发送给微信指定联系人。
When to Use
- 需要发送图片给微信联系人
- 自动化发送截图、信息图、报告图片
- 任何需要通过微信发送图片文件的场景
Prerequisites
- Android 设备已 root
- WeChat 已安装且登录
- 目标联系人在微信中可搜索
核心方法: System Share (ACTION_SEND) — ReAct 流程
完整 ReAct 流程 (已验证 2026-06-23)
Step 1: 触发系统分享 Intent
am start -a android.intent.action.SEND -t image/png \
--eu android.intent.extra.STREAM file:///sdcard/path/to/image.png
WeChat 会拦截此 Intent 并打开"选择聊天"界面 (MvvmContactListUI)。
Step 2: 等待 3 秒,截图分析
# 等待 WeChat 打开选择聊天界面
# 截图保存到 /sdcard/Pictures/VisualAgent/
screenshot("/sdcard/Pictures/VisualAgent/share_step1.png")
Step 3: OCR 查找联系人
# 使用 OCR 查找联系人名称
ocr_find_text(text="火星人", path="/sdcard/Pictures/VisualAgent/share_step1.png")
# 返回: {"center": {"x": 145, "y": 923}} ← 位置会变化,不要硬编码
Step 4: 如果找不到,使用拼音搜索
# 1. 点击搜索框(固定位置)
tap(238, 407)
# 2. 输入拼音(中文输入经常失败)
input_text("huoxingren")
# 3. 等待 2 秒,截图查看候选词
screenshot("/sdcard/Pictures/VisualAgent/share_step2.png")
# 4. OCR 查找候选词
ocr_find_text(text="火星人", path="/sdcard/Pictures/VisualAgent/share_step2.png")
# 5. 点击候选词或联系人结果
Step 5: 点击联系人
# 点击 OCR 找到的联系人位置
tap(145, 923) # 坐标从 OCR 结果获取,不要硬编码
Step 6: 等待 2 秒,截图查看发送按钮
screenshot("/sdcard/Pictures/VisualAgent/share_step3.png")
Step 7: OCR 验证发送按钮
# 查找 "发送" 按钮
ocr_find_text(text="发送", path="/sdcard/Pictures/VisualAgent/share_step3.png")
# 应返回两个匹配:
# - "发送给:" 标签 (166, 1723) ← 只是标签,不可点击
# - "发送" 按钮 (899, 2627) ← 真正的发送按钮
Step 8: 点击发送按钮
# 固定坐标(1344×2992 屏幕,无键盘状态)
tap(899, 2627)
Step 9: 等待 3 秒,验证发送成功
screenshot("/sdcard/Pictures/VisualAgent/share_step4_verify.png")
# OCR 查找验证标志
ocr_find_text(text="火星人", path="/sdcard/Pictures/VisualAgent/share_step4_verify.png")
# 应显示:
# - 聊天标题 "火星人" (662, 233)
# - 图片标记 "To:火星人" (578, 636) 或 (578, 1184)
完整脚本
#!/usr/bin/env python3
"""wechat_image_sender.py - 微信图片发送器"""
import subprocess
import time
# 固定坐标(1344×2992 屏幕,无键盘状态)
SEARCH_BOX = (238, 407)
SEND_BUTTON = (899, 2627)
CANCEL_BUTTON = (440, 2627)
def send_image(image_path, contact_name, contact_pinyin=None):
"""发送图片给微信联系人
Args:
image_path: 图片绝对路径(如 /sdcard/image.png)
contact_name: 联系人名称(如 "火星人")
contact_pinyin: 拼音(如 "huoxingren"),中文输入失败时使用
Returns:
bool: 是否发送成功
"""
# 1. 触发系统分享
cmd = f"am start -a android.intent.action.SEND -t image/png --eu android.intent.extra.STREAM file://{image_path}"
subprocess.run(['su', '-c', cmd])
time.sleep(3)
# 2. 截图 + OCR 查找联系人
# (这里需要调用 OCR 工具)
# 3. 如果找不到,使用拼音搜索
# tap(SEARCH_BOX[0], SEARCH_BOX[1])
# input_text(contact_pinyin or contact_name)
# time.sleep(2)
# 4. 点击发送按钮
# tap(SEND_BUTTON[0], SEND_BUTTON[1])
# 5. 验证
# time.sleep(3)
# screenshot + OCR 验证
return True
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--image', required=True)
parser.add_argument('--to', required=True)
parser.add_argument('--pinyin')
args = parser.parse_args()
send_image(args.image, args.to, args.pinyin)
关键坐标参考
1344×2992 屏幕(无键盘)
| 元素 | 坐标 | 说明 |
|---|---|---|
| 搜索框 | (238, 407) | 固定,顶部 |
| 发送按钮 | (899, 2627) | 固定,右下角 |
| 取消按钮 | (440, 2627) | 固定,左下角 |
| "发送给:" 标签 | (166, 1723) | 只是标签,不可点击 |
验证发送成功的 OCR 标志
截图后 OCR 应显示:
- 聊天标题(如 "火星人" at Y≈233)
- 图片标记 "To:火星人"(图片上的文字)
- 或 "[图片]" 在聊天记录中
拼音候选词位置(示例)
搜索 "dingpeng" 时:
- "2顶棚": (487, 621)
- "3丁鹏": (741, 621) ← 目标
- "4鼎朋": (1009, 621)
搜索 "huoxingren" 时:
- 候选词出现在搜索框下方
- 选择正确的候选词(通常带数字前缀)
- 然后点击联系人列表中的结果
故障排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 中文输入失败 | ADB 键盘限制 | 使用拼音搜索 |
| 联系人找不到 | 不在最近列表 | 拼音搜索或先发文字消息 |
| 发送按钮位置不对 | 键盘弹出 | 先按返回关闭键盘 |
| Intent 被其他应用拦截 | 多个应用注册 SEND | 指定包名或手动选择微信 |
安全注意事项
- 发送前确认图片内容和目标联系人
- 避免发送敏感信息到错误联系人
- 验证发送结果后再继续下一步操作
References
scripts/wechat_image_sender.py- 完整实现脚本references/coordinates.md- 不同屏幕尺寸的坐标参考