基于Selenium的WhatsApp消息发送Python脚本Windows终端执行无反应无报错
问题原因及排查解决方案
核心原因
你当前的脚本仅完成了message函数的定义,没有添加函数调用代码,Python解释器运行脚本时只会加载函数定义,不会执行任何实际逻辑,所以没有任何输出和操作。
其他可能导致异常的原因
- Selenium版本与Chrome浏览器、ChromeDriver版本不匹配:如果Chrome是自动更新的,旧版本ChromeDriver会无法启动浏览器
- XPath定位规则失效:WhatsApp Web的前端元素属性会定期更新,你写的输入框class和XPath大概率已经过期
- 无感知的等待阻塞:你设置的WebDriverWait超时时间是900秒(15分钟),如果元素没加载出来,程序会静默等待15分钟才会抛超时错误,你可能误以为没有反应
排查解决步骤
- 首先在脚本末尾添加函数调用代码,示例:
# 替换为你实际要发送的联系人/群名和消息内容 message(to="你的联系人名称", message="测试消息")
- 校验版本匹配:
- 打开Chrome浏览器,访问
chrome://version/查看当前浏览器主版本号 - 下载对应版本的ChromeDriver,放在你代码里指定的
C:/Users/Miguelangel/Desktop/chromedriver.exe路径
- 打开Chrome浏览器,访问
- 修正元素定位规则:
- 手动打开WhatsApp Web登录后,用F12开发者工具重新获取联系人标题、输入框的最新XPath表达式,替换代码里的旧规则
- 增加日志输出和异常捕获,方便定位问题,可参考修改后的代码:
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 traceback def message(to,message=''): try: print("正在启动浏览器...") d = webdriver.Chrome(r'C:/Users/Miguelangel/Desktop/chromedriver.exe') print("正在打开WhatsApp Web,请扫码登录...") d.get('https://web.whatsapp.com/') wait = WebDriverWait(driver = d, timeout = 60) # 缩短超时时间方便快速报错 message += '\nthis is a system generated message' print(f"正在查找联系人{to}...") name_argument = f'//span[contains(@title,\'{to}\')]' title = wait.until(EC.presence_of_element_located((By.XPATH,name_argument))) title.click() print("正在定位输入框...") # 这里替换为你自己重新抓取的最新输入框XPath input_path = '//div[@contenteditable="true"][@data-tab="10"]' box = wait.until(EC.presence_of_element_located((By.XPATH,input_path))) print("正在发送消息...") box.send_keys(message + Keys.ENTER) print("消息发送完成") except Exception as e: print("运行出错:", str(e)) traceback.print_exc() # 调用函数 if __name__ == "__main__": message(to="测试联系人", message="测试发送")
内容的提问来源于stack exchange,提问作者Mike087
相关产品推荐
相关产品推荐

