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

Google Sheets异步加载数据问题:如何实现类Selenium等待机制?

Google Sheets动态数据加载问题解答

有没有类似Selenium的等待机制?

没有。Google Sheets内置的IMPORTHTML、IMPORTDATA这类导入函数都是一次性拉取页面的静态初始HTML,不会等待JavaScript动态渲染内容,没有Selenium那种显式/隐式等待的功能。

为什么=IMPORTHTML("https://www.cboe.com/delayed_quotes/vix/future_quotes/","table",1)返回空内容?

你要抓取的CBOE页面里的VIX期货表格是靠JavaScript动态加载的,页面刚加载的静态HTML里根本没这个表格的完整数据,IMPORTHTML只能读取静态内容,所以返回空很正常。

解决办法

用Google Apps Script写自定义抓取脚本

这是最靠谱的方式,脚本可以模拟浏览器加载页面、处理动态内容,步骤如下:

  1. 打开你的Google Sheet,点击「扩展程序」→「Apps Script」。
  2. 替换默认代码为下面的脚本(需要先在Apps Script的「库」中添加Cheerio库,库ID:1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0):
function fetchVIXFutures() {
  const targetUrl = "https://www.cboe.com/delayed_quotes/vix/future_quotes/";
  const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36";
  
  // 拉取页面内容
  const response = UrlFetchApp.fetch(targetUrl, {headers: {"User-Agent": userAgent}});
  const htmlContent = response.getContentText();
  
  // 用Cheerio解析HTML
  const $ = Cheerio.load(htmlContent);
  const targetTable = $("table").first();
  const tableData = [];
  
  // 提取表格的每一行数据
  targetTable.find("tr").each((_, row) => {
    const rowCells = [];
    $(row).find("th, td").each((_, cell) => {
      rowCells.push($(cell).text().trim());
    });
    if (rowCells.length > 0) tableData.push(rowCells);
  });
  
  // 把数据写入当前工作表的A1开始位置
  const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  activeSheet.getRange(1, 1, tableData.length, tableData[0].length).setValues(tableData);
}
  1. 保存脚本后,运行fetchVIXFutures,就能把动态加载的VIX期货表格数据导入Sheet了。

直接抓取数据源API

打开浏览器开发者工具的「网络」标签,刷新CBOE页面,找到加载数据的API请求(一般为JSON格式),然后用IMPORTJSON函数(可自定义编写或安装现成插件)直接拉取API数据,这种方式比抓取页面更高效稳定。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:27:28