Selenium无输出问题:丝芙兰商品评论爬取失败求助
问题排查与解决
核心问题分析
你的代码存在几个关键问题导致无法获取评论:
By.CLASS_NAME不支持多类名:你传入的"css-k7hahd eanm77i0"是两个class名称,但By.CLASS_NAME只能接收单个class,多class选择需要用By.CSS_SELECTOR,写法为".css-k7hahd.eanm77i0"(类名前加.,类名间无空格)。- 缺少元素加载等待:页面评论渲染需要时间,直接调用
find_elements可能在元素未加载完成时执行,返回空列表。 - ChromeDriver调用方式过时:新版Selenium(4.x+)已不再支持直接将driver路径传给
webdriver.Chrome(),需用Service类配置路径。 - 评论需滚动触发加载:丝芙兰评论默认仅显示部分内容,需滚动页面才能加载更多评论。
修复后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time # 配置ChromeDriver服务 service = Service("C:/Users/hp/Downloads/chromedriver_win32/chromedriver.exe") driver = webdriver.Chrome(service=service) driver.get("https://www.sephora.com/product/luminous-silk-foundation-P393401?skuId=1491380&icid2=products%20grid:p393401:product") try: # 等待评论区域加载完成,超时时间10秒 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".css-k7hahd.eanm77i0")) ) # 滚动页面加载更多评论,模拟滚动3次,每次间隔1秒 for _ in range(3): driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(1) # 获取所有评论元素 reviews = driver.find_elements(By.CSS_SELECTOR, ".css-k7hahd.eanm77i0") # 遍历打印评论 for idx, review in enumerate(reviews, 1): print(f"评论{idx}:\n{review.text}\n") finally: # 关闭浏览器 driver.quit()
额外提示
- 若仍无法获取评论,需检查是否触发反爬机制(如需要登录、验证码),可尝试添加用户代理或手动登录后再执行爬取。
- 滚动次数可根据需求调整,确保加载到足够数量的评论。
- 使用
WebDriverWait替代固定等待时间,能更精准地等待元素加载,提升效率。
内容的提问来源于stack exchange,提问作者madiha ashfaq
相关产品推荐
相关产品推荐

