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

使用Node.js+Cheerio获取img src始终返回undefined的问题求助

解决Cheerio获取img src返回undefined的问题

我来帮你排查下为什么拿不到img的src属性,踩过类似的坑,咱们一步步来分析:

1. 先检查Cheerio的调用方式是否正确

你是不是直接用了$('#video_jacket_img').src?这是新手常犯的错!Cheerio返回的是类DOM对象,不是原生浏览器的DOM元素,必须用.attr('src')方法来获取属性值。正确的代码应该是这样:

axios.get(baseUrl).then(response => {
  let $ = cheerio.load(response.data, {
    ignoreWhitespace: true, // 补全你没写完的配置
    decodeEntities: true    // 确保字符编码正常解析
  });
  const imgSrc = $('#video_jacket_img').attr('src');
  console.log(imgSrc); // 现在应该能拿到值了
});

如果还是不行,先打印选中的元素数量确认是否找到目标:

console.log($('#video_jacket_img').length); // 输出1说明找到了,0就是选择器没匹配到

2. 确认页面是否是静态渲染的

如果上面的代码还是返回undefined,那你得先验证下:直接在浏览器里查看页面源码(不是开发者工具的Elements标签,而是右键选「查看页面源代码」),看看里面有没有src="link.image.com"这段内容。

要是页面源码里根本没有这个src值,那说明图片是通过JavaScript动态注入的——axios只能拿到服务器返回的静态HTML,无法获取JS渲染后的内容。这种情况就得换用无头浏览器工具,比如Puppeteer,模拟浏览器加载页面并等待JS执行完成:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(baseUrl);
  // 等待元素加载完成(可选,确保元素已渲染)
  await page.waitForSelector('#video_jacket_img');
  const imgSrc = await page.$eval('#video_jacket_img', img => img.src);
  console.log(imgSrc);
  await browser.close();
})();

3. 排查Cheerio的加载配置

你代码里写的ignoreWhit...应该是ignoreWhitespace,这个配置本身没问题,但如果页面里有特殊的注释或嵌套结构,偶尔会影响选择器匹配。可以试试去掉自定义配置,用默认的Cheerio加载方式先测试:

let $ = cheerio.load(response.data); // 先不用额外配置,看是否能正常选中元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:00:32