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

使用Python Selenium定位WhatsApp附件图标失败:NoSuchElementException

解决WhatsApp网页版附件图标定位失败的问题

核心错误原因

你用By.CLASS_NAME传入了完整的CSS选择器语法(li._2qR8G:nth-child(4) > button:nth-child(1) > span:nth-child(1)),但By.CLASS_NAME仅支持单个类名,不能处理复合选择器、伪类这类语法,这是导致NoSuchElementException的直接原因。

修正方案

  1. 替换定位方式为CSS选择器
    将By.CLASS_NAME改为By.CSS_SELECTOR,这样才能正确解析你写的选择器路径。

  2. 优化选择器(可选但推荐)
    WhatsApp网页版的类名可能随版本更新变化,建议用更稳定的属性定位:

    • 中文界面可直接用[aria-label="附件"]定位按钮
    • 通用场景可选择图标专属属性:span[data-icon="attach-menu-plus"]
  3. 用显式等待替代固定sleep
    固定sleep(10)不可靠,页面加载速度受网络影响,改用Selenium显式等待,等待元素可交互后再操作,避免因元素未加载完成导致定位失败。

修正后的代码示例

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

link = f'https://web.whatsapp.com/send?phone={numero}&text={texto}'
navegador.get(link)

# 等待附件按钮加载完成并可点击
wait = WebDriverWait(navegador, 20)
# 方式1:用aria-label定位(适配中文界面)
attach_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[aria-label="附件"]')))
# 方式2:用图标data-icon属性定位(通用适配多语言)
# attach_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'span[data-icon="attach-menu-plus"]')))
# 方式3:基于你原选择器修正(需确认类名未更新)
# attach_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'li._2qR8G:nth-child(4) > button:nth-child(1) > span:nth-child(1)')))

attach_button.send_keys(Keys.ENTER)

额外注意事项

  • 确保WhatsApp网页版已完成登录,目标会话窗口正常加载
  • 如果原选择器中的类名(如_2qR8G)已更新,需重新通过浏览器开发者工具获取最新元素选择器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:20:27