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

使用Selenium进行数据爬取仅返回首个结果的问题求助

问题分析与解决方案

核心问题

你的代码里用的XPATH //*[@id="2107093"]/div/div[1]/div[2]/h3 绑定了单个条目的唯一ID(2107093),这是第一个条目的专属ID,所以find_elements只能匹配到这一个元素,自然只能拿到首个条目数据。

修正方案

改用通用的选择器定位所有条目,步骤如下:

  • 先等待页面上所有条目容器加载完成(而非单个条目)
  • 用相对路径定位每个条目内的标题元素

修正后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

driver = webdriver.Chrome()
url = 'https://www.bizbuysell.com/new-jersey-businesses-for-sale/?q=Y2Zmcm9tPTIwMDAwMCZwdG89NjAwMDAw'
driver.get(url)

try:
    # 等待所有条目容器加载完成(匹配所有class为listing-item的元素)
    wait = WebDriverWait(driver, 10)
    wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'listing-item')))

    # 定位每个条目内的标题元素(通过条目容器的相对路径)
    all_titles = []
    titles = driver.find_elements(By.XPATH, '//div[@class="listing-item"]//div[@class="listing-title"]/h3')
    for title in titles:
        all_titles.append(title.text.strip())

    print(all_titles)

except TimeoutException:
    print("等待元素加载超时。")
finally:
    driver.quit()

关键改动说明

  1. 等待条件改为EC.presence_of_all_elements_located,确保页面上所有条目都已加载
  2. 定位标题的XPATH改为//div[@class="listing-item"]//div[@class="listing-title"]/h3,通过条目容器的通用class(listing-item)匹配所有条目,再定位每个条目内的标题
  3. 加入strip()去除标题文本的多余空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:15:02