如何在Google Script中通过Id/Class获取元素?解决相关报错问题
解决UrlFetchApp获取HTML后无法调用getElementById的问题
问题原因
response.getContentText()返回的是纯字符串格式的HTML代码,而getElementById()是浏览器DOM元素的专属方法,普通字符串不具备这个方法,因此会触发TypeError: html.getElementById is not a function。
解决方案
方法1:正则表达式直接提取EAN(高效适配目标需求)
你的核心需求是提取13位的EAN编号,直接用正则匹配HTML字符串中的13位数字即可,无需解析整个DOM:
function scrapeWebsite() { var url = 'https://www.bol.com/nl/nl/p/azul-tuin-van-de-koningin-bordspel/9300000094065315/?promo=main_860_product_4&bltgh=kj5mIYO78dnIY1vUCvxPbg.18_19.24.ProductTitle'; var response = UrlFetchApp.fetch(url); var html = response.getContentText(); // 匹配13位数字格式的EAN var eanRegex = /\b\d{13}\b/g; var matches = html.match(eanRegex); if (matches) { // 去重避免页面重复出现的EAN var uniqueEans = [...new Set(matches)]; Logger.log('提取到的EAN:' + uniqueEans.join(', ')); // 如需写入Google Sheet,取消以下注释 // var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // uniqueEans.forEach(ean => sheet.appendRow([ean])); } else { Logger.log('未找到EAN编号'); } }
方法2:用Cheerio库解析DOM(精准定位元素)
如果需要通过元素选择器精准提取内容,可以使用Cheerio库(Google Apps Script支持添加第三方库):
- 打开脚本编辑器,点击「资源」→「库」
- 输入库ID:
1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0,选择最新版本后添加 - 使用以下代码:
function scrapeWithCheerio() { var url = 'https://www.bol.com/nl/nl/p/azul-tuin-van-de-koningin-bordspel/9300000094065315/?promo=main_860_product_4&bltgh=kj5mIYO78dnIY1vUCvxPbg.18_19.24.ProductTitle'; var response = UrlFetchApp.fetch(url); var html = response.getContentText(); // 加载HTML到Cheerio var $ = Cheerio.load(html); // 替换为目标元素的选择器,比如页面中存储EAN的元素ID或类名 var eanText = $('#product-ean').text().trim(); // 示例选择器,请根据实际页面调整 Logger.log('提取到的EAN:' + eanText); }
注意事项
- 确认目标网站允许爬取,遵守其
robots.txt协议 - 如果页面内容是JavaScript动态渲染的,UrlFetchApp无法获取动态加载的内容,需考虑其他方案
内容的提问来源于stack exchange,提问作者PHV
相关产品推荐
相关产品推荐

