Google Sheets Apps Script域名可用性查询函数修复请求——GoDaddy查询结果异常问题
解决Google Sheets中域名可用性查询函数失效的问题
这个问题我熟!你的函数不管域名是否可用都返回Y,核心原因有两个:
- GoDaddy的页面结构已经更新,你之前用来判断可用的文本
Why it's great.要么不再专属可用域名的场景,要么已经从页面中消失了; - 现在GoDaddy的搜索结果是JS动态渲染的,UrlFetchApp直接请求拿到的只是初始空页面的HTML,根本没有实际的域名可用性数据。
下面给你两种解决方案,优先推荐第一种(稳定可靠):
方案1:使用GoDaddy官方API(最推荐)
直接调用官方API是最靠谱的方式,不会因为页面更新失效,而且返回的是结构化数据,准确率100%。
步骤:
- 去GoDaddy开发者平台申请免费的API密钥(个人使用免费额度完全足够),获取你的
API Key和API Secret; - 替换下面代码中的密钥,然后在Google Sheets中使用这个函数:
function checkDomainAvailability(domainName) { // 替换成你的GoDaddy API Key和Secret const API_KEY = "你的API_KEY"; const API_SECRET = "你的API_SECRET"; // 编码域名,避免特殊字符问题 const encodedDomain = encodeURIComponent(domainName); const apiUrl = `https://api.godaddy.com/v1/domains/available?domain=${encodedDomain}`; const requestOptions = { method: "GET", headers: { "Authorization": `sso-key ${API_KEY}:${API_SECRET}`, "Content-Type": "application/json" }, muteHttpExceptions: true // 捕获HTTP异常,避免函数崩溃 }; try { const response = UrlFetchApp.fetch(apiUrl, requestOptions); const result = JSON.parse(response.getContentText()); // 直接返回可用性状态 return result.available ? "Y" : "N"; } catch (error) { console.error("查询出错:", error); return "Error"; // 出错时返回错误标识 } }
方案2:调整网页爬取逻辑(临时方案)
如果你暂时不想用API,可以尝试匹配GoDaddy页面中嵌入的初始状态JSON(这个是JS渲染前的数据源),不过这个方法可能随时因为页面更新失效:
function domainavail(domain) { const encodedDomain = encodeURIComponent(domain); const targetUrl = `https://www.godaddy.com/domainsearch/find?checkAvail=1&segment=repeat&domainToCheck=${encodedDomain}`; const requestOptions = { muteHttpExceptions: true, followRedirects: false, // 模拟浏览器请求,避免被识别为爬虫 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" } }; const response = UrlFetchApp.fetch(targetUrl, requestOptions); const html = response.getContentText(); // 尝试匹配页面中的初始状态JSON const initialStateMatch = html.match(/window\.__INITIAL_STATE__\s*=\s*({.*?});/s); if (initialStateMatch && initialStateMatch[1]) { try { const initialState = JSON.parse(initialStateMatch[1]); // 查找目标域名的可用性数据(路径可能随页面更新变化) const domainResults = initialState?.domainSearch?.results?.domains; if (domainResults && domainResults.length > 0) { const target = domainResults.find(item => item.domain.toLowerCase() === domain.toLowerCase()); return target?.available ? "Y" : "N"; } } catch (parseError) { console.error("解析初始状态失败:", parseError); } } // 兜底逻辑,如果上面的匹配失败,返回默认值 return "N"; }
注意:
方案2的匹配路径(比如initialState.domainSearch.results.domains)可能随时被GoDaddy修改,所以还是优先用方案1的API方法。
内容的提问来源于stack exchange,提问作者Lauren
相关产品推荐
相关产品推荐

