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

Python Selenium运行登录脚本时出现NoSuchElementException错误怎么办

问题原因及修复方案

1. 核心报错NoSuchElementException的原因及修复

  • id属性包含空格导致定位失败
    HTML规范中id属性不允许包含空格,你传入的SignIn Form_email中的空格会被Selenium识别为分隔符,最终生成的选择器根本匹配不到对应元素。
    修复方案:
    1. 先打开目标页面按F12检查对应输入框的实际id值,大概率是你填写错误,正确id通常是下划线分隔的SignIn_Form_email这类格式
    2. 如果确认id确实包含空格(不符合规范但部分网站会这么写),改成属性全匹配的定位方式:
    from selenium.webdriver.common.by import By
    # css属性全匹配写法
    user_id = driver.find_element(By.CSS_SELECTOR, '[id="SignIn Form_email"]')
    # 或者xpath全匹配写法
    user_id = driver.find_element(By.XPATH, '//*[@id="SignIn Form_email"]')
    
  • 页面未加载完成就查找元素
    调用driver.get(url)后页面还在渲染的过程中,直接查找元素会找不到,建议添加显式等待:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 最多等待10秒,元素加载完成就继续执行
wait = WebDriverWait(driver, 10)
user_id = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[id="SignIn Form_email"]')))

2. 废弃告警的修复

你使用的是Selenium 4+版本,旧的find_element_by_*、executable_path写法已经被废弃,改成新标准写法即可:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 修复chromedriver初始化写法
s = Service(r"C:\CustomDrivers\chromedriver_win32\chromedriver.exe")
driver = webdriver.Chrome(service=s)

完整修复参考代码

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

url = "https://someurl.com"
# 初始化driver
s = Service(r"C:\CustomDrivers\chromedriver_win32\chromedriver.exe")
driver = webdriver.Chrome(service=s)
# 全局隐式等待,可配合显式等待使用
driver.implicitly_wait(10)

driver.get(url)
print(driver.title)

# 定位账号输入框,注意替换为你实际的正确id
user_id = driver.find_element(By.CSS_SELECTOR, '[id="SignIn Form_email"]')
user_id.send_keys("admin@web.com")

# 定位密码输入框
user_password = driver.find_element(By.CSS_SELECTOR, '[id="SignIn Form_password"]')
user_password.send_keys("web$$DD")

# 点击登录按钮
driver.find_element(By.XPATH, "//*[@id='SignIn Form']/div[3]/div/div/div/button").click()
print(driver.title)
time.sleep(5)

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:45:03