You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Python网页滚动代码失效:滚动高度值不更新

Selenium Python滚动页面问题:scrollHeight无法更新,仅能滚动一次

我编写的Selenium Python代码本应滚动到网页底部,但首次滚动后oldHeight与newHeight的数值无法正常更新。尝试过window.innerHeight、Yoffset方法及return document.body.scrollHeight,这些方法要么返回固定值,要么滚动后数值不变;也试过window.scrollTo,但完全无法滚动。目前代码仅能滚动一次,多次发送PAGE_DOWN也无效,原代码如下:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("https://www.google.com/search?client=firefox-b-1-d&q=NFL+game+dates#sie=lg;/g/11k4hhjvj6;6;/m/059yj;mt;fp;1;;;2023-08-04T00:00:00Z/robots.txt")
driver.maximize_window()

body = driver.find_element(By.CSS_SELECTOR, "body")
oldHeight = driver.execute_script("return document.body.scrollHeight")
while True:
    print(oldHeight)
    body.send_keys(Keys.PAGE_DOWN)
    time.sleep(2)
    newHeight = driver.execute_script("return document.body.scrollHeight")
    print(newHeight)
    if newHeight == oldHeight:
        break
    else:
        oldHeight = newHeight

driver.close()

可行解决方案

方案1:改用document.documentElement.scrollHeight结合JavaScript滚动

Google搜索页面的body元素并非实际滚动容器,其scrollHeight不会随动态加载内容更新,改用document.documentElement(HTML根元素)的scrollHeight更准确,同时直接用JavaScript执行滚动操作比模拟按键更可靠:

import time
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.google.com/search?client=firefox-b-1-d&q=NFL+game+dates#sie=lg;/g/11k4hhjvj6;6;/m/059yj;mt;fp;1;;;2023-08-04T00:00:00Z/robots.txt")
driver.maximize_window()

old_height = driver.execute_script("return document.documentElement.scrollHeight")
while True:
    # 执行JS滚动到当前页面底部
    driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    time.sleep(2)  # 等待动态内容加载完成
    new_height = driver.execute_script("return document.documentElement.scrollHeight")
    print(f"旧高度: {old_height}, 新高度: {new_height}")
    if new_height == old_height:
        break
    old_height = new_height

driver.close()

方案2:定位搜索结果容器模拟按键

Google搜索结果加载在特定容器内,将焦点定位到该容器后再发送PAGE_DOWN按键,可解决按键无效的问题:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("https://www.google.com/search?client=firefox-b-1-d&q=NFL+game+dates#sie=lg;/g/11k4hhjvj6;6;/m/059yj;mt;fp;1;;;2023-08-04T00:00:00Z/robots.txt")
driver.maximize_window()

# 定位搜索结果的核心容器
search_container = driver.find_element(By.ID, "search")
old_height = driver.execute_script("return document.documentElement.scrollHeight")

while True:
    search_container.send_keys(Keys.PAGE_DOWN)
    time.sleep(2)
    new_height = driver.execute_script("return document.documentElement.scrollHeight")
    print(f"旧高度: {old_height}, 新高度: {new_height}")
    if new_height == old_height:
        break
    old_height = new_height

driver.close()

关键注意点

  • 避免使用document.body.scrollHeight,Google搜索页面的body高度不会随动态内容扩展,document.documentElement.scrollHeight才是正确的页面总高度。
  • 模拟按键时必须确保焦点在可滚动的内容容器内,否则按键操作会失效。
  • time.sleep(2)的等待时间可根据网络速度调整,确保内容完全加载后再进行高度判断。

内容的提问来源于stack exchange,提问作者Mak3rT0n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:31:20