使用Google Apps Script获取OpenSea主页Twitter链接遇403错误求助
解决方案
1. 修复403反爬问题(页面抓取方式)
OpenSea返回403是因为请求被识别为非浏览器发起的机器人请求,只需在请求中添加模拟浏览器的请求头即可绕过。修改后的代码如下:
function getTwitterLink() { var url = "https://opensea.io/0xe7dAe42Dee2BB6C1ef3c65e68d3E605faBcA875d"; // 添加浏览器标识请求头,避免被反爬拦截 var options = { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Accept-Language': 'en-US,en;q=0.9' }, muteHttpExceptions: true // 开启后可查看完整错误响应,方便调试 }; var response = UrlFetchApp.fetch(url, options); var responseCode = response.getResponseCode(); if (responseCode !== 200) { Logger.log("请求失败,状态码:" + responseCode); Logger.log("响应内容:" + response.getContentText()); return null; } var html = response.getContentText(); // 调整正则匹配a标签中的Twitter链接,适配页面结构 var regex = /href="(https:\/\/twitter\.com\/[^"]+)"/i; var match = regex.exec(html); if (match && match.length > 1) { var twitterLink = match[1]; Logger.log("Twitter Link: " + twitterLink); return twitterLink; } else { Logger.log("未找到Twitter链接。"); return null; } }
不过这种页面抓取方式稳定性较差,一旦OpenSea调整页面结构,正则就会失效。
2. 使用OpenSea API获取(更可靠方案)
OpenSea提供了官方API接口获取账户信息,返回结果中直接包含社交链接,完全不受页面结构变化影响。
实现步骤:
- 登录OpenSea后,在设置页面申请API密钥(免费额度足够个人使用)
- 调用账户信息接口提取Twitter链接
修改后的代码如下:
function getTwitterLinkViaAPI() { var walletAddress = "0xe7dAe42Dee2BB6C1ef3c65e68d3E605faBcA875d"; var apiKey = "你的API密钥"; // 替换为你申请到的OpenSea API密钥 var url = "https://api.opensea.io/api/v1/account/" + walletAddress; var options = { headers: { 'X-API-KEY': apiKey, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } }; try { var response = UrlFetchApp.fetch(url, options); var data = JSON.parse(response.getContentText()); // 从API返回的社交链接中提取Twitter地址 var socialLinks = data.account.social_links; if (socialLinks && socialLinks.twitter) { var twitterLink = "https://twitter.com/" + socialLinks.twitter; Logger.log("Twitter Link: " + twitterLink); return twitterLink; } else { Logger.log("API响应中未找到Twitter链接。"); return null; } } catch (e) { Logger.log("API请求出错:" + e.toString()); return null; } }
关键说明:
- API返回的
social_links.twitter是Twitter用户名,需要拼接成完整链接使用 - 该方案依赖官方API,稳定性远高于页面抓取
内容的提问来源于stack exchange,提问作者EagleEye
相关产品推荐
相关产品推荐

