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

使用Node.js+puppeteer+cheerio爬取数据时报$ is not a function错误如何解决

错误根因

  • Cheerio 初始化方式错误:直接导入的$不是DOM查询函数,需要先调用load方法加载页面HTML,生成对应页面的查询实例才能使用
  • 异步代码缺少异常捕获逻辑,抛出的错误没有被接收,才触发UnhandledPromiseRejectionWarning警告
  • 遍历DOM的回调使用箭头函数,this指向异常,无法正确获取当前遍历的DOM元素

修复后代码

import puppeteer from 'puppeteer';
import cheerio from 'cheerio';
import { CronJob } from 'cron';
import nodemailer from 'nodemailer';

const url = 'https://www.amazon.eg/-/en/Sony-Bluetooth-Cancellation-Headphone-Microphone/dp/B08F4XTS93/'

async function configureBrowser() {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(url);
    return page;
}

async function checkPrice(page) {
    await page.reload();
    let html = await page.evaluate(() => document.body.innerHTML);
    // 先加载HTML生成cheerio查询实例
    const $ = cheerio.load(html);
    
    $('#priceblock_ourprice').each((index, ele)=>{
        // 用回调参数获取当前元素,避免箭头函数this指向问题
        let EGPPrice = $(ele).text()
        console.log(EGPPrice);
    })
}

async function monitor(){
    try {
        let page = await configureBrowser()
        await checkPrice(page)
    } catch (err) {
        // 捕获所有异步异常
        console.error('运行出错:', err)
    }
}

monitor()

补充说明

如果是Cheerio v1及以上版本,导入语法需要调整为import * as cheerio from 'cheerio',其余使用逻辑保持一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:15:05