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

求助:如何搭建Apps Script脚本抓取JavaScript渲染页面?

解决Apps Script抓取JS渲染页面的方案

嘿,我明白你现在的困境——想用Google Apps Script抓取JS渲染的页面,但发现Puppeteer没法直接在里面用对吧?其实核心问题在于:Apps Script的运行环境是Google云端的V8引擎,它没有Node.js的模块系统,也没法启动Chromium浏览器实例,所以Puppeteer这种依赖Node.js和本地浏览器的库直接用不了。不过别担心,有两种靠谱的方案能解决这个问题,我给你详细说说:

方案一:借助Google Cloud Functions运行Puppeteer(推荐,Google生态内无缝衔接)

这是最稳妥的方式,把Puppeteer的渲染逻辑放到Google Cloud Functions里,然后用Apps Script调用这个云函数获取渲染后的页面内容:

步骤1:创建并部署Google Cloud Function

  1. 打开Google Cloud Console,创建一个新的云函数,运行时选择Node.js 18+版本
  2. 在index.js中写入以下代码(负责接收URL,用Puppeteer渲染页面并返回HTML):
const puppeteer = require('puppeteer');

exports.renderPage = async (req, res) => {
  // 从请求参数里获取要抓取的URL
  const targetUrl = req.query.url;
  if (!targetUrl) {
    return res.status(400).send('请传入要渲染的URL参数');
  }

  try {
    // 启动无头浏览器,云环境需要加特殊参数
    const browser = await puppeteer.launch({
      args: ['--no-sandbox', '--disable-setuid-sandbox']
    });
    const page = await browser.newPage();
    // 等待页面完全加载(networkidle2表示网络请求基本停止)
    await page.goto(targetUrl, { waitUntil: 'networkidle2' });
    // 获取渲染后的完整HTML
    const renderedHtml = await page.content();
    
    await browser.close();
    // 返回HTML内容
    res.set('Content-Type', 'text/html');
    res.send(renderedHtml);
  } catch (err) {
    res.status(500).send(`渲染出错:${err.message}`);
  }
};
  1. 在package.json中添加Puppeteer依赖:
{
  "dependencies": {
    "puppeteer": "^21.0.0"
  }
}
  1. 部署云函数,测试阶段可以暂时设置为允许未认证调用(后续可以配置OAuth2认证提升安全性)

步骤2:在Apps Script中调用云函数

打开Google Apps Script编辑器,写入以下代码:

function fetchRenderedPage() {
  // 替换成你要抓取的JS渲染页面URL
  const targetUrl = 'https://your-target-js-page.com';
  // 替换成你的云函数部署地址,注意URL编码目标地址
  const cloudFunctionUrl = 'https://your-cloud-function-url.run.app/renderPage?url=' + encodeURIComponent(targetUrl);

  // 发送请求获取渲染后的HTML
  const response = UrlFetchApp.fetch(cloudFunctionUrl);
  const renderedHtml = response.getContentText();

  // 这里可以根据需求处理HTML,比如用XmlService解析提取内容
  console.log('渲染后的页面内容:', renderedHtml);
}

方案二:自己搭建Node.js渲染服务(适合有服务器的场景)

如果不想用Google Cloud Functions,你可以在自己的VPS或本地服务器上搭建一个简单的Express服务,用Puppeteer处理页面渲染,然后Apps Script通过UrlFetchApp请求这个服务获取内容,逻辑和方案一类似,只是部署环境换成了你自己的服务器。

额外小技巧:优先尝试直接抓取API接口

很多JS渲染的页面其实是通过AJAX请求后端API获取数据的,你可以打开浏览器开发者工具的「网络」面板,找到返回数据的API接口,直接用UrlFetchApp请求这些接口获取结构化数据,这种方式比渲染整个页面更高效,也更稳定。

注意事项

  • 记得给请求设置合理的User-Agent,避免被目标网站识别为爬虫
  • 不要频繁发送请求,遵守目标网站的robots协议和使用规则,防止被封禁IP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:13:58