Selenium点击加载更多按钮后无法获取新评论问题求助
问题解决思路与修正代码
核心问题分析
- 未等待新评论加载完成:点击按钮后立刻获取元素,此时新评论还未渲染,只能拿到之前已加载的内容。
- 定位器不稳定:用
li[14]这种固定索引的XPATH定位按钮,页面结构变动时会直接失效,应该基于按钮文本或专属属性定位。 - 未实现循环加载:当前代码仅点击一次按钮,无法加载所有评论内容。
修正后的代码
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 browser = webdriver.Chrome(service=webdriver_service, options=chrome_options) url = 'https://lectricebikes.com/pages/reviews' browser.get(url) # 存储所有评论的总列表 all_reviews = [] while True: # 等待当前页面所有评论渲染完成 current_reviews = WebDriverWait(browser, 10).until( EC.presence_of_all_elements_located((By.CLASS_NAME, 'stamped-review-content-body')) ) # 提取评论文本并去重,避免重复抓取已加载内容 for review in current_reviews: review_text = review.text.strip() if review_text not in all_reviews: all_reviews.append(review_text) try: # 滚动到加载按钮位置,确保按钮处于可点击状态 load_more_btn = WebDriverWait(browser, 10).until( EC.element_to_be_clickable((By.XPATH, '//a[contains(text(), "Load More Reviews")]')) ) browser.execute_script("arguments[0].scrollIntoView(true);", load_more_btn) time.sleep(1) # 给页面滚动后的渲染留缓冲时间 load_more_btn.click() # 等待新评论加载完成:通过评论数量是否增加判断 WebDriverWait(browser, 10).until( lambda driver: len(driver.find_elements(By.CLASS_NAME, 'stamped-review-content-body')) > len(all_reviews) ) except Exception: print("无更多评论可加载,或加载按钮已消失") break # 输出所有抓取到的评论 for idx, review in enumerate(all_reviews, 1): print(f"评论{idx}:{review}") browser.quit()
关键优化说明
- 循环加载逻辑:用
while True循环持续点击加载按钮,直到按钮无法找到或点击,确保获取全部评论。 - 稳定定位按钮:通过按钮文本内容定位,避免固定索引带来的兼容性问题。
- 等待新内容加载:用评论数量变化作为判断条件,确保新评论完全渲染后再进行下一轮抓取。
- 去重处理:避免重复添加已经抓取过的评论内容。
内容的提问来源于stack exchange,提问作者kaispace30098
相关产品推荐
相关产品推荐

