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

如何用Cheerio爬取浏览器显示但源码为 的innerHTML内容?

问题原因与解决方法

原因

你看到的页面显示内容是JavaScript动态生成的,服务器返回的原始静态HTML里,这个td#spv0确实只有 空白字符。Cheerio只能解析静态HTML,无法执行页面中的JavaScript,所以拿不到浏览器渲染后才出现的数值。

解决办法

方法1:直接请求数据接口(优先推荐)

打开浏览器开发者工具的「Network」面板,过滤「XHR/Fetch」类型的请求,找到返回航向/速度数据的API接口。直接用Node.js的axios或fetch请求这个接口,就能拿到结构化的原始数据,比爬页面更高效。

示例代码(用axios):

const axios = require('axios');

async function fetchSpeedData() {
  try {
    const response = await axios.get('找到的API接口URL');
    // 假设接口返回的JSON里包含course和speed字段
    const course = response.data.course;
    const speed = response.data.speed;
    console.log(`${course}° / ${speed} kn`);
  } catch (error) {
    console.error('请求接口失败:', error);
  }
}

fetchSpeedData();

方法2:使用无头浏览器渲染页面

如果找不到接口,就用Puppeteer这类无头浏览器工具,模拟浏览器加载页面并执行JavaScript,等内容渲染完成后再提取数据。

步骤:

  1. 安装依赖:
npm install puppeteer
  1. 示例代码:
const puppeteer = require('puppeteer');
const cheerio = require('cheerio');

async function getRenderedSpeedData() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  // 等待页面加载完成(networkidle2表示网络请求少于2个时认为加载完成)
  await page.goto('目标页面的完整URL', { waitUntil: 'networkidle2' });

  // 获取渲染后的HTML内容
  const renderedHtml = await page.content();
  const $ = cheerio.load(renderedHtml);

  // 提取目标文本
  const speedText = $('#spv0').text().trim();
  console.log(speedText);

  await browser.close();
}

getRenderedSpeedData();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:45:51