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

使用Cheerio结合Google Apps Script爬取网页无法获取目标元素如何解决

问题根因

代码拿不到返回值是两个核心问题导致的:

  • UrlFetchApp请求拿到的只是PageSpeed页面的初始静态HTML,页面展示的性能分数是页面加载完成后,前端JS动态计算、渲染生成的,初始返回的HTML源码里根本没有class为lh-gauge__percentage的元素
  • Cheerio只是静态HTML解析工具,没有浏览器运行环境,没法执行页面里的JS代码,自然选不到动态生成的节点,拿不到对应内容。
解决方法

别爬前端渲染的PageSpeed页面,直接调用官方的PageSpeed数据接口就行,不用解析DOM,稳定性比爬页面高很多:

  • 不需要额外引入Cheerio依赖,接口直接返回结构化JSON数据
  • 可以通过参数指定要获取移动端还是桌面端的检测结果
  • 直接从返回结构里取性能分数即可,分数是和页面展示一致的0-100百分制数值

参考实现代码:

function getPageSpeedPerformanceScore() {
  // 对要检测的目标地址做URL编码
  const targetPage = encodeURIComponent("http://www.juicecoldpressed.com/");
  // 组装请求地址,strategy参数传mobile获取移动端结果,传desktop获取桌面端结果
  const requestUrl = `https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=${targetPage}&strategy=mobile`;

  const fetchRes = UrlFetchApp.fetch(requestUrl);
  const resData = JSON.parse(fetchRes.getContentText());
  // 接口返回的分数是0-1区间的小数,乘100取整就是页面展示的百分制分数
  const score = Math.round(resData.lighthouseResult.categories.performance.score * 100);

  Logger.log(score);
  return score;
}
注意事项
  • 如果调用频次比较高,建议申请官方接口的调用密钥拼接到请求参数里,避免触发匿名调用的配额限制
  • 不要继续用爬前端DOM的方案,PageSpeed前端的类名、渲染逻辑随时可能调整,这类方案非常容易失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:27:29