You need to enable JavaScript to run this app. Python Selenium提取商品a标签href值时选择器返回空列表的问题
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium提取商品a标签href值时选择器返回空列表的问题

Selenium提取Foot Locker乔丹品类页商品href的可落地方案

原有定位方式失效的核心原因

  • 定位时机不匹配:商品列表为动态懒加载渲染,初始页面DOM加载完成时,目标a标签尚未注入文档树,直接定位必然返回空列表
  • 类名匹配规则错误:原有CSS、XPath写法均为类名全值精确匹配,实际页面的类名可能附带动态生成的额外值、类顺序调整,导致匹配失配
  • 未触发全量内容渲染:页面需要滚动操作才会加载后续商品卡片,仅初始状态下的DOM仅包含少量首屏元素

分步实现代码

  1. 引入Selenium标准定位与等待模块,替换旧版废弃的定位API
    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
    import time
    
    # 初始化driver后配置显式等待实例,替代硬编码sleep
    wait = WebDriverWait(driver, 15)
    
  2. 等待外层商品容器渲染完成,确认文档流已经加载到商品区域
    # 等待class包含product-container的li元素出现,替代全值匹配类名的写法
    wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "li[class*='product-container']"))
    )
    
  3. 滚动触发全量懒加载内容,确保20余个商品全部渲染完成
    last_count = 0
    base_url = "https://www.footlocker.com"
    current_elems = []
    while True:
        # 执行JS滚动到页面最底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
        time.sleep(1.2)
        # 统计当前页面的目标a标签数量
        current_elems = driver.find_elements(By.CSS_SELECTOR, "a[class*='ProductCard-link'][href]")
        current_count = len(current_elems)
        # 数量连续两次无增长、或达到预期的20余个商品阈值时,停止滚动
        if current_count == last_count or current_count >= 25:
            break
        last_count = current_count
    
  4. 批量提取并清洗href值
    product_link_list = []
    for elem in current_elems:
        # 提取相对路径,同时清洗示例HTML中存在的换行、空格字符
        raw_href = elem.get_attribute("href").replace("\n", "").replace(" ", "")
        product_link_list.append(f"{base_url}{raw_href}")
    

避坑提示

  • 不要使用Selenium 4以上版本已废弃的find_elements_by_css_selector、find_elements_by_xpath旧API,统一使用By枚举传参的写法,避免兼容性问题
  • 提取href值时必须做字符串清洗,示例HTML中的href值存在换行、断行的格式问题,直接取值会得到带无效空白字符的错误路径
  • 如果定位时仍返回空列表,先检查页面是否被重定向到人机验证、地区选择前置页,这类场景下商品列表DOM结构会完全变更,需要先完成前置交互再开展定位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 08:36:00