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

如何用Python的Selenium获取<ul>中第10个<li>元素的内容

问题解决:正确获取第10个
  • 的Price/Book对应值
  • 你的代码核心问题是XPath路径使用错误:所有查找dp-value或dp-name的XPath用了//开头,这会从整个DOM树的根节点重新搜索,而非从你定位到的block节点下查找,导致每次返回第一个匹配元素。

    正确解决方法

    方法1:直接定位第10个
  • 下的目标值
  • 可以一步完成定位,或分两步使用相对路径(.//表示从当前节点开始搜索):

    # 一步定位
    value = driver.find_element(By.XPATH, "//ul[contains(@class, 'small-block-grid-3 large-block-grid-4 sal-component-band-grid')]/li[10]//div[contains(@class, 'dp-value')]").text
    
    # 分两步(更清晰)
    block = driver.find_element(By.XPATH, "//ul[contains(@class, 'small-block-grid-3 large-block-grid-4 sal-component-band-grid')]/li[10]")
    value = block.find_element(By.XPATH, ".//div[contains(@class, 'dp-value')]").text
    

    方法2:通过「Price/Book」文本定位(更稳定)

    如果

  • 的位置可能变动,直接通过文本匹配更可靠:

    # 一步定位
    value = driver.find_element(By.XPATH, "//ul[contains(@class, 'small-block-grid-3 large-block-grid-4 sal-component-band-grid')]/li[.//div[contains(@class, 'dp-name') and contains(text(), 'Price/Book')]]//div[contains(@class, 'dp-value')]").text
    
    # 分两步
    target_li = driver.find_element(By.XPATH, "//ul[contains(@class, 'small-block-grid-3 large-block-grid-4 sal-component-band-grid')]/li[.//div[contains(@class, 'dp-name') and contains(text(), 'Price/Book')]]")
    value = target_li.find_element(By.XPATH, ".//div[contains(@class, 'dp-value')]").text
    

    失败原因说明

    以你之前的代码为例:

    block = driver.find_element(By.XPATH, "//ul[...]//li[10]")
    value = block.find_element(By.XPATH, "//div[contains(@class, 'dp-value')]").text
    

    这里的//div[...]会忽略block节点,直接从整个文档中查找第一个符合条件的div,因此每次拿到的都是第一个元素。必须用.//表示相对当前节点的路径,才会在block的子节点中搜索。

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

  • 相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.08.06 07:05:24