You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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()

关键修改说明

  1. 添加图像检测逻辑:用pyautogui.locateOnScreen检测无效号码提示框,confidence=0.8用于提高识别容错率(需确保安装了opencv-python,否则需去掉该参数)
  2. 分支处理流程:检测到无效号码时,跳过发送步骤,关闭提示框后直接进入下一次循环;有效号码则继续原发送流程
  3. 坐标递增逻辑保留:无论号码是否有效,y和yy的递增操作都放在循环末尾,确保后续联系人的点击坐标正确
  4. 优化提示音位置:将提示音播放移到循环外,避免循环内重复初始化pygame

内容的提问来源于stack exchange,提问作者joaojvmz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:20:33