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

在Puppeteer的evaluate中传自定义函数报错:parseToNumber is not a function

问题原因及修复方案

核心错误:语法结构混乱

你在puppeteer.launch()的配置对象内部直接编写了let page = await browser.newPage();,这是严重的语法错误——launch()的参数是配置对象,不能在对象内部放置变量声明和await语句,这会导致整个函数执行逻辑混乱,进而引发后续参数传递异常,最终出现parseToNumber is not a function的报错。

修复后的完整代码

const parseToNumber = (inputString) => {
   const cleanedString = inputString.replace(/[^0-9a-zA-Z]+/g, '');
   const numberValue = parseInt(cleanedString);
   return numberValue;
}

async function getData(){
  try {
    let browser = await puppeteer.launch({
      headless: false,
      slowMo: 100,
      defaultViewport: {
          width: 1280,
          height: 1024,
      }
    }); // 正确闭合launch调用
    
    let page = await browser.newPage(); // 将page创建逻辑移到launch外部
    const url= "MY_URL";
    await page.goto(url, {
        waitUntil: "networkidle0",
    });

    // evaluate回调无需async,因为parseToNumber是同步函数
    const result = await page.evaluate((parseToNumber)=>{
       return parseToNumber("2,42$");
    }, parseToNumber);
    
    console.log(result); // 可打印结果验证功能是否正常
    await browser.close(); // 记得关闭浏览器释放资源
  } catch (err) {
    console.log("error loading url", err);
  }
}

getData();

额外说明

  • Puppeteer的page.evaluate()会将传入的函数序列化后注入页面上下文执行,箭头函数可以正常传递,但必须保证外层语法无错误,否则参数传递会直接失效。
  • 原代码给evaluate回调添加了async,但内部没有异步操作,完全可以去掉,避免不必要的异步嵌套。
  • 改用try/catch包裹整个逻辑,比链式catch更清晰,也能覆盖更多执行环节的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:25:04