运行时间驱动触发器时提示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
相关产品推荐
相关产品推荐

