如何用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
相关产品推荐
相关产品推荐

