如何为PyAutoGUI添加异常处理:解决WhatsApp自动发消息无效联系人问题
WhatsApp自动发消息程序:无效号码跳过逻辑实现
问题背景
用PyAutoGUI开发了WhatsApp网页版自动发消息程序,当前存在以下问题:
- 号码库中部分号码不存在或未注册WhatsApp
- 有效号码可正常触发对话并发送消息
- 无效号码会导致消息误发至联系人所在群组
- 需要添加异常处理,跳过无效号码,同时保留
y += 17、yy += 18的坐标递增逻辑
解决方案思路
利用PyAutoGUI的图像识别功能,检测WhatsApp网页版针对无效号码弹出的提示框(如"找不到此联系人"的弹窗)。若检测到该提示,说明当前号码无效,直接跳过后续发送流程,执行坐标递增后进入下一次循环;若未检测到,则继续完成消息发送流程。
前置准备
提前截取WhatsApp网页版中无效号码提示框的截图,保存为invalid_contact.png,确保截图清晰,只包含提示框核心区域。
修改后的完整代码
import pyautogui import pyperclip import time import random import pygame pyautogui.pause = 2 # 提前截取的无效号码提示框图片路径 INVALID_CONTACT_IMG = "invalid_contact.png" text = """message message message""" # 启动浏览器并打开WhatsApp网页版 pyautogui.press('win') pyautogui.write('brave') pyautogui.press('enter') time.sleep(2) pyautogui.hotkey('ctrl','t') pyperclip.copy('https://web.whatsapp.com/') pyautogui.hotkey('ctrl', 'v') pyautogui.press('enter') time.sleep(10) x = 1513 y = 152 yy = 183 for i in range(40): # 点击联系人所在群组 pyautogui.click(x=339, y=383) # 点击当前待处理的联系人 pyautogui.click(x=x, y=y) time.sleep(1) pyautogui.click(x=x, y=y) time.sleep(random.uniform(1.2, 3.5)) pyautogui.click(x=x, y=y) # 点击"开始聊天"按钮 pyautogui.click(x=1400, y=yy) time.sleep(random.uniform(0.7, 1.8)) # 检测是否为无效号码 invalid_contact = pyautogui.locateOnScreen(INVALID_CONTACT_IMG, confidence=0.8) if invalid_contact: # 若检测到无效号码提示,跳过发送流程 print(f"第{i+1}个号码无效,跳过发送") # 关闭提示框(根据实际提示框关闭按钮坐标调整) pyautogui.click(x=1600, y=200) # 示例坐标,需根据实际页面调整 time.sleep(1) else: # 有效号码,执行消息发送流程 pyautogui.click(x=788, y=966) time.sleep(random.uniform(2.0, 3.8)) pyperclip.copy(text) pyautogui.hotkey('ctrl','v') time.sleep(random.uniform(2.0, 4.0)) pyautogui.press('enter') time.sleep(random.uniform(4.5, 10.3)) # 无论号码是否有效,都执行坐标递增 y += 17 yy += 18 # 任务完成提示音 pygame.init() pygame.mixer.music.load("beet.mp3") pygame.mixer.music.play()
关键修改说明
- 添加图像检测逻辑:用
pyautogui.locateOnScreen检测无效号码提示框,confidence=0.8用于提高识别容错率(需确保安装了opencv-python,否则需去掉该参数) - 分支处理流程:检测到无效号码时,跳过发送步骤,关闭提示框后直接进入下一次循环;有效号码则继续原发送流程
- 坐标递增逻辑保留:无论号码是否有效,
y和yy的递增操作都放在循环末尾,确保后续联系人的点击坐标正确 - 优化提示音位置:将提示音播放移到循环外,避免循环内重复初始化pygame
内容的提问来源于stack exchange,提问作者joaojvmz
相关产品推荐
相关产品推荐

