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

Selenium WhatsApp自动化脚本运行抛出NoSuchElementException异常

报错核心诱因
  • 缺失等待逻辑:打开WhatsApp Web后需要完成扫码登录、页面资源渲染,代码没有等待流程就直接执行元素定位,此时目标元素还未加载到DOM树中,哪怕选择器写对也会定位失败。
  • 多类名定位方式错误:By.CLASS_NAME定位方法仅支持传入单个类名,发送按钮的class属性是空格分隔的多类值,直接传入整串字符会导致定位逻辑失效。
  • 元素查找顺序错误:代码在点击进入目标联系人聊天窗口之前,就提前查找消息输入框,此时当前页面未切换到对应聊天会话,输入框元素不存在。
  • 废弃API调用:代码中使用的find_element_by_class_name是Selenium旧版本API,新版本Selenium已完全移除该方法,运行时也会触发异常。
修复后可运行代码

修复逻辑对应上述问题:新增60秒显式等待覆盖扫码+页面加载时长、多类名元素改用CSS选择器定位、调整元素查找顺序、统一使用新版Selenium定位API:

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

driver = webdriver.Chrome()
driver.get('https://web.whatsapp.com/')
# 显式等待实例,最长等待60秒,预留足够时间完成扫码登录
wait = WebDriverWait(driver, 60)

name = input('enter the name of user:')
msg = input('enter your message:')
count = int(input("enter the count:"))

# 等待联系人列表加载完成后定位目标联系人
user = wait.until(EC.presence_of_element_located(
    (By.XPATH, f'//span[@title = "{name}"]')
))
user.click()

# 进入聊天窗口后再定位消息输入框
msg_box = wait.until(EC.presence_of_element_located(
    (By.CLASS_NAME, '_2lMWa')
))

for i in range(count):
    msg_box.send_keys(msg)
    time.sleep(0.5)
    # 多类名转换为CSS选择器格式:每个类名前加.,类名之间的空格替换为.
    button = wait.until(EC.element_to_be_clickable(
        (By.CSS_SELECTOR, '.tvf2evcx.oq44ahr5.lb5m6g5c.svlsagor.p2rjqpw5.epia9gcq')
    ))
    button.click()
    time.sleep(1)
运行注意事项

启动代码后会自动唤起Chrome打开WhatsApp网页版,需在60秒内用手机端WhatsApp完成扫码登录,后续发消息流程会自动执行。如果后续WhatsApp前端迭代修改了元素类名,直接替换代码中对应的类名/XPath值即可,核心逻辑无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:51:22