Python Selenium滚动谷歌地图评论时新旧高度一致无法退出while循环
问题根因
- 你操作的滚动对象是谷歌地图评论弹窗的内嵌独立滚动容器(类名为
review-dialog-list的元素),但你比对的高度是整个页面的滚动高度document.documentElement.scrollHeight。滚动内部容器不会改变整个页面的高度,所以两次获取的高度永远一致,无法触发循环退出条件。
修复代码
修改为直接获取评论容器自身的滚动高度做比对即可:
import time from selenium import webdriver from selenium.webdriver.common.by import By # 先定位评论滚动容器 scroller = driver.find_element(By.CLASS_NAME, 'review-dialog-list') # 初始获取容器自身的滚动高度作为基准 last_height = driver.execute_script("return arguments[0].scrollHeight", scroller) print(last_height) while True: # 滚动容器到当前底部 driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight', scroller) time.sleep(3) # 加载完成后重新获取容器的滚动高度 new_height = driver.execute_script("return arguments[0].scrollHeight", scroller) print(new_height) # 高度无变化说明已经滚动到最底部,退出循环 if new_height == last_height: break # 更新高度基准值,进入下一轮判断 last_height = new_height
注意事项
- 如果网络波动大,可适当延长
time.sleep的等待时长,确保新评论完全加载完成后再读取高度 - 上述代码使用了Selenium 4.0+推荐的
By.CLASS_NAME定位写法,如果你使用的是旧版本Selenium,可以换回find_element_by_class_name方法
内容的提问来源于stack exchange,提问作者Ashar Paracha
相关产品推荐
相关产品推荐

