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

Selenium报错AttributeError: WebElement对象无below属性排查

报错根因

AttributeError: 'WebElement' object has no attribute 'below' 是因为你对Selenium相对定位API的用法完全错误:

  • below() 是Selenium 4 相对定位器的构造方法,属于定位工具类的方法,不是WebElement实例的成员方法,不能在find_element()返回的元素对象后直接链式调用
  • 相对定位的逻辑是「查找元素时传入参考元素做位置筛选」,不是「先找到元素再调用方法判断它在谁下方」,你的代码逻辑顺序完全写反了。
解决方法

方案1:普通定位(最稳定,适配所有Selenium版本)

Discord登录页的登录按钮本身就可以通过属性精准定位,完全不需要绕相对定位逻辑,直接删掉错误的.below(password_box)调用即可,修正后可运行代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome(r"C:/Users/sexyv/Downloads/chromedriver_win32/chromedriver.exe")
driver.get("https://discord.com/login")
# 隐式等待在driver初始化后设置一次即可,全局生效
driver.implicitly_wait(10)
email_box = driver.find_element(by=By.NAME, value="email")
password_box = driver.find_element(by=By.NAME, value="password")
# 直接定位提交按钮,不需要额外调用below
submit_button = driver.find_element(by=By.XPATH, value="//button[@type='submit']")

def login(driver, email_box, password_box, submit_button):
    email_box.send_keys("johnsonkalel15@gmail.com") 
    password_box.send_keys("Kalel12346")
    time.sleep(1)
    submit_button.click()

login(driver=driver,email_box=email_box, password_box=password_box, submit_button=submit_button)

方案2:正确使用Selenium4相对定位(适合练习相对定位场景)

如果一定要用below()实现位置关联定位,需要先导入相对定位工具类,把参考元素作为参数传入定位器,注意该写法仅支持Selenium 4.0及以上版本:

  1. 先新增导入:from selenium.webdriver.support.relative_locator import locate_with
  2. 替换提交按钮的定位代码:
# 查找标签为button、位置在密码输入框下方的元素
submit_button = driver.find_element(locate_with(By.TAG_NAME, "button").below(password_box))
额外注意点
  • 原代码中implicitly_wait(3)写在登录函数内部、元素查找完成之后是无效写法,隐式等待只需要在driver初始化后设置一次,仅对后续的元素查找操作生效
  • 原代码导入的pydoc.locate、selenium.webdriver.common.keys.Keys全程没有被使用,可以直接删除,避免冗余导入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:34:47