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

Python Selenium调用find_element报NoSuchElementException求助

问题场景

出于兴趣练习Python开发Minecraft相关小工具,基于Selenium实现网页自动化,访问plancke.io的Hypixel玩家统计页面时,调用find_element方法获取页面用户名元素触发大段报错,使用的Chrome浏览器版本为103.0.5060.53。

报错信息如下:

Traceback (most recent call last):
  File "D:\pythonProject\webscraping.py", line 17, in <module>
    username = driver.find_element(By.NAME, 'text-shadow: 1px 1px #eee; color:#3CE6E6')
  File "C:\Users\Han\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\remote\webdriver.py", line 1253, in find_element
    'value': value})['value']
  File "C:\Users\Han\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\remote\webdriver.py", line 430, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Han\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="text-shadow: 1px 1px #eee; color:#3CE6E6"]"}
  (Session info: chrome=103.0.5060.53)
Stacktrace:
Backtrace:
    Ordinal0 [0x00DB56B3+2184883]
    Ordinal0 [0x00D4E5F1+1762801]
    Ordinal0 [0x00C63DA8+802216]
    Ordinal0 [0x00C91B40+990016]
    Ordinal0 [0x00C91DDB+990683]
    Ordinal0 [0x00CBEC32+1174578]
    Ordinal0 [0x00CACB54+1100628]
    Ordinal0 [0x00CBCF52+1167186]
    Ordinal0 [0x00CAC926+1100070]
    Ordinal0 [0x00C86EA0+945824]
    Ordinal0 [0x00C87D96+949654]
    GetHandleVerifier [0x01054192+2704034]
    GetHandleVerifier [0x0104687D+2648461]
    GetHandleVerifier [0x00E4119A+529066]
    GetHandleVerifier [0x00E40006+524566]
    Ordinal0 [0x00D54F2B+1789739]
    Ordinal0 [0x00D59978+1808760]
    Ordinal0 [0x00D59A65+1808997]
    Ordinal0 [0x00D62A01+1845761]
    BaseThreadInitThunk [0x74F1FA29+25]
    RtlGetAppContainerNamedObjectPath [0x77097A9E+286]
    RtlGetAppContainerNamedObjectPath [0x77097A6E+238]

原实现代码如下:

from tqdm import tqdm
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

x=Service('C:\Program Files (x86)\chromedriver.exe')
driver = webdriver.Chrome(service=x)

pbar = tqdm(range(10))

for i in pbar:
    time.sleep(0.3)
    pbar.set_description("loading program")
PlankeName = input("Whos Planke Page would you like to view? ")
UserPlankeLink = "https://plancke.io/hypixel/player/stats/" + PlankeName
driver.get(UserPlankeLink)

username = driver.find_element(By.NAME, 'text-shadow: 1px 1px #eee; color:#3CE6E6')
print(username)
print("You are currently Viewing " + driver.title)

代码原逻辑:导入依赖后初始化Chrome驱动,用tqdm展示加载进度,接收用户输入的玩家ID拼接成目标页面URL访问,尝试定位用户名元素时触发报错。

问题根因
  • 定位方法完全用错:By.NAME的作用是匹配HTML标签的name属性值,传入的text-shadow: 1px 1px #eee; color:#3CE6E6是CSS样式代码,根本不是元素的name属性。从报错信息也能看到,Selenium自动把这段内容拼成了[name="xxx"]的属性选择器,当然匹配不到任何元素。
  • 缺少页面加载等待:调用driver.get()后页面资源、DOM结构需要时间渲染,代码立刻执行元素查找,哪怕定位逻辑正确也可能因为元素还没加载出来触发找不到元素的错误。
  • Windows路径转义问题:驱动路径写的'C:\Program Files (x86)\chromedriver.exe'里的反斜杠在Python字符串中是转义字符,容易出现路径识别失败的问题。
  • 元素取值逻辑错误:直接打印Selenium定位到的元素对象,只能拿到元素实例的内存地址,拿不到页面上实际显示的用户名文本。
修复方案
  1. 把定位方式改成CSS选择器,匹配包含目标颜色样式的用户名标签:plancke.io的玩家用户名为h2标签,行内样式包含提到的蓝绿色值,用style*=模糊匹配样式即可。
  2. 页面跳转后加显式等待逻辑,设置最长等待时长,等目标元素加载完成再执行后续操作,比固定sleep更稳定。
  3. 驱动路径前加r标记为原始字符串,避免反斜杠转义问题。
  4. 调用元素的.text属性获取实际显示的用户名文本。

修复后的可运行代码:

from tqdm import tqdm
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
import time

# 路径前加r转成原始字符串,避免反斜杠转义错误
x = Service(r'C:\Program Files (x86)\chromedriver.exe')
driver = webdriver.Chrome(service=x)

pbar = tqdm(range(10))
for i in pbar:
    time.sleep(0.3)
    pbar.set_description("loading program")

PlankeName = input("Whos Planke Page would you like to view? ")
UserPlankeLink = "https://plancke.io/hypixel/player/stats/" + PlankeName
driver.get(UserPlankeLink)

# 最多等10秒,直到目标用户名元素加载完成
wait = WebDriverWait(driver, 10)
username_ele = wait.until(
    EC.presence_of_element_located((By.CSS_SELECTOR, 'h2[style*="color:#3CE6E6"]'))
)
# 取元素的文本内容才是实际用户名
username = username_ele.text
print(username)
print("You are currently Viewing " + driver.title)

# 用完可调用driver.quit()关闭浏览器释放资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:12:30