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

为什么使用Selenium无法提取ul、li元素中的文本内容?

问题成因
  • 核心错误:find_elements_by_tag_name('li') 返回的是li元素的列表对象,列表本身没有text属性,你直接调用l.text自然会触发属性错误,进入except逻辑。你贴出的报错提示'list' object has no attribute 'text'也对应这个问题。
  • 定位不精准:你直接用//ul匹配页面所有ul元素,没有过滤出你需要的「参考文献」「外部链接」区块的ul,会遍历大量无关节点做无效操作。
  • 潜在加载问题:没有设置页面元素加载等待,可能出现页面还未渲染完成就开始提取元素的情况,导致拿到空节点列表。
修复方案

建议优先使用Selenium官方推荐的定位写法,同时精准匹配目标区块,修改后可运行代码如下:

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

PATH = r"C:\Users\Alireza\Desktop\chromedriver\chromedriver.exe"
driver = webdriver.Chrome(PATH)
# 加隐式等待,最多预留10秒时间让元素加载完成
driver.implicitly_wait(10)

driver.get("https://de.wikipedia.org/wiki/Alpha-Beta-Suche")
print(driver.title)

# 精准定位参考文献、外部链接对应的ul节点,匹配维基百科对应区块的专属类名
target_uls = driver.find_elements(By.XPATH, '//ul[contains(@class,"references") or contains(@class,"external")]')

for ul in target_uls:
    # 拿到当前ul下的所有li列表,遍历逐个提取文本
    li_list = ul.find_elements(By.TAG_NAME, 'li')
    for li in li_list:
        li_text = li.text.strip()
        # 跳过无文本的空li
        if li_text:
            print("\n" + li_text)

driver.quit()

如果你不想修改原有定位逻辑,只需要调整原循环的遍历逻辑即可解决报错:

litwebs = driver.find_elements_by_xpath("//ul")
for lit in litwebs:
    try:
        l = lit.find_elements_by_tag_name("li")
        # 遍历li列表,逐个取文本,不要直接对列表调用text属性
        for li_item in l:
            print("\n" + li_item.text)
    except:
        print("\n no li")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:48:00