使用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)}")
修复说明
- 统一退出触发词为
-exit-,和提示文案保持一致 - 每次循环重新定位输入框,避免元素过时失效
- 新增
clear()方法清空输入框,防止消息叠加 - 增加异常捕获,避免单次发送失败导致整个程序崩溃
- 明确标注Keys模块的导入依赖
内容的提问来源于stack exchange,提问作者onat dicleli
相关产品推荐
相关产品推荐

