资讯动态

保姆级教程:用Python给Tim/QQ写个自动发消息机器人(Pywinauto+Lackey实战)

发布时间:2026/8/4 18:43:07 来源:尧图企业网站定制
零基础打造QQ/Tim消息自动化助手Python实战指南每次重复发送相同消息给多个好友时你是否想过让程序代劳今天我们将用Python打造一个能自动登录QQ/Tim、精准定位好友窗口并发送定制消息的智能助手。这个方案特别适合需要定期发送通知、问候或工作汇报的场景比如电商客服的每日数据同步、团队负责人的进度提醒或是给重要客户发送节日祝福。与传统基于API的方案不同我们采用纯视觉识别窗口操作的技术路线完全模拟人类操作流程。这种方法的最大优势是无需申请官方接口权限规避了复杂的审核流程同时能够兼容QQ和Tim双客户端。整个系统只需30行核心代码依托两个神奇的Python库——pywinauto负责窗口控制lackey处理图像识别。1. 环境准备与工具配置1.1 基础软件安装确保系统已安装以下组件Python 3.7推荐3.9稳定版QQ/Tim客户端官方最新版IDE任选VS Code/PyCharm/Spyder均可验证Python环境python --version pip list | findstr pywinauto若未安装pywinauto使用清华镜像源加速安装pip install pywinauto lackey -i https://pypi.tuna.tsinghua.edu.cn/simple注意国内用户建议永久配置pip镜像源在用户目录创建pip.ini文件写入[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple1.2 开发环境调试技巧遇到库安装失败时可尝试使用--trusted-host参数pip install --trusted-host pypi.tuna.tsinghua.edu.cn pywinauto或者指定特定版本pip install pywinauto0.6.8 lackey0.6.9验证安装成功的正确姿势import pywinauto print(pywinauto.__version__) # 应输出0.6.8 from lackey import * print(Screen(0).getNumber()) # 返回显示器数量2. 核心自动化技术解析2.1 窗口控制三要素pywinauto操作窗口的核心模式操作类型方法示例适用场景窗口定位app.window(titleQQ)精确查找目标窗口控件交互.child_window(class_nameEdit).click()输入框点击/文本输入键盘模拟type_keys(^a{DELETE})快捷键组合操作典型QQ窗口层级结构QQ主窗口 ├── 搜索框Edit ├── 联系人列表List └── 聊天窗口 ├── 消息输入区RichEdit └── 发送按钮Button2.2 图像识别实战技巧lackey库的三大核心功能模式匹配- 在屏幕上查找指定图片match find(qq_icon.png) # 返回匹配坐标 click(match) # 点击匹配位置OCR辅助- 当控件无法直接定位时text_region Region(100, 200, 300, 100) # 定义识别区域 print(text_region.text()) # 输出识别文字等待机制- 处理网络延迟wait(login_success.png, 10) # 最多等待10秒提示截图时建议使用Snipaste等工具保存为PNG格式并命名有意义的文件名3. 完整自动化流程实现3.1 启动与登录阶段from pywinauto import Application import lackey # 启动QQ客户端 app Application().start(rC:\Program Files (x86)\Tencent\QQ\Bin\QQ.exe) # 等待登录窗口出现 lackey.wait(login_window.png, 15) # 自动输入账号密码 lackey.click(account_input.png) lackey.type(your_qq_number) lackey.click(password_input.png) lackey.type(your_password{TAB}{ENTER})常见登录问题解决方案验证码出现添加wait(captcha.png)人工干预点记住密码弹窗预设click(remember_no.png)设备锁验证配置type({TAB 3}{ENTER})跳过3.2 好友查找与消息发送# 主窗口操作 main_window app.window(title_re.*QQ.*) main_window.set_focus() # 搜索好友 lackey.click(search_box.png) lackey.type(好友备注名{ENTER}) lackey.wait(1) # 等待搜索结果 # 发送消息 lackey.doubleClick(friend_avatar.png) # 打开聊天窗口 lackey.type(这是自动发送的消息~{ENTER})消息发送增强方案支持多语言混合输入lackey.type(中文[shift]English[shift]!{ENTER})定时发送功能import time while True: lackey.type(f当前时间{time.strftime(%H:%M)}{ENTER}) time.sleep(3600) # 每小时发送一次附件发送模拟lackey.click(attach_button.png) lackey.type(rC:\files\report.pdf{ENTER}{TAB 2}{ENTER})4. 异常处理与优化策略4.1 常见错误排查表错误现象可能原因解决方案窗口定位失败标题变化/多实例改用handle或process定位图像匹配超时分辨率变化/UI更新更新截图样本/调整相似度阈值中文输入乱码输入法状态异常添加lackey.type({CTRL} )操作执行过快动画未完成关键步骤后插入wait(0.5)4.2 性能优化技巧智能等待机制def smart_wait(image, timeout10, interval0.5): while timeout 0: if exists(image): return True time.sleep(interval) timeout - interval raise TimeoutError(f未找到{image})多显示器适配方案screen lackey.Screen(1) # 第二显示器 region screen.getBounds()日志记录系统def log_action(action): with open(bot.log, a) as f: f.write(f[{time.ctime()}] {action}\n)实际项目中我发现在凌晨3-5点执行自动化任务成功率最高此时系统资源占用少网络延迟低。对于需要连续操作的情况建议在每次重要动作后添加1-2秒缓冲时间这比固定延迟更可靠。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价