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

求助:如何用Selenium滚动到Google表格底部,或无需Selenium完整加载表格的替代方法

求助:如何用Selenium滚动到Google表格底部,或无需Selenium完整加载表格的替代方法

嗨,我来给你支几招!你遇到的这个Google表格滚动问题真的挺典型的——毕竟Google表格的页面结构和普通网页不一样,直接操作整个页面的滚动自然没效果。下面分两种情况给你解决思路:

一、修复Selenium滚动的问题

Google表格的内容是在独立的滚动容器里渲染的,不是整个页面的body,所以你之前用的window.scrollTo(0, document.body.scrollHeight)才会失效。得针对性操作这个容器:

方法1:直接定位滚动容器,一次性滚到底

先找到表格的滚动容器(Google表格的滚动容器通常带有grid-scrollable这类类名),然后用JavaScript直接设置它的滚动位置:

from selenium.webdriver.common.by import By

# 定位表格的滚动容器
scroll_container = driver.find_element(By.CSS_SELECTOR, ".grid-scrollable")
# 执行JS将容器滚动到底部
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container)

要是这个类名不对,你可以用浏览器F12开发者工具自己找:在表格内容区右键→检查,找到能滚动的父级div,看它的CSS类或选择器就行。

方法2:循环滚动+检查是否到底

担心一次性滚动不彻底(比如表格内容是动态加载的),可以用循环滚动,直到容器的滚动高度不再变化:

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

scroll_container = driver.find_element(By.CSS_SELECTOR, ".grid-scrollable")
last_height = driver.execute_script("return arguments[0].scrollHeight", scroll_container)

while True:
    # 滚动到当前容器的底部
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container)
    # 给页面一点加载新内容的时间
    time.sleep(1)
    # 获取最新的滚动高度
    new_height = driver.execute_script("return arguments[0].scrollHeight", scroll_container)
    # 如果高度不再变化,说明已经到底了
    if new_height == last_height:
        break
    last_height = new_height

方法3:优化ActionChains的滚动

你之前说ActionChains能移动页面,那可以优化成自动循环按PageDown键,直到到底:

import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

actions = ActionChains(driver)
while True:
    # 模拟按PageDown键
    actions.send_keys(Keys.PAGE_DOWN).perform()
    time.sleep(0.5)
    # 检查当前滚动位置是否已经到容器底部
    current_scroll = driver.execute_script("return document.querySelector('.grid-scrollable').scrollTop")
    max_scroll = driver.execute_script("return document.querySelector('.grid-scrollable').scrollHeight - document.querySelector('.grid-scrollable').clientHeight")
    if current_scroll >= max_scroll - 10:  # 留一点误差空间
        break

二、跳过Selenium,直接完整获取表格数据的替代方法

其实根本不用费劲渲染页面!Google表格支持直接导出原始数据,效率比Selenium高太多了:

方法1:直接导出CSV(最推荐)

对于公开的Google表格,你只需要把编辑链接改个后缀,就能直接下载CSV文件。比如你提供的表格,把末尾的edit?gid=0#gid=0改成export?format=csv&gid=0,然后用Python的requests库直接获取:

import requests
import pandas as pd

# 构造CSV导出链接
csv_url = "https://docs.google.com/spreadsheets/d/1DAQ__r9RNx4mHgcDoXvzda9-0d_yeP7hqXdRUZ67EtM/export?format=csv&gid=0"
# 请求并保存CSV
response = requests.get(csv_url)
with open("spreadsheet.csv", "wb") as f:
    f.write(response.content)

# 或者直接用pandas读取成DataFrame,省得存文件
df = pd.read_csv(csv_url)
print(df.head())

这个方法完全不用Selenium和bs4,直接拿到最原始的表格数据,省心又高效。

方法2:使用Google Sheets API(适合复杂场景)

如果需要更灵活地获取数据(比如只拿某几行、某几列),可以用Google Sheets API。不过需要先在Google Cloud控制台启用Sheets API,获取一个API密钥,然后这样请求:

import requests

api_key = "你的Google Cloud API密钥"
spreadsheet_id = "1DAQ__r9RNx4mHgcDoXvzda9-0d_yeP7hqXdRUZ67EtM"
# 指定要获取的范围,比如Sheet1的A到Z列
range_name = "Sheet1!A:Z"

# 构造API请求链接
url = f"https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet_id}/values/{range_name}?key={api_key}"
response = requests.get(url)
data = response.json()

# 打印获取到的数据
for row in data.get("values", []):
    print(row)

这个方法适合需要频繁、精准获取数据的场景,不过要多一步配置API密钥的操作。

总结一下:如果只是为了获取完整表格数据,优先用CSV导出的方法,完全不用碰Selenium;如果一定要用Selenium渲染页面,记得操作表格的专属滚动容器,而不是整个页面的body哦!

备注:内容来源于stack exchange,提问作者Max Mustermann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:29:36