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

Selenium批量发WhatsApp消息遇无效号码报错如何跳过不中断

解决方案

程序崩溃的核心原因是访问未注册WhatsApp的号码链接时,页面不会加载聊天输入框,直接调用find_element查找目标元素会触发NoSuchElementException,且没有异常捕获逻辑导致整个循环终止。通过异常捕获+显式等待判断页面状态即可实现无效号码自动跳过,不中断全量发送流程。

第一步:补全需要导入的依赖

首先确保导入Selenium的等待模块和对应的异常类:

import time
import pandas as pd
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException, TimeoutException

第二步:修改消息发送函数

核心改动点:

  • 用try-except块包裹单条号码的发送逻辑,捕获元素不存在、等待超时两类异常
  • 用显式等待替代固定时长的time.sleep(),既减少无效等待时间,也能准确判断聊天窗口是否加载完成
  • 触发异常时打印失败日志,自动跳过当前号码进入下一轮循环
  • 可选增加无效号码弹窗的关闭逻辑,避免弹窗残留影响后续页面操作

修改后的完整函数代码:

def enviar_mensagem(nav):
    # 读取Excel中预拼接的WhatsApp链接
    mailing = pd.read_excel('mailing.xlsx')
    # 统一定位器,后续维护只需要改这一处
    INPUT_BOX_LOCATOR = (By.XPATH, '//footer//div[@contenteditable="true"]')
    INVALID_NUM_CONFIRM_BTN_LOCATOR = (By.XPATH, '/html/body/div[1]/div/span[2]/div/span/div/div/div/div/div/div[2]/div/div/div/div')

    for idx, url in enumerate(mailing['Concat2']):
        print(f"正在处理第{idx+1}/{len(mailing)}条:{url}")
        nav.get(url)
        find_elements_side(nav)

        try:
            # 最多等待10秒,直到消息输入框加载完成,超时直接判定为无效号码
            input_box = WebDriverWait(nav, 10).until(
                EC.presence_of_element_located(INPUT_BOX_LOCATOR)
            )
            # 输入框存在,执行发送操作
            input_box.send_keys(Keys.ENTER)
            time.sleep(2)
            print(f"第{idx+1}条消息发送成功")

        except (NoSuchElementException, TimeoutException):
            print(f"第{idx+1}条对应号码未注册WhatsApp,跳过")
            # 尝试关闭无效号码的提示弹窗,找不到弹窗就直接跳过
            try:
                nav.find_element(*INVALID_NUM_CONFIRM_BTN_LOCATOR).click()
                time.sleep(0.5)
            except NoSuchElementException:
                pass
            continue

额外优化建议

  • 原代码使用的绝对路径XPath稳定性极差,WhatsApp前端迭代后很容易失效,上面代码里替换成了基于footer标签和contenteditable属性的相对定位,适配性更强
  • 建议增加发送结果记录逻辑,把每条号码的发送状态(成功/无效/发送失败)写回Excel表格,任务跑完后可以直接导出无效号码清单
  • 如果批量发送量较大,可以在每发送20-30条后增加3-5秒的随机等待,避免触发WhatsApp的反爬风控导致账号被限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:36:34