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

如何使用Selenium ChromeDriver结合WebDriverWait提取HTML中<ul>标签下的所有列表项

如何用Selenium提取
    标签下所有列表项的完整内容?

你当前的代码有两个核心问题:一是只获取了<ul>下的第一个<li>元素(用了find_element单数形式),二是直接打印WebElement对象只会输出它的会话标识和元素ID,而非实际内容。要拿到所有列表项的完整内容(包括数学公式这类特殊格式),可以按以下方式修改代码:

修改后的完整代码示例

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

# 初始化Chrome驱动(请替换为你的ChromeDriver实际路径)
service = Service('path/to/your/chromedriver')
driver = webdriver.Chrome(service=service)

# 导航到目标网页
driver.get("your_target_page_url")

# 等待目标<ul>元素加载完成(确保元素已存在于DOM中)
ul_element = WebDriverWait(driver, 120).until(
    EC.presence_of_element_located(
        (By.XPATH, '//*[@id="root"]/div[2]/div[3]/div/div[6]/div/section[1]/div[2]/ul')
    )
)

# 获取<ul>下的所有<li>元素(注意用复数形式find_elements)
all_list_items = ul_element.find_elements(By.TAG_NAME, "li")

# 遍历所有列表项,提取所需内容
for index, item in enumerate(all_list_items, 1):
    # 1. 获取包含完整格式的HTML内容(适合保留数学公式等特殊结构)
    item_full_html = item.get_attribute("innerHTML")
    print(f"第{index}项的HTML内容:\n{item_full_html}\n")
    
    # 2. 获取纯文本内容(适合只需要文字信息的场景)
    item_plain_text = item.text
    print(f"第{index}项的纯文本内容:\n{item_plain_text}\n")
    print("---分割线---\n")

# 操作完成后关闭浏览器
driver.quit()

关键说明

  • 获取所有列表项:用find_elements(复数)替代find_element,这样能返回<ul>下的所有<li>元素列表,而不是单个元素。
  • 提取完整内容:
    • 如果需要保留数学公式的格式(比如MathJax渲染的公式标签),使用get_attribute("innerHTML"),它会返回元素的完整HTML结构。
    • 如果只需要可见的纯文本,使用element.text,它会自动提取元素渲染后的文本内容。
  • 等待渲染完成:如果数学公式是动态加载的,建议将等待条件改为EC.visibility_of_element_located,确保元素完全可见且渲染完毕后再提取内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:04:07