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

Python3使用Selenium定位网站按钮报NoSuchElementException问题求助

问题原因
  • find_element_by_class_name 方法仅支持传入单个类名,你传入了4个用空格分隔的类名,Selenium会将整段字符串识别为单个类名进行匹配,自然无法找到元素。从报错信息中自动生成的CSS选择器.send-button jm-button ng-binding ng-scope也能看出,系统将这段内容识别为了非法的后代选择器,完全不符合匹配逻辑。
  • 你复制类名时因为HTML换行导致多输入了空格,把ng-scope错写成了ng- scope,进一步导致匹配失败。
  • 该站点使用Angular框架开发,元素是动态渲染的,页面加载完成后可能存在元素渲染延迟,直接查找也可能触发找不到元素的报错。
解决方案

方法1:使用CSS选择器匹配多个类名

将多个类名用.连接,作为CSS选择器的参数,同时修正类名的空格错误:

# 替换原代码中查找按钮的行
input_fname = driver.find_element_by_css_selector(".send-button.jm-button.ng-binding.ng-scope")
# 执行点击
input_fname.click()

方法2:使用Xpath匹配(结合按钮文本更精准)

直接匹配按钮的希伯来语文本,避免类名变动导致的匹配失败:

input_fname = driver.find_element_by_xpath('//button[normalize-space(text())="המשך"]')
input_fname.click()

方法3:添加显式等待(推荐,稳定性最高)

先导入等待相关的依赖,设置最长等待时间,直到元素可点击后再执行操作,避免动态渲染导致的匹配失败:

# 导入依赖,放在代码开头
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 替换原查找按钮的代码
wait = WebDriverWait(driver, 10)
input_fname = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[normalize-space(text())="המשך"]')))
input_fname.click()

补充说明:如果你使用的是Selenium 4.0及以上版本,旧的find_element_by_*方法已被废弃,推荐统一使用find_element方法指定查找方式,例如:

# CSS选择器写法
input_fname = driver.find_element(By.CSS_SELECTOR, ".send-button.jm-button.ng-binding.ng-scope")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:36:04