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

使用Python+Selenium获取元素值比较时报NoneType错误如何解决?

错误根因

你调用get_attribute('value')返回None是因为<span>标签没有value属性,value属性仅适用于<input>、<select>这类表单元素,<span>的展示内容属于元素文本,不能通过value获取。

解决思路

  1. 替换取值方式:用元素的.text属性,或者get_attribute('textContent')获取span的文本内容再转整数。
  2. 优化元素定位:你当前用的绝对路径XPath稳定性极差,页面结构稍有调整就会定位失败,目标元素已经有唯一id属性,直接用id定位更可靠。
  3. 循环内实时取值:你现在只在循环外获取了一次元素的内容,后续循环判断用的都是初始值,不会随页面更新,必须把取值逻辑放到循环内部。

正确代码示例

首先导入依赖模块(Selenium 4.x+ 推荐使用By类做元素定位):

from selenium.webdriver.common.by import By
# 如果需要加等待避免元素未加载报错,可导入以下两个模块
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

业务代码:

注:如果你的浏览器驱动实例变量名是window,将代码中的driver替换为你自己的变量名即可。

while True:
    # 每次循环都重新获取最新的元素和值
    mapx = driver.find_element(By.ID, "map_x")
    mapy = driver.find_element(By.ID, "map_y")
    # 提取文本并转整数,strip()是为了去除可能存在的空格换行
    x_val = int(mapx.text.strip())
    y_val = int(mapy.text.strip())
    # 不满足循环条件时跳出
    if x_val == 1 or y_val > 40:
        break
    # 这里写你要执行的循环逻辑
    # ------------
    # 你的循环逻辑代码
    # ------------

可选优化

如果页面加载慢可能出现元素未找到的情况,可以加显式等待确保元素加载完成再取值,示例:

# 最长等待10秒,直到元素出现再返回
wait = WebDriverWait(driver, 10)
mapx = wait.until(EC.presence_of_element_located((By.ID, "map_x")))

如果存在span文本可能有非数字内容的场景,可以加try-except捕获转换整数的异常,避免程序直接崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:06:03