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

使用Selenium时find_elements仅获取首个元素的问题求助

问题分析与修复方案

核心问题点

  • 商品名称定位使用全局XPATH,而非相对定位
    循环中//div[2]/span/span是全局路径,每次都会匹配页面第一个符合条件的元素,而非当前raw_item下的子元素。需改为相对定位的.//div[2]/span/span,通过.限定查找范围为当前元素节点。

  • 商品列表等待逻辑不合理
    原代码用EC.presence_of_element_located仅等待父容器存在,不确保所有商品加载完成。且父容器使用绝对XPATH,页面结构变动就会失效,建议直接等待所有商品元素,或用更稳定的选择器。

  • 滚动加载逻辑存在缺陷
    按document.body.clientHeight滚动会直接跳转到页底,Walmart的滚动加载需要逐步触发;固定sleep时长不稳定,无法准确判断新内容是否加载完成。

  • 隐式等待与显式等待混用
    同时启用driver.implicitly_wait()和WebDriverWait会导致等待时间不可控,建议仅保留显式等待。


修复后的代码

import time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import undetected_chromedriver as uc

url='https://www.walmart.com/search?q=lego&facet=retailer_type%3AWalmart'

driver = uc.Chrome(enable_cdp_events=True)
driver.maximize_window()
driver.get(url)

# 优化滚动加载:通过页面高度变化判断新内容加载完成
last_height = driver.execute_script("return document.body.scrollHeight")
for _ in range(3):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待页面高度变化,确认新内容加载
    WebDriverWait(driver, 10).until(
        lambda d: d.execute_script("return document.body.scrollHeight") > last_height
    )
    last_height = driver.execute_script("return document.body.scrollHeight")
    time.sleep(1)

# 直接等待所有商品元素加载完成,使用稳定的CSS选择器
items_list = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, '[data-testid="list-view"]'))
)

for raw_item in items_list:
    # 使用相对XPATH定位当前商品下的名称
    product_name = WebDriverWait(raw_item, 5).until(
        EC.presence_of_element_located((By.XPATH, ".//div[2]/span/span"))
    ).text.strip()
    print(product_name)

driver.quit()

修复说明

  1. 商品名称定位改为相对路径,确保只在当前商品节点内查找;
  2. 用EC.presence_of_all_elements_located直接等待所有商品加载,避免父容器定位的脆弱性;
  3. 滚动逻辑改为通过页面高度变化判断新内容加载,比固定sleep更可靠;
  4. 移除隐式等待,统一使用显式等待,避免等待机制冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 01:03:24