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

如何用Selenium获取速卖通页面全部60个商品URL?

解决速卖通页面商品URL仅获取前12个的问题

速卖通商品列表采用懒加载机制:页面初始仅渲染视口内的12个商品,剩余商品需要滚动页面到对应位置才会触发加载。要获取全部60个商品URL,需要模拟滚动页面并等待商品加载完成,具体修改如下:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText=smart+lock&ltype=wholesale&SortType=total_tranpro_desc")
# 等待初始商品加载完成
WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'a[href*="/item/"]')))

# 初始化URL集合(去重用)
item_urls = set()
last_height = driver.execute_script("return document.body.scrollHeight")

while len(item_urls) < 60:
    # 获取当前页面所有商品URL并加入集合
    current_urls = [a.get_attribute('href') for a in driver.find_elements(By.CSS_SELECTOR, 'a[href*="/item/"]')]
    item_urls.update(current_urls)
    
    # 滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待商品加载
    sleep(3)
    
    # 检查页面高度是否变化,判断是否还有更多商品加载
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

# 打印所有去重后的URL
for url in item_urls:    
    print(url)

driver.quit()

关键逻辑说明:

  • 滚动触发加载:通过window.scrollTo脚本滚动到页面底部,触发懒加载机制加载更多商品
  • 去重处理:用set存储URL,避免重复获取已加载的商品链接
  • 终止条件:当商品数量达到60,或者页面高度不再变化(说明已加载完所有商品)时停止滚动
  • 等待时间:每次滚动后等待3秒,确保商品元素完全渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:15:52