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

运行时间驱动触发器时提示Script function not found问题求助

问题描述

运行以下脚本时遇到错误:

function getCoinData() {
  var queryString = Math.random();

  var getCoin = "/html/body/div[1]/div/div/div/div[2]/main/div/div[1]/div[2]/div[1]/span";
  var Dolar = '=IMPORTXML("' + 'https://br.investing.com/currencies/usd-brl' + '?' + queryString + '";"'+ getCoin + '")';
  var Euro = '=IMPORTXML("' + 'https://br.investing.com/currencies/eur-brl' + '?' + queryString + '";"'+ getCoin + '")';
  var Bitcoin = '=IMPORTXML("' + 'https://br.investing.com/indices/investing.com-btc-brl' + '?' + queryString + '";"'+ getCoin + '")';
  
  SpreadsheetApp.getActiveSheet().getRange('D2').setValue(Dolar);
  SpreadsheetApp.getActiveSheet().getRange('D3').setValue(Euro);
  SpreadsheetApp.getActiveSheet().getRange('D4').setValue(Bitcoin);
}
解决方案

1. 替换不稳定的绝对XPath

你当前使用的是绝对XPath,这类路径会随网站布局调整直接失效。改用基于页面属性的相对XPath,能大幅提升稳定性:

// 针对investing.com的实时价格元素,使用data-test属性定位
var getCoin = '//span[@data-test="instrument-price-last"]';

2. 绕开网站反爬拦截

直接使用IMPORTXML容易被investing.com的反爬机制拦截,建议改用UrlFetchApp模拟浏览器请求后解析内容:

function getCoinData() {
  // 模拟浏览器请求头
  var requestOptions = {
    headers: {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
  };

  // 定义各币种页面URL
  var coinUrls = {
    dolar: 'https://br.investing.com/currencies/usd-brl',
    euro: 'https://br.investing.com/currencies/eur-brl',
    bitcoin: 'https://br.investing.com/indices/investing.com-btc-brl'
  };

  // 提取页面中价格的工具函数
  function getPriceFromPage(url) {
    try {
      var response = UrlFetchApp.fetch(url, requestOptions);
      var pageContent = response.getContentText();
      // 正则匹配价格文本
      var priceMatch = pageContent.match(/data-test="instrument-price-last"[^>]*>([\d,.]+)</);
      return priceMatch ? priceMatch[1] : '获取失败';
    } catch (e) {
      return '请求错误: ' + e.message;
    }
  }

  // 写入数据到表格
  var activeSheet = SpreadsheetApp.getActiveSheet();
  activeSheet.getRange('D2').setValue(getPriceFromPage(coinUrls.dolar));
  activeSheet.getRange('D3').setValue(getPriceFromPage(coinUrls.euro));
  activeSheet.getRange('D4').setValue(getPriceFromPage(coinUrls.bitcoin));
}

3. 额外注意事项

  • 首次运行脚本时,需授权UrlFetchApp的网络访问权限
  • 避免短时间内重复执行脚本,防止触发网站频率限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:05:54