如何用Selenium在Google Play Store弹窗中滚动加载全部评论?
解决Google Play评论滚动加载问题
你的问题核心在于两点:滚动容器定位错误(用find_elements返回列表,无法直接用于JS滚动操作),且仅执行一次滚动,无法触发后续评论的懒加载机制。以下是针对性的修正方案:
关键修正说明
- 改用
find_element(单数)获取正确的单个滚动容器,避免依赖易变的绝对XPath(Google Play弹窗元素路径可能随页面更新变化) - 循环执行滚动+等待逻辑,直到评论数量不再增长,确保加载完所有隐藏评论
- 用
WebDriverWait替代固定time.sleep,提升代码稳定性
完整代码示例
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 # 点击"查看全部评论"按钮 more_button = driver.find_element(By.XPATH, "//span[contains(text(),'See all reviews')]") more_button.click() # 等待评论弹窗加载完成,定位滚动容器(可根据实际页面调整定位方式) wait = WebDriverWait(driver, 10) scroll_container = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='fysCi']"))) # 循环滚动加载所有评论 last_review_count = 0 while True: # 滚动到容器底部 driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight', scroll_container) # 等待新评论加载 time.sleep(3) # 获取当前已加载的评论数量 current_reviews = driver.find_elements(By.XPATH, "//div[@class='RHo1pe']") current_count = len(current_reviews) # 若评论数量不再增加,说明已加载完毕 if current_count == last_review_count: break last_review_count = current_count # 输出结果 print(f"共获取到{len(current_reviews)}条评论")
额外提示
- 若XPath定位失效,可尝试用CSS选择器,比如滚动容器的CSS选择器为
.fysCi - 遇到反爬限制时,可适当延长等待时间,或模拟分段滚动(每次滚动容器高度的80%)模仿人类操作
- Google Play页面结构可能更新,若定位失效需重新检查元素的class或其他属性
内容的提问来源于stack exchange,提问作者Chris Ho
相关产品推荐
相关产品推荐

