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

WhatsApp批量信使按钮无响应等问题技术求助

WhatsApp Bulk Messenger 问题解决方案

问题1:发送按钮点击无响应,重试无效

原因

原代码依赖的data-testid='compose-btn-send'属性可能因WhatsApp Web版本更新失效,且未确保聊天输入框完全加载就尝试定位发送按钮,导致元素定位失败。

修复方案

修改元素定位逻辑,优先等待输入框加载完成,再用更稳定的属性定位发送按钮(中文环境下用aria-label='发送'):

# 替换原代码中try块内的逻辑
try:
    url = 'https://web.whatsapp.com/send?phone=' + number + '&text=' + message
    driver.get(url)
    # 先等待聊天输入框加载完成
    WebDriverWait(driver, delay).until(
        EC.presence_of_element_located((By.XPATH, "//div[@contenteditable='true'][@data-tab='1']"))
    )
    # 定位发送按钮(中文环境)
    click_btn = WebDriverWait(driver, delay).until(
        EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='发送']"))
    )
    sleep(1)
    click_btn.click()
    sleep(3)
    print(style.GREEN + 'Message sent to: ' + number + style.RESET)
except Exception as e:
    print(style.RED + f"Failed to send message to: {number}" + str(e) + style.RESET)

问题2:无需刷新页面发送下一个号码

实现思路

放弃每次跳转URL的方式,直接在当前页面通过WhatsApp Web的内置功能打开新聊天,避免页面刷新:

修改后核心代码

# 替换原代码中的for循环部分
for idx, number in enumerate(numbers):
    number = number.strip()
    if number == "":
        continue
    print(style.YELLOW + '{}/{} => Sending message to {}.'.format((idx+1), total_number, number) + style.RESET)
    try:
        # 点击新建聊天按钮
        new_chat_btn = WebDriverWait(driver, delay).until(
            EC.element_to_be_clickable((By.XPATH, "//div[@title='新建聊天']"))
        )
        new_chat_btn.click()
        # 输入号码到搜索框
        search_box = WebDriverWait(driver, delay).until(
            EC.presence_of_element_located((By.XPATH, "//div[@contenteditable='true'][@data-tab='3']"))
        )
        search_box.send_keys(number)
        sleep(2)
        # 点击搜索结果中的联系人
        contact = WebDriverWait(driver, delay).until(
            EC.element_to_be_clickable((By.XPATH, f"//span[@title='{number}']"))
        )
        contact.click()
        # 等待输入框加载并粘贴消息
        input_box = WebDriverWait(driver, delay).until(
            EC.presence_of_element_located((By.XPATH, "//div[@contenteditable='true'][@data-tab='1']"))
        )
        input_box.send_keys(message)
        # 点击发送按钮
        send_btn = WebDriverWait(driver, delay).until(
            EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='发送']"))
        )
        send_btn.click()
        sleep(3)
        print(style.GREEN + 'Message sent to: ' + number + style.RESET)
    except Exception as e:
        print(style.RED + 'Failed to send message to ' + number + str(e) + style.RESET)

问题3:取消重试逻辑,改为手动点击发送后跳转下一个号码

修改方案

移除3次重试循环,加载号码和消息后提示用户手动发送,等待用户确认后继续下一个:

# 替换原代码中try块内的逻辑
try:
    url = 'https://web.whatsapp.com/send?phone=' + number + '&text=' + message
    driver.get(url)
    # 等待页面加载完成
    WebDriverWait(driver, delay).until(
        EC.presence_of_element_located((By.XPATH, "//div[@contenteditable='true'][@data-tab='1']"))
    )
    print(style.YELLOW + f"请手动点击发送按钮,完成后按ENTER继续..." + style.RESET)
    input()  # 等待用户输入确认
    print(style.GREEN + 'Proceeding to next number.' + style.RESET)
except Exception as e:
    print(style.RED + f"Failed to load chat for: {number}" + str(e) + style.RESET)

内容的提问来源于stack exchange,提问作者Hoi Ting Cheung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:05:53