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

使用Cheerio爬取网页时如何获取JavaScript变量值?

解决Cheerio爬取客户端渲染页面时获取不到实际值的问题

你遇到的核心问题是目标页面采用客户端渲染(CSR):初始HTML仅包含模板占位符{{ percentage rates.product.currentRate }},实际利率是浏览器加载JS后动态渲染到DOM中的。Cheerio只能解析静态HTML,无法执行JS,直接提取page.content()得到的是未渲染的初始内容。

以下是针对你使用无头浏览器的解决方案:

方案1:直接用无头浏览器API获取渲染后的值(推荐)

无需依赖Cheerio,利用无头浏览器(如Puppeteer)的原生API等待元素渲染完成,直接提取DOM文本:

const BankofAmericaScraper = async (browser) => {
  const date = new Date().toLocaleDateString();
  const page = await browser.newPage();
  await page.goto('https://www.bankofamerica.com/home-equity/assumptions-home-equity/?loanType=homeEquity&state=CA', {
    waitUntil: 'networkidle2', // 等待网络空闲,确保JS加载及渲染完成
    timeout: 0,
  });

  // 等待目标元素可见并提取文本
  const rateValue = await page.waitForSelector('.col-num-2:nth-child(3)', { visible: true })
    .then(el => el.evaluate(node => node.textContent.trim()));

  console.log(rateValue); // 输出实际利率值,如6.650
  await page.close();
  return { date, rateValue };
}

方案2:若必须使用Cheerio,先等待渲染完成再提取内容

如果坚持用Cheerio解析,需先让无头浏览器等待页面完全渲染,再获取最终的HTML内容:

const cheerio = require('cheerio');

const BankofAmericaScraper = async (browser) => {
  const date = new Date().toLocaleDateString();
  const page = await browser.newPage();
  await page.goto('https://www.bankofamerica.com/home-equity/assumptions-home-equity/?loanType=homeEquity&state=CA', {
    waitUntil: 'networkidle2',
    timeout: 0,
  });

  // 等待元素内容不是模板占位符,确保渲染完成
  await page.waitForSelector('.col-num-2:nth-child(3):not(:contains("{{"))');

  const renderedContent = await page.content();
  const $ = cheerio.load(renderedContent);
  const rateValue = $('.col-num-2').eq(2).text().trim(); // eq(2)对应第三个.col-num-2元素

  console.log(rateValue);
  await page.close();
  return { date, rateValue };
}

关键注意事项

  • 将waitUntil从load改为networkidle2:load仅等待页面基本资源加载完成,networkidle2会等待网络请求降至2个以下,确保JS执行和数据渲染完成。
  • 避免直接操作DOM数组:你原代码中Object.values($(".col-num-2")[2])[5]的写法不稳定,DOM结构变化后会失效,优先用选择器或索引定位元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:18:33