使用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
相关产品推荐
相关产品推荐

