如何用Python的Selenium实现页面内部滚动条(左侧详情面板)滚动到底部?
解决左侧详情面板自动滚动问题
你的代码现在是对整个页面(document.body)执行滚动,而非目标左侧详情面板,所以没有效果。以下是修正方案:
问题核心
目标滚动区域是类名为main-panel-scroll的元素,必须针对这个元素内部执行滚动操作,不能操作整个页面。
修正后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager import time driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get('https://kart.1881.no/?query=1010') time.sleep(8) # 定位左侧详情面板元素 panel = driver.find_element(By.CLASS_NAME, 'main-panel-scroll') SCROLL_PAUSE_TIME = 0.5 while True: # 获取面板当前的内容总高度 last_scroll_height = driver.execute_script("return arguments[0].scrollHeight", panel) # 将面板滚动到底部 driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", panel) time.sleep(SCROLL_PAUSE_TIME) new_scroll_height = driver.execute_script("return arguments[0].scrollHeight", panel) # 检查是否滚动到底部(scrollTop+可视高度 >= 内容总高度,留10像素误差避免动态加载小偏差) current_scroll_top = driver.execute_script("return arguments[0].scrollTop", panel) panel_visible_height = driver.execute_script("return arguments[0].clientHeight", panel) if current_scroll_top + panel_visible_height >= new_scroll_height - 10: # 等待片刻确认是否有新内容加载 time.sleep(SCROLL_PAUSE_TIME) new_scroll_height = driver.execute_script("return arguments[0].scrollHeight", panel) current_scroll_top = driver.execute_script("return arguments[0].scrollTop", panel) if current_scroll_top + panel_visible_height >= new_scroll_height - 10: break else: continue time.sleep(10) driver.quit()
关键改动说明
- 先定位目标面板元素并保存为
panel变量,后续滚动脚本通过arguments[0]传入该元素 - 滚动逻辑改为设置元素的
scrollTop属性到自身的scrollHeight(即元素内部内容的总高度) - 判断是否到底部时,用
scrollTop + 元素可视高度和scrollHeight对比,比单纯比较scrollHeight更准确,能适配动态加载的场景
内容的提问来源于stack exchange,提问作者Harrierhawk
相关产品推荐
相关产品推荐

