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
相关产品推荐
相关产品推荐

