Python Selenium滚动加载Google评论失败问题求助
问题:Google旅行评论页Selenium滚动不加载更多内容
- Google旅行JW Marriott Washington DC的评论页初始显示10条评论,滚动到底部应加载更多内容
- 目标爬取近100条评论,但以下两种Selenium滚动代码均无效:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")driver.execute_script("window.scrollTo(0, document.body.scrollHeight+100000);")
- 已在Chrome和Firefox浏览器测试
解决方案
1. 定位评论专属滚动容器
Google旅行的评论内容放在独立滚动容器内,而非整个页面body,需针对容器滚动:
from selenium.webdriver.common.by import By # 定位评论滚动容器(选择器需根据页面实时调整,可通过开发者工具获取) review_container = driver.find_element(By.CSS_SELECTOR, 'div[jsname="fk8dgd"]') # 滚动容器到底部 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", review_container)
2. 逐步滚动+等待加载
直接跳到底部可能无法触发加载逻辑,模拟逐步滚动并等待新评论加载:
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 target_review_count = 100 review_container = driver.find_element(By.CSS_SELECTOR, 'div[jsname="fk8dgd"]') while True: current_count = len(driver.find_elements(By.CSS_SELECTOR, 'div[jscontroller="H6eOGe"]')) if current_count >= target_review_count: break # 滚动容器到底部 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", review_container) # 等待新评论加载,或用显式等待验证新元素出现 time.sleep(2) try: WebDriverWait(driver, 5).until( EC.presence_of_element_located((By.CSS_SELECTOR, f'div[jscontroller="H6eOGe"]:nth-child({current_count + 1})')) ) except: # 无新评论加载则退出循环 break
3. 处理"查看更多"按钮
部分场景下页面会显示"查看更多"按钮,需点击触发加载:
from selenium.webdriver.common.by import By import time target_review_count = 100 review_container = driver.find_element(By.CSS_SELECTOR, 'div[jsname="fk8dgd"]') while True: current_count = len(driver.find_elements(By.CSS_SELECTOR, 'div[jscontroller="H6eOGe"]')) if current_count >= target_review_count: break try: # 查找并点击"查看更多"按钮 load_more_btn = driver.find_element(By.CSS_SELECTOR, 'button[jsname="higCR"]') load_more_btn.click() time.sleep(2) except: # 点击失败则尝试滚动容器 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", review_container) time.sleep(2) # 仍无新评论则退出 if len(driver.find_elements(By.CSS_SELECTOR, 'div[jscontroller="H6eOGe"]')) == current_count: break
注意事项
- 页面元素选择器可能随Google页面更新变化,需通过浏览器开发者工具重新定位
- 避免操作过于频繁,防止触发反爬机制
- 确保使用最新版本的Selenium和对应浏览器驱动
内容的提问来源于stack exchange,提问作者Srishti Verma
相关产品推荐
相关产品推荐

