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

使用Selenium开发简易WhatsApp机器人时消息循环异常问题排查

WhatsApp机器人消息循环故障的问题分析与修复

问题点拆解

  • 退出条件不匹配
    代码提示用户输入-exit-终止程序,但判断逻辑写的是if(message == "exit"),两者不一致。用户按提示输入-exit-时不会触发循环终止,反而会把该内容作为消息发送出去。

  • 过时元素(Stale Element)异常风险
    提前获取的textbar元素,在WhatsApp网页版交互过程中(比如切换对话、页面自动刷新)会变成无效的过时元素,后续循环调用send_keys会抛出StaleElementReferenceException直接中断程序。

  • 输入框未清空导致消息叠加
    每次发送消息后输入框内容未清除,下一次send_keys会把新消息追加到旧内容后,导致发送的消息混乱重复。

  • 可能缺少Keys模块导入
    代码中使用了Keys.RETURN,但如果没有导入from selenium.webdriver.common.keys import Keys,会直接抛出NameError导致程序无法启动。


修复后的代码

from selenium.webdriver.common.keys import Keys
# 此处补充driver初始化等前置代码

while True:
    message = input("请输入要发送给选中联系人的消息,输入-exit-停止程序:")
    if message == "-exit-":
        break
    # 每次循环重新定位输入框,规避过时元素问题
    try:
        textbar = driver.find_element("xpath", '//*[@id="main"]/footer/div[1]/div/span[2]/div/div[2]/div[1]/div/div[1]/p')
        textbar.clear()  # 发送前清空输入框
        textbar.send_keys(message)
        textbar.send_keys(Keys.RETURN)
    except Exception as e:
        print(f"发送失败:{str(e)}")

修复说明

  1. 统一退出触发词为-exit-,和提示文案保持一致
  2. 每次循环重新定位输入框,避免元素过时失效
  3. 新增clear()方法清空输入框,防止消息叠加
  4. 增加异常捕获,避免单次发送失败导致整个程序崩溃
  5. 明确标注Keys模块的导入依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:05:21