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

Selenium爬取仅返回首个结果,修改XPath加.后报错如何解决

问题核心原因

  • 原始代码循环仅返回第一个结果:不带.的//开头XPath默认从整个HTML文档根节点全局匹配,无论使用哪个子元素调用find_element,都会返回全页第一个符合条件的元素,因此每次循环拿到的都是第一条数据。
  • 加.后报错:.代表从当前desc元素(即kost-rc__content节点)的子节点开始查找,但你修改后的XPath仍从全页根节点的#app元素开始定位,而desc本身就是#app的后代节点,不可能在desc内部找到#app,因此直接抛出元素不存在的错误。

修正代码

from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path=r'C:/Users/USER/Downloads/chromedriver_win32/chromedriver.exe')
url = 'https://mamikos.com/cari/ugm/all/bulanan/0-15000000'
driver.get(url)
# 等待页面加载完成,避免偶现找不到元素问题
time.sleep(3)

kamar = driver.find_elements_by_class_name('kost-rc__content')

for desc in kamar :
    # 使用相对路径查找当前卡片内的元素,不依赖全局根节点结构
    nama = desc.find_element_by_xpath('.//div[contains(@class,"rc__info-name")]/span[1]').text
    kecamatan = desc.find_element_by_xpath('.//div[contains(@class,"rc__info-name")]/span[2]').text
    harga = desc.find_element_by_xpath('.//div[contains(@class,"rc__price-bottom")]/span[1]').text
    print(nama, kecamatan, harga)

driver.quit()

优化说明

  • 上述代码用contains()匹配类名的相对路径,完全基于当前卡片内部查找元素,不会出现路径不存在的问题,同时避免了绝对路径依赖页面整体结构、容易失效的问题。
  • 如需更高兼容性,可以把固定等待替换为Selenium显式等待逻辑,适配网络波动场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:04