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

基于Selenium的WhatsApp消息发送Python脚本Windows终端执行无反应无报错

问题原因及排查解决方案

核心原因

你当前的脚本仅完成了message函数的定义,没有添加函数调用代码,Python解释器运行脚本时只会加载函数定义,不会执行任何实际逻辑,所以没有任何输出和操作。

其他可能导致异常的原因

  • Selenium版本与Chrome浏览器、ChromeDriver版本不匹配:如果Chrome是自动更新的,旧版本ChromeDriver会无法启动浏览器
  • XPath定位规则失效:WhatsApp Web的前端元素属性会定期更新,你写的输入框class和XPath大概率已经过期
  • 无感知的等待阻塞:你设置的WebDriverWait超时时间是900秒(15分钟),如果元素没加载出来,程序会静默等待15分钟才会抛超时错误,你可能误以为没有反应

排查解决步骤

  1. 首先在脚本末尾添加函数调用代码,示例:
# 替换为你实际要发送的联系人/群名和消息内容
message(to="你的联系人名称", message="测试消息")
  1. 校验版本匹配:
    • 打开Chrome浏览器,访问chrome://version/查看当前浏览器主版本号
    • 下载对应版本的ChromeDriver,放在你代码里指定的C:/Users/Miguelangel/Desktop/chromedriver.exe路径
  2. 修正元素定位规则:
    • 手动打开WhatsApp Web登录后,用F12开发者工具重新获取联系人标题、输入框的最新XPath表达式,替换代码里的旧规则
  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 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:04