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

使用Selenium Python点击HTML元素抓取第2、3页美妆数据求助

解决方案

问题排查

你当前代码的核心问题可能是点击了span子元素而非实际可交互的button父元素,另外缺少点击后页面加载的等待逻辑,导致页面还没切换就继续抓取,拿到的还是第一页数据。

修正后的完整分页抓取代码

以下是包含分页逻辑的完整示例,包含等待页面加载、循环翻页直到无下一页:

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 = webdriver.Chrome()
driver.get("https://sokoglam.com/collections/face-moisturizer")

def scrape_page():
    # 抓取当前页的美妆数据,根据实际页面结构调整选择器
    products = WebDriverWait(driver, 20).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.product-item"))
    )
    for product in products:
        name = product.find_element(By.CSS_SELECTOR, "h3.product-title").text.strip()
        brand = product.find_element(By.CSS_SELECTOR, "div.product-vendor").text.strip()
        price = product.find_element(By.CSS_SELECTOR, "span.price").text.strip()
        link = product.find_element(By.CSS_SELECTOR, "a.product-link").get_attribute("href")
        print(f"品牌: {brand}, 名称: {name}, 价格: {price}, 链接: {link}")

# 抓取第1页
scrape_page()

while True:
    try:
        # 定位下一页button元素(直接定位button,而非内部span)
        next_button = WebDriverWait(driver, 20).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "button.mixitup-control.mixitup-control-next"))
        )
        # 滚动到按钮可见
        driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", next_button)
        # 点击下一页
        next_button.click()
        print("正在切换到下一页...")
        # 等待页面加载完成:等待商品列表更新,或者等待页码变化,这里用时间+元素等待结合
        time.sleep(2)  # 基础等待,可根据网络情况调整
        # 等待新的商品元素加载(确保页面已切换)
        WebDriverWait(driver, 20).until(
            EC.staleness_of(driver.find_element(By.CSS_SELECTOR, "div.product-item"))
        )
        # 抓取当前页数据
        scrape_page()
    except Exception as e:
        print("已抓取所有页面或出现错误:", str(e))
        break

driver.quit()

关键优化点

  • 直接定位button元素:原代码点击的是button内部的span,实际可交互的是button本身,调整选择器直接定位button
  • 页面加载等待:点击后通过staleness_of等待旧页面的商品元素失效,确保新页面已加载;搭配短暂的time.sleep应对动态加载
  • 循环翻页逻辑:用while循环持续尝试点击下一页,直到按钮不可点击或抛出异常(代表无更多页面)

额外注意事项

  • 页面选择器可能随网站更新变化,若抓取失败,需重新检查页面元素的CSS/XPath选择器
  • 若遇到反爬机制,可添加随机等待、更换User-Agent等策略
  • 建议使用WebDriverWait替代固定等待,提升代码稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:52:22