Python+Appium实现微信自动化:添加好友与消息发送
1. 项目概述最近在做一个微信自动化项目用PythonAppium实现自动添加好友、发送消息等功能。这个方案特别适合需要批量处理微信操作的小伙伴比如社群运营、客户维护等场景。下面把我踩过的坑和完整实现过程分享给大家。2. 环境准备2.1 基础环境配置首先需要准备以下环境Windows/Mac OSJava JDK 1.8Android SDKPython 3.7Appium Desktop安卓模拟器推荐MuMu安装完JDK后要配置环境变量新建JAVA_HOME变量指向JDK安装目录在Path中添加%JAVA_HOME%\bin新建CLASSPATH变量值为.;%JAVA_HOME%\libAndroid SDK配置类似新建ANDROID_HOME变量在Path中添加platform-tools和tools目录注意环境变量配置完成后一定要重启命令行窗口才能生效2.2 Appium安装与配置Appium的安装有两种方式通过npm安装npm install -g appium直接下载Appium Desktop客户端推荐使用客户端版本可视化界面操作更方便。安装完成后需要配置Android SDK路径启动Appium服务安装Python客户端库pip install Appium-Python-Client2.3 模拟器设置我用的MuMu模拟器安装后需要在应用中心安装微信登录测试账号开启adb连接adb connect 127.0.0.1:7555检查设备连接adb devices3. 核心实现3.1 初始化WebDriver首先定义desired_capabilitiesdesired_caps { platformName: Android, deviceName: emulator-5554, platformVersion: 6.0.1, appPackage: com.tencent.mm, appActivity: com.tencent.mm.ui.LauncherUI, noReset: True, unicodeKeyboard: True, resetKeyboard: True }然后初始化驱动from appium import webdriver driver webdriver.Remote(http://127.0.0.1:4723/wd/hub, desired_caps)3.2 元素定位技巧微信的元素ID经常会变建议使用Appium Inspector来实时查看启动Appium会话点击刷新按钮获取当前页面元素通过xpath或resource-id定位元素常用定位方式# 通过ID定位 driver.find_element_by_id(com.tencent.mm:id/f8y) # 通过xpath定位 driver.find_element_by_xpath(//android.widget.TextView[text添加朋友]) # 通过class定位 driver.find_elements_by_class_name(android.widget.Button)[0]3.3 自动添加好友实现完整代码示例def add_friend(driver, wechat_id): time.sleep(5) # 点击 driver.find_element_by_id(com.tencent.mm:id/ef9).click() time.sleep(2) # 选择添加朋友 driver.find_elements_by_id(com.tencent.mm:id/gam)[1].click() time.sleep(2) # 输入微信号 driver.find_element_by_id(com.tencent.mm:id/bhn).send_keys(wechat_id) time.sleep(1) # 点击搜索 driver.find_element_by_id(com.tencent.mm:id/ga1).click() time.sleep(3) # 添加到通讯录 driver.find_element_by_id(com.tencent.mm:id/g6f).click()3.4 自动发送消息实现发送消息流程def send_message(driver, name, content): # 点击搜索框 driver.find_element_by_id(com.tencent.mm:id/f8y).click() time.sleep(1) # 输入联系人 driver.find_element_by_id(com.tencent.mm:id/bhn).send_keys(name) time.sleep(1) # 点击联系人 driver.find_element_by_id(com.tencent.mm:id/tm).click() time.sleep(1) # 输入内容 driver.find_element_by_id(com.tencent.mm:id/al_).send_keys(content) time.sleep(1) # 点击发送 driver.find_element_by_id(com.tencent.mm:id/anv).click()4. 常见问题解决4.1 元素定位失败可能原因页面未加载完成 - 增加等待时间元素ID变更 - 使用Appium Inspector重新获取页面层级变化 - 改用xpath定位解决方案# 显式等待 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, com.tencent.mm:id/f8y)) )4.2 模拟器卡顿处理方法增加操作间隔时间关闭模拟器不必要的功能分配更多内存给模拟器4.3 微信版本兼容不同微信版本界面可能有差异建议固定使用某个微信版本准备多套定位方案定期更新自动化脚本5. 优化建议使用Page Object模式封装页面元素添加异常处理和日志记录实现自动重试机制加入图像识别作为备用方案使用配置文件管理账号信息这个方案在实际项目中运行稳定每天可以自动处理上千个好友请求。关键是要处理好各种异常情况建议先用测试账号充分验证。