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

Selenium Python仅返回单个结果:汽车信息提取问题求助

问题解决:Selenium仅返回第一个结果的修复方案

核心错误分析

你代码里的关键问题出在循环内的find_element调用:

  • 你把完整XPath传给了By.TAG_NAME参数,这是完全错误的用法——By.TAG_NAME只接受标签名称(比如a、h3这类),不能传XPath路径。
  • 即使参数类型正确,你用的绝对XPath会在整个页面范围内查找元素,而不是当前循环的n(单个车辆的div)下的子元素,所以每次都返回第一个匹配项。

修复步骤

  1. 替换循环内的元素查找逻辑:使用By.XPATH定位,并以当前n为起点,用.//开头的相对路径查找子元素。
  2. 优化父元素的定位XPath:避免使用脆弱的绝对路径,改用基于class的相对路径,提升代码稳定性。
  3. 可选:改用显式等待:比隐式等待更灵活可靠,能确保元素加载完成后再进行操作。

修正后的代码

from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

url = 'https://www.tajeran-group.de/fahrzeuge/'

PATH = 'C:\\Users\\czoca\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Python 3.6\\chromedriver.exe'

driver = webdriver.Chrome(PATH)
driver.get(url)
driver.maximize_window()

# 显式等待车辆列表加载完成
wait = WebDriverWait(driver, 15)
dealers = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//div[@id='cars']//div[contains(@class, 'col-md-4')]")))

for n in dealers:
    # 以当前div为起点,相对路径查找车辆名称的a标签
    name_element = n.find_element(By.XPATH, ".//h3/a")
    print(name_element.text)
    
    # 如果要提取更多该div内的信息,比如价格、描述,可继续用相对路径:
    # price = n.find_element(By.XPATH, ".//div[@class='price']").text
    # print(price)

driver.quit()

额外说明

  • 你之前尝试的.//相对路径思路是对的,但因为参数类型错误(把XPath传给了By.TAG_NAME)导致失效。
  • 打印n时能看到所有车辆信息,是因为n本身就是每个车辆的div节点,但错误的查找逻辑导致无法提取子元素内容,这个需求完全可以实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:01:05