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

使用Selenium实现WhatsApp自动化时循环发消息失效求助

解决WhatsApp Web自动化重复发送消息仅执行一次的问题

问题原因

  1. 发送消息后,WhatsApp Web的消息输入框会因DOM动态更新导致之前获取的message_box元素引用失效,后续循环操作无法找到有效元素,直接终止循环
  2. 硬编码的ID型XPATH不稳定,WhatsApp页面结构可能随时微调,导致元素定位失败
  3. 缺少必要的等待机制,操作过快会让页面来不及响应,引发元素交互异常

修正后的代码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

options = webdriver.ChromeOptions()
options.add_argument("user-data-dir=C:/Users/Sameer/AppData/Local/Google/Chrome/User Data/Person 1")
driver = webdriver.Chrome(executable_path='chromedriver.exe', options=options)
driver.get("https://web.whatsapp.com/")
wait = WebDriverWait(driver, 100)

target = "My 2"
message = "Hello"
send_times = 5

# 定位并点击目标联系人
contact_path = f'//span[@title="{target}"]'
contact = wait.until(EC.element_to_be_clickable((By.XPATH, contact_path)))
contact.click()

for _ in range(send_times):
    try:
        # 每次循环重新定位消息输入框,避免元素引用失效
        message_box = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[@contenteditable="true"][@data-tab="1"]')))
        message_box.clear()
        message_box.send_keys(message)
        message_box.send_keys(Keys.ENTER)
        # 短暂等待,确保页面完成消息发送操作
        time.sleep(0.5)
    except Exception as e:
        print(f"发送失败: {str(e)}")
        continue

# 操作完成后可选择关闭浏览器
# driver.quit()

关键修改说明

  • 更稳定的元素定位:用//div[@contenteditable="true"][@data-tab="1"]定位消息输入框,该属性组合在WhatsApp Web中长期稳定,不会因页面小改动失效
  • 循环内重新获取元素:每次发送前都重新定位消息框,彻底解决DOM更新导致的元素引用失效问题
  • 使用element_to_be_clickable等待条件:确保元素不仅存在,还处于可交互状态,比presence_of_element_located更可靠
  • 异常捕获机制:单条消息发送失败时不会中断整个循环,同时输出错误信息便于排查
  • 添加等待时间:time.sleep(0.5)给页面足够的响应时间,避免操作过快引发的交互异常
  • 精确匹配联系人:用@title精确匹配联系人标题,避免contains匹配到相似名称的联系人

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:10:22