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

Google Sheets Apps Script parseHtml函数报错,请求修复表格抓取代码

修复后的Google Apps Script代码

以下是修复后的完整代码,解决了HTML解析失败和按钮添加的问题:

function extractData() {
  var url = "https://www.theopenalliance.com/teams/2023/";
  // 开启异常静默,避免请求失败直接报错
  var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
  var html = response.getContentText();
  var data = parseHtml(html);
  
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clearContents();
  
  if (data.length > 0) {
    // 写入表格数据
    sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
    
    // 为含链接的单元格添加富文本链接(替代原attachButton)
    for (var i = 0; i < data.length; i++) {
      for (var j = 0; j < data[i].length; j++) {
        var cellValue = data[i][j];
        if (cellValue && cellValue.indexOf("http") === 0) {
          var range = sheet.getRange(i + 1, j + 1);
          // 创建富文本,显示"Link"并绑定链接
          var richText = SpreadsheetApp.newRichTextValue()
            .setText("Link")
            .setLinkUrl(cellValue)
            .build();
          range.setRichTextValue(richText);
        }
      }
    }
  }
}

function parseHtml(html) {
  var data = [];
  try {
    // 用HtmlService解析DOM,避免字符串匹配的脆弱性
    var doc = HtmlService.createHtmlOutput(html).getDocument();
    // 定位页面中的目标表格(页面唯一的团队数据表格)
    var table = doc.querySelector("table");
    if (!table) return data;
    
    // 获取所有行(包含表头)
    var rows = table.querySelectorAll("tr");
    rows.forEach(function(row) {
      var rowData = [];
      // 获取行内所有单元格(td和th)
      var cells = row.querySelectorAll("td, th");
      cells.forEach(function(cell) {
        // 检查单元格内是否有链接
        var link = cell.querySelector("a");
        if (link) {
          // 提取链接地址,处理相对链接
          var href = link.getAttribute("href");
          if (href.startsWith("/")) {
            href = "https://www.theopenalliance.com" + href;
          }
          rowData.push(href);
        } else {
          // 提取纯文本内容并去除首尾空格
          rowData.push(cell.textContent.trim());
        }
      });
      if (rowData.length > 0) {
        data.push(rowData);
      }
    });
  } catch (e) {
    console.error("解析HTML出错: ", e);
  }
  return data;
}

修复说明

  1. HTML解析逻辑重构

    • 放弃原有的字符串匹配和分割方式,改用HtmlService解析DOM结构,避免因HTML标签带属性(如<tbody class="xxx">)导致的匹配失败问题。
    • 自动处理相对链接(如/teams/xxx),转换为完整URL。
  2. 按钮功能替换

    • 原代码中attachButton方法不存在,改用富文本链接实现点击跳转功能,显示文本为"Link",点击后打开对应链接。
  3. 异常处理增强

    • 请求时添加muteHttpExceptions: true,避免因HTTP请求异常直接中断脚本;解析过程添加try-catch,便于排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:41:11